您的位置 首页 教育

开启Swagger的JWT ? .Net5

[原创] 如有雷同纯属巧合,如有转载,请注明,谢谢爛。 如下两个service是写在两个不同的applica…

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

如下两个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;
 }

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

本文来自网络,不代表0514资讯网立场,转载请注明出处:https://0514zx.com/info/6330.html
0514zx.com

作者: 0514zx.com

优质职场领域创作者
联系我们

联系我们

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部