热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Asp.NetCore3.X使用Swagger+jwt模式

什么是Swagger?什么是jwt?Swagger就是一个查看api接口的一个文档工具,方便使用测试,你可以理解为方法都被

什么是Swagger?什么是jwt?

Swagger就是一个查看api接口的一个文档工具,方便使用测试,你可以理解为方法都被罗列出来,而且postman测试的输入方法url的过程也被解析了,省事。
jwt是一个认证授权的工具,json web token,它相较于传统session,COOKIE这种较麻烦承载认证的验证方式更方便。


怎么使用Swagger+jwt?

1.引用nuGet 包

Swashbuckle.AspNetCore -Swagger
Swashbuckle.AspNetCore.Filters -Swagger
Microsoft.AspNetCore.Authentication.JwtBearer --JWT

2.IOC容器注册此 俩个 服务

3.配置 中间件

4.jwt需要一个登录方法来实现token,从而达到认证效果


怎么注册服务和配置中间价?

内置的服务和中间件都是这样的

public void ConfigureServices(IServiceCollection services){services.AddControllers();}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

你会发现比较简洁,在于都是封装好的,不会有复杂的代码,都是一句话Add… app…
所以一般来讲 配置服务和中间件都要封装一下 避免在看上去很多代码。


怎么封装?

1.首先建一个 Extension文件夹 为了统一管理好找
2.建立相应名称含义的类 此案例取名为 JwtSwaggerEx.cs
3.写相应处理代码 下方有代码段
(涉及AppSettings读取配置文件的代码)获取配置文件内容
4.startup类直接调用封装方法

第三步骤封装代码片段,共3个方法 AddSwaggerEx /AddJwtEx /UseSwaggerEx

public static class JwtSwaggerEx{///

/// Swagger注入/// /// /// /// /// public static IServiceCollection AddSwaggerEx(this IServiceCollection services){services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "方便测试API", Version = "v1" });// Set the comments path for the Swagger JSON and UI.var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);c.IncludeXmlComments(xmlPath);c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme(){Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",Name = "Authorization",In = ParameterLocation.Header,Type = SecuritySchemeType.ApiKey,BearerFormat = "JWT",Scheme = "Bearer"});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme,Id = "Bearer"}},new string[] { }}});});return services;}public static IServiceCollection AddJwtEx(this IServiceCollection services){ services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{//Token颁发机构ValidIssuer = AppSettings.JwtSetting.Issuer,//颁发给谁ValidAudience = AppSettings.JwtSetting.Audience,//这里的key要进行加密,需要引用Microsoft.IdentityModel.TokensIssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSettings.JwtSetting.SecurityKey)),//ValidateIssuerSigningKey=true,//是否验证Token有效期,使用当前时间与Token的Claims中的NotBefore和Expires对比ValidateLifetime = true,//允许的服务器时间偏移量ClockSkew = TimeSpan.Zero};});return services;}public static IApplicationBuilder UseSwaggerEx(this IApplicationBuilder app){app.UseSwagger();app.UseSwaggerUI(c =>{c.SwaggerEndpoint("/swagger/v1/swagger.json", "基础接口");});return app;}}

第4步在ConfigureServices 和 Configure 中 加入使用

services.AddSwaggerEx();services.AddJwtEx();app.UseSwaggerEx();

这样swagger+jwt配置就完成了! 启动效果如下:

在这里插入图片描述

接下来如何 让jwt的认证 起到作用呢,需要写一个Login登录方法 让token生产

该方法的参数都是模拟的,实际的话可以通过数据库验证用户名密码

[AllowAnonymous][HttpGet]public string Login(string username, string password){var claims = new Claim[]{new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),new Claim("id", "ceshi", ClaimValueTypes.Integer32), // 用户idnew Claim("name", "ceshi"), // 用户名};var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AppSettings.JwtSetting.SecurityKey));var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);//创建令牌var token = new JwtSecurityToken(issuer: AppSettings.JwtSetting.Issuer,audience: AppSettings.JwtSetting.Audience,signingCredentials: creds,claims: claims,notBefore: DateTime.Now,expires: DateTime.Now.AddSeconds(AppSettings.JwtSetting.ExpireSeconds));string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);return jwtToken;}

然后开始使用jwt的功能
1:先用一下swagger 方便测试一下 Login方法 得到token的值
在这里插入图片描述
在这里插入图片描述
2.将token 输入到认证框中
在这里插入图片描述
在这里插入图片描述
3.这样就token生效了,然后测试别的 控制器中的方法 如果方法特性加了
[Authorize] 就会被去验证,如果你不去把Token给加上的话,就过不去会报401错误。
在这里插入图片描述
OK,这样的话就完成了 认证!

注意:1 如果要xml 注释的话 也就是方法中///中的注释显示到swagger上 项目 右键属性 -生成 把xml勾上 不然找不到
2 如果想启动项目就是swagger 就在launchSettings.json 中 设置"launchUrl": “swagger” 不然可能是index控制器


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 标题: ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
author-avatar
nora抹抹茶I
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有