Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

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

Posted on 2023年5月6日 by hackdl

引子

前面说了用第三方类库生成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();
        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 

总结

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

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net

Related posts:

  1. 北京电信机房托管
  2. 服务器租用与托管:费用差异
  3. 百度前端高频react面试题(持续更新中)
  4. 松原服务器托管:高效稳定的企业解决方案
  5. 山东服务器托管租用服务提供商

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: Consistency Models终结扩散模型
下一篇: Rust — 模式与匹配

最新更新

  • R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模|附代码数据
  • mosn基于延迟负载均衡算法 — 走得更快,期待走得更稳 | 京东云技术团队
  • C++之虚函数原理 虚函数表
  • etcd:增加30%的写入性能
  • 为什么要安装虚拟机–Linux系统,我的虚拟机安装过程记录—14版本虚拟机

随机推荐

  • autohub – Python的自动
  • 服务器托管协议与申请表
  • 深入解析辽宁阜新服务器托管云空间
  • 北京代办idc经营许可证
  • 北京博大网人:服务器托管专家

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 服务器租用
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8