API身份认证JWT

这篇具有很好参考价值的文章主要介绍了API身份认证JWT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JWT简介

是一种身份认证的开放标准(RFC 7519),可以在网络应用间传输信息作为Json对象。由三部分组成:头部(Header)、载荷(payload)和签名(Signature).

头部(Header)

两部分组成,令牌类型和所使用的的签名算法

{

"alg":"HS256""typ":"JWT"

}

 

载荷(payload)

包含要传输的信息,包括用户的身份信息、权限等。载荷可以自定义,但需要避免包含敏感信息。

{

"sub":"1234567890",

"name":"zuozuo",

"iat":17773219179

}

 

签名(Signature)

用于验证令牌的完整性和真实性,通常通过使用头部和载荷中的数据以及一个密钥进行加密生成

HMACSHA256(

base64UrlEncode(header)+"."+

base64UrlEncode(payload),

secret

)

 

JWT的工作流程

  • 用户提供用户名和密码进行身份认证
  • 服务器验证用户和密码的正确性
  • 服务器使用私钥签发JWT,并将其发送给客户端
  • 客户端将JWT存储到本地,例如在浏览器的localstorage中。
  • 客户端在后续的请求中使用JWT进行身份认证,将其放在请求的头部或其他位置
  • 服务器接收到请求后,使用公钥验证JWT的合法性和完整性。
  • 如果JWT通过验证,服务器可以根据载荷中的信息进行授权和权限验证。
    • JWT的有点包括不需要在服务器端存储会话信息,可扩展性好、跨语言和跨平台支持等。由于JWT是基于对称或非对称加密的,因此需要妥善保管密钥,以防止令牌被篡改。
  • Asp.Net Core中使用Microsoft.AspNetCore.Authentication.JwtBearer包
  • 配置身份认证服务
    • 在Startup.cs文件的ConfigureServices中添加代码,以配置JWT身份认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "NetCoreDemo",
            ValidAudience = "Test",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("!Qq123456Test*"))

        };
    });

 

app.UseAuthentication();
app.UseAuthorization();

 

  • 控制器使用身份认证,需要进行身份认证的控制器或者操作方法上添加[Authorize]标签
  • 生成JWT
    • 在用户登录成功后,可以使用System,IdentityModel.Tokens.Jwt包来生成JWT,
 [HttpPost]
        public IActionResult Login(string username, string password)
        {
            if (username == "admin" && password == "admin")
            {
                var tokenHandler = new JwtSecurityTokenHandler();
                var key = Encoding.UTF8.GetBytes("!Qq123456Test*dsadsadsadsadsa");//密钥
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new System.Security.Claims.ClaimsIdentity(
                        new Claim[] {
                            new Claim(ClaimTypes.Name, username)
                        }),
                    Expires = DateTime.UtcNow.AddHours(1),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };
                var token = tokenHandler.CreateToken(tokenDescriptor);
                var tokenString = tokenHandler.WriteToken(token);
                return Ok(new { Token = tokenString });
            }

 文章来源地址https://www.toymoban.com/news/detail-549857.html

到了这里,关于API身份认证JWT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包