栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

开启Swagger的JWT - .Net5

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开启Swagger的JWT - .Net5

[原创] 如有雷同纯属巧合,如有转载,请注明,谢谢爛。

如下两个service是写在两个不同的application里面的,这里并没有写对于传入参数的验证,因此需要自己去完善一下

JWT Service

在Nuget中下载 system.IdentityModel.Tokens.Jwt

JWT 这里经行token解码

在相关的Controller里面添加如下代码

[HttpPost("Login")]
public async Task Login(string username, string password)
{
    string pwd = MD5Helper.MD5Encrypt32(password); //这个MD5的方法在文章最后面有补充,当然大家也可以在网上搜更好的,更适合自己的
    var userInfo = await _userInfoService.FindAsync(c=>c.UserName == username&&c.UserPwd == pwd);
    if (userInfo!=null)
    {
        var claims = new Claim[]
        {
            new Claim(ClaimTypes.Name,userInfo.Name),
            new Claim("Id",userInfo.Id.ToString()),
            new Claim("UserName",userInfo.UserName),
            ... //可以自己再加额外的
        };
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Guid")); //此key要与web service端的key保持一致
        var token = new JwtSecurityToken(
            issuer: "JWT Service url",
            audience: "Web Service url",
            claims:claims,
            notBefore:DateTime.Now,
            expires:DateTime.Now.AddHours(1),
            signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)//这块有很多方式,大家可以自行选择
        );
        var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
        return APIResultHelper.Success(jwtToken);
    }
    else
    {
        return APIResultHelper.Error("UserName or Password is incorrect");
    }
}

public static string MD5Encrypt32(string password)
        {
            string pwd = "";
            MD5 md5 = MD5.Create();
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
            for (int i =0; i< s.Length; i++)
            {
                pwd = pwd + s[i].ToString("X");
            }
            return pwd;
        }
Web Serivce

在Nuget中下载 Microsoft.AspNetCore.Authentication.JwtBearer

.Net5是自带SwaggerUI的,如果.Net core 3.1, 请在Nuget中下载如下package
Swashbuckle.AspNetCore.Swagger
Swashbuckle.AspNetCore.SwaggerGen
Swashbuckle.AspNetCore.SwaggerUI
不确定在3.1中只下载Swashbuckle.AspNetCore是否可以配置成功Swagger, 因此建议下载如上package

在 startup.cs的ConfigureServices添加如下代码

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "TitleName", Version = "v1" });
    #region Swagger Authentication
    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { 
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        Description = "",
        Name = "Authentication",
        BearerFormat = "JWT",
        Scheme = "Bearer"
    });
    c.AddSecurityRequirement(new OpenApiSecurityRequirement {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            new string[]{ }
        }
    });
    #endregion
});
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(
    option => {
        option.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Guid")),//此key要与JWT service端的保持一致
            ValidateIssuer = true,
            ValidIssuer = "JWT Service url",
            ValidateAudience = true,
            ValidAudience = "Web Service url",
            ValidateLifetime = true,
            ClockSkew = TimeSpan.FromMinutes(60)
        };
});

在 startup.cs的Configure添加如下代码

中间件的顺序必须如下,不可更改。中间件的执行顺序可以看 Asp.Net Core 5.0 - Middleware

app.UseAuthentication(); //鉴权
app.UseAuthorization(); //授权

MD5的加密

public static string MD5Encrypt32(string password)
{
     string pwd = "";
     MD5 md5 = MD5.Create();
     byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
     for (int i =0; i< s.Length; i++)
     {
         pwd = pwd + s[i].ToString("X");
     }
     return pwd;
 }

如果有任何写的不好的地方,请大家指出来,我将继续改进,谢谢 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号