AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其二)

这篇具有很好参考价值的文章主要介绍了AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

前面说了用第三方类库生成JWT的故事,给我带来了很大的方便,并且我也承诺要写一篇用常规方法生成JWT的文章(一般都是用微软官方的类库),因此才有了这篇文章。
另外,在前面的文章中,我要纠正一下一些错误JWT的整个结构决定了JWT只能作为临时的授权认证解决方案,如果对用户的机密性要求比较高,必须用有状态控制管理的解决方案,JWT只能作为一般性方案使用,它的应用场合主要是由多个WebAPI构成的多进程多线程多接口这样的微服务架构,是为了解决使用状态管理带来的不便才应用而生,一般JWT必须和HTTPS配合才会具有安全性。这是因为JWT作为一种可被破解的数据,只有TLS加密后,才不会被真正破解。
在微软的Indentiy认证框架中(我个人感觉应该叫ASP.NET Core Indentity),MVC和WebAPI虽然使用不同的Nuget包,但本质是一样的……废话不多说了,直接正题开始:有请我们的主角:JwtSecurityTokenHandler(从名字中就知道它和数据库操作有关,JWT中的数据一般都是来自用户数据库,helper一般用来表示资源管理),后面我们会通过它来实现JWT的生成。

实施

和前面一样,我们这里主要讲解最常用的非对称算法的JWT,这里采用的算法是RSA,当然你也可以采用其他算法来达到目标。
首先需要安装nuget包Microsoft.AspNetCore.Authentication.JwtBearer,当然,有的文章会让你安装一个System.IdentityModel.Tokens.JWT的包,这个完全不需要,因为前面的包已经包含后者了,你只要在引用包以后,构建一下工程,在dubug目录里面找到项目生成文件,就会发现这个dll被放进去了。
由于ASP.NET Core是以依赖注入为主的,而这个包作为一个Service(服务),需要使用其自身提供的扩展方法来注入ASP.NET Core 的WebApplication的Service对象(IOC容器)中进行集中管理。

点击查看实现代码
builder.Services.AddAuthentication()..AddJwtBearer(jwtOptions =>{
    jwtOptions.Authority = "https://jwtserver.test.net";
    //jwtOptions.Audience = "jwtresouce";
    jwtOptions.TokenValidationParameters = new TokenValidationParameters()
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = builder.Configuration["Jwt:Issuer"],//发行者
        ValidAudience = builder.Configuration["Jwt:Audience"], //订阅者
        IssuerSigningKey = new RsaSecurityKey(RSA.Create(2048))  //jwt签名算法
    };
})
之后再创建一个用来生成JWT的控制器(~~个人比较推荐使用控制器,而不是MiniAPI,感觉MiniAPI更适合比较简单的场景,比较复杂的场景还是得用控制器~~)。这样可以使得我们每次访问时获取到一个临时的JWT。 先说说大体流程:
  1. 先创建一个用来生成JWT的JwtSecurityTokenHandler对象,为后面的工作提供基础
  2. 再创建一个数组,用来存放用户信息
  3. 创建SecurityTokenDescriptor对象,设置JWT的加密算法,有效期等属性
  4. 调用之前创建的JwtSecurityTokenHandler对象的CreateToken方法,创建一个令牌对象,再调用WriteToken方法,获得到字符串格式的JWT
  5. 返回结果
点击查看实现代码
[HttpPost]
    public string CreateJwtSecurityToken()
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        

        var mookdata = new Dictionary<string, string>();
        mookdata[ClaimTypes.Name] = "John Doe";
        mookdata[ClaimTypes.Email] = "johndoe@example.com";
        mookdata[ClaimTypes.Role] = "vistor";

        var claims = new Claim[mookdata.Count - 1];
        foreach (var item in mookdata)
        {
            for (int i = 0; i < claims.Length; i++)
            {
                claims[i] = new Claim(item.Key, item.Value);
            }
        }

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.UtcNow.AddDays(7),
            SigningCredentials = new SigningCredentials(new RsaSecurityKey(RSA.Create(2048)),
                SecurityAlgorithms.RsaSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        var tokenString = tokenHandler.WriteToken(token);

        return tokenString;
    }

总结

上述讲到的方法一般都是比较常用的方法(这个好像是来自微软官方文档),先对于上篇文章,它相对比较灵活,不会涉及到x509证书的问题,而且解决方案比较多,容易应用。
关于生成JWT,我也是简单的了解和使用,因此层次不少太深,如果读者在其中发现了问题,也欢迎各位提出宝贵的意见,谢谢。
关于JWT,我想说这只是WebAPI授权鉴权的开端,不是终点,如果有时间,我会再写一篇结合JWT来授权鉴权的文章,来更好的理解JWT的应用,希望我的文章会给您带来帮助,让我们一起期待吧!文章来源地址https://www.toymoban.com/news/detail-426240.html

到了这里,关于AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • WebApi中添加Jwt鉴权

    JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。一个 JWT 实际上就是一个字符串,它由三部分组成,头部、载荷与签名。前两部分需要经过 Base64 编码,后一部分通过前两部分 Base64 编码后再加密而成。针对前后端

    2024年02月08日
    浏览(38)
  • 【Express.js】JWT基础鉴权

    Web安全是Web应用中非常重要的一环,主要由后端和服务器承担安全保障 面对请求源,后端有着各种各样的鉴权机制: session,cookie,token,jwt,OAuth,OAuth2,api-key,signature… 本节以jwt为例,演示一个极简的token鉴权 拷贝第一节HelloWorld项目 安装一种jwt依赖(本节使用jsonwebtoken) 接下来我们使

    2024年02月09日
    浏览(35)
  • Springboot实现简单JWT登录鉴权

    登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token)来标识用户的身份。 鉴权的主要目的是确保只有经过身份验证的用户才能访问系统

    2024年02月13日
    浏览(29)
  • 在Nodejs中使用JWT进行鉴权

    JSON Web Token(JWT)是一种用于在web上传递信息的标准,它以JSON格式表示信息,通常用于身份验证和授权。 JWT由三个部分组成:Header(头部)、Payload(负载)和Signature(签名)。它们用点号分隔开,形成了一个JWT令牌。 Header Header(头部)是JWT结构的第一部分,它是一个包含关

    2024年02月10日
    浏览(39)
  • ASP.NET Core 鉴权授权三(自定义授权策略、多授权策略、多鉴权架构)

    此处鉴权给的值是6,授权用的1,尝试访问 基于策略的授权中有一个很重要的概念是Requirements,每一个Requirement都代表一个授权条件。 Requirement需要继承接口IAuthorizationRequirement。 已经内置了一些常用的实现: AssertionRequirement :使用最原始的断言形式来声明授权策略。 DenyAn

    2024年02月03日
    浏览(38)
  • 前端刷新token,判断token是否过期(jwt鉴权)

    4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案; 就是登录成功后将相关用户信息组成 JSON 对象,然后对这个对象进行某种方式的加密,返回给客户端; 客户端在下次请求时带上这个 Token; 服务端再收到请求时校验 token 合法性,其实也就是在

    2024年02月03日
    浏览(58)
  • JWT加密解密登录鉴权逻辑是什么?

    JWT(JSON Web Token)是一种用于进行认证和授权的开放标准,它可以安全地传输信息,通常用于实现身份验证和鉴权逻辑。 以下是使用JWT进行登录鉴权的一般逻辑: 1:用户登录: 用户提供用户名和密码进行登录。 服务器验证用户提供的凭据是否有效。 2:生成JWT: 服务器验证

    2024年02月06日
    浏览(36)
  • Spring Gateway + Oauth2 + Jwt网关统一鉴权

    之前文章里说过,分布式系统的鉴权有两种方式,一是在网关进行统一的鉴权操作,二是在各个微服务里单独鉴权。 第二种方式比较常见,代码网上也是很多。今天主要是说第一种方式。 重要前提:需要收集各个接口的uri路径和所需权限列表的对应关系,并存入缓存。 服务

    2024年02月03日
    浏览(45)
  • react+koa+vite前后端模拟jwt鉴权过程

    路由组件(生成token) token解析 注册中间件 前端请求(登录+打开主页)

    2024年02月10日
    浏览(37)
  • 【从0到1设计一个网关】基于JWT实现用户鉴权

    代码讲解链接 项目开源代码-点个star领取完整4w字开发文档 JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 JSON 对象。它通常用于在不同系统之间进行身份验证和授权,以及在各种应用中传递声明性信息。 JWT 由三部分组成,它们通过点号(

    2024年02月05日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包