首页 > 其他分享 >.NET 6 Swagger+JWT 配置

.NET 6 Swagger+JWT 配置

时间:2024-06-21 14:57:02浏览次数:20  
标签:swagger string JWT Jwt var new NET Swagger options

1.1 封装一个SwaggerExtend类(包含JWT配置)

/// <summary>
    /// Swagger 静态类
    /// </summary>
    public static class SwaggerExtend
    {
        /// <summary>
        /// 添加服务: swagger
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static void AddCustSwagger(this IServiceCollection services)
        {
            var version = "V1.0";
            var apiName = "XXX系统";
            services.AddSwaggerGen(options =>
            {
                options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());

                options.SwaggerDoc("system_v1", new OpenApiInfo
                {
                    Version = version,
                    Title = $"{apiName} API",
                    Description = $"{apiName} {version} 接口服务"
                });

                //  获取应用程序所在目录
                var basePath = Path.GetDirectoryName(typeof(SwaggerExtend).Assembly.Location);
                var xmlPath = Path.Combine(basePath, "dichanweb.xml");

                //  swagger界面默认只显示 方法&字段 注释,不显示 控制器注释
                //  第二个参数为true, 则是controller的注释
                //options.IncludeXmlComments(xmlPath);
                options.IncludeXmlComments(xmlPath, true);

                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer { token }\"",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.Http,
                    Scheme = "Bearer",
                    BearerFormat = "JWT",
                });
                options.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference=new OpenApiReference()
                            {
                                Id="Bearer",
                                Type=ReferenceType.SecurityScheme
                            }
                        },
                       new string[]{}
                    }
                });
            });
            services.AddAuthentication(option =>
            {
                option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
                {
                    string Jwt_Issuer = "test.cn";
                    string Jwt_Audience = "test";
                    string Jwt_SecretKey = "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789";

                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateIssuerSigningKey = true,
                        ValidIssuer = Jwt_Issuer,
                        ValidAudience = Jwt_Audience,
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Jwt_SecretKey))
                    };
                });

        }

        /// <summary>
        /// 添加中间件: swagger
        /// </summary>
        /// <param name="app"></param>
        public static void UseCustSwagger(this IApplicationBuilder app)
        {
            app.UseSwagger();
            app.UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/swagger/system_v1/swagger.json", "系统API");
                //  默认路径为:/swagger/index.html
                //  路由前缀 - 设置为空,可直接跳转到swagger页面:/index.html
                //  api测试可设置为空,部署时容易与前端路由冲突
                options.RoutePrefix = string.Empty;

                // 禁用Swagger UI的自动跳转行为
                //options.EnableValidator();
                options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);
            });
        }
    }

1.2注入

builder.Services.AddCustSwagger();
/*认证*/
app.UseAuthentication();
/*授权*/
app.UseAuthorization();

1.3 用户登录后返回TOKEN的方法

 private string GenerateJwtToken(T_User user)
        {
            string Jwt_Issuer = "test.cn";
            string Jwt_Audience = "test";
            string Jwt_SecretKey = "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789";

            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, user.FMobilePhone)
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Jwt_SecretKey));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: Jwt_Issuer,
                audience: Jwt_Audience,
                claims: claims,
                expires: DateTime.UtcNow.AddHours(1),
                signingCredentials: creds);

            return new JwtSecurityTokenHandler().WriteToken(token);
        }

 参考:https://www.cnblogs.com/CRobot/p/16715909.html

标签:swagger,string,JWT,Jwt,var,new,NET,Swagger,options
From: https://www.cnblogs.com/linyijia/p/18260489

相关文章

  • 闲鱼面试:说说JWT工作原理?
    JWT(JSONWebToken)一种开放的标准规范(RFC7519),用于在网络上安全的传输信息,通常被用于身份验证。简单来说,你可以把JWT想象成一张小巧的、自包含的电子通行证。这张通行证里面包含了用户的身份信息,就像你在某个俱乐部的会员卡,上面有你的名字、会员等级等信息,拿着这张卡,你就能证......
  • Anthropic 推出 Claude 3.5 Sonnet,称新模型优于 GPT-4 Omni
    近日,人工智能研究公司Anthropic宣布推出其最新的语言模型Claude3.5Sonnet,并声称该模型在多个方面优于OpenAI的GPT-4Omni。这一消息在人工智能领域引起了广泛关注和讨论。本文将详细介绍Claude3.5Sonnet的技术特点、应用前景以及其与GPT-4Omni的对比。http://www.z......
  • Anthropic 的 Claude 3.5 Sonnet 在企业人工智能竞赛中胜过 OpenAI 和谷歌
    全球领先的人工智能研究公司Anthropic宣布推出Claude3.5Sonnet,这是一款集无与伦比的性能和成本效益于一身的开创性人工智能模型。克劳德模型系列的最新迭代产品将彻底改变企业人工智能的格局,以低于竞争对手的成本为企业提供最先进的功能。Anthropic联合创始人Daniel......
  • 【车载网络协议】【Ethernet】【ARP】【第二章-字段介绍】
    一、报文类型ARP协议中的请求(Request)和响应(Reply)是通过特定的字段来进行交换信息的。下面是对ARP请求和响应字段的详细介绍。二、请求报文硬件类型(HardwareType):指定网络接口的硬件类型,例如以太网通常使用1表示以太网。协议类型(ProtocolType):指定网络层协议类型,例如IPv4......
  • 【车载网络协议】【Ethernet】【ARP】【第三章-缓存介绍】
    一、概念简介ARP(AddressResolutionProtocol)是一种用于将网络层地址(IP地址)解析为数据链路层地址(MAC地址)的协议。ARPCache是ARP协议在计算机或网络设备上维护的一个重要数据结构,用于存储IP地址与对应的MAC地址之间的映射关系。本文将介绍ARPCache的作用、工作原理......
  • Unet已死,Transformer当立!详细解读基于DiT的开源视频生成大模型EasyAnimate
    DiffusionModels视频生成-博客汇总前言:最近阿里云PIA团队开源了基于DiffusionTransformer结构的视频生成模型EasyAnimate,并且提出了专门针对视频的sliceVAE,对于目前基于Unet结构的视频生成最好如SVD形成了降维打击,不论是生成质量、生成时长上都是遥遥领先。这篇博客详细......
  • mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版
    Magnet是一款针对MacOS系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口,通过简单的快捷键操作,可以将窗口自动调整到指定的位置和大小,实现多窗口快速布局。Magnet还支持多显示器环境下的窗口管理,可以让用户更加轻松地在多屏幕之间切换和布局窗口。......
  • Windows的Gitlab Runner搭配的PowerShell脚本:发布传统ASP.NET Web应用程序
    简介GitlabRunner在Windows上运行之后,我们在.gitlab-ci.yml中编写script语句,思路和Linux是一样。但是考虑到Windows的特点,为了让程序员少接触一些知识点,以及给未来执行作业的时候预留更多的操作空间。简单说就是未来修改执行作业时候的逻辑,但是每个软件仓库根目录下的.gitlab-ci......
  • 通过获取的jwt认证token,实现自动登录django-admin后台
    视图层fromrest_framework_simplejwt.tokensimportAccessTokenfromdjango.middleware.csrfimportget_tokenfromdjango.contrib.authimportloginclassJwtToSessionView(GenericViewSet):@action(methods=['GET'],detail=False)defset(self,......
  • session、cookies、tonken以及JWT的定义以及区别
    session概述Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。Session是由服务器端创建的原理Session会为每一次会话分配一个S......