ASP.NET Core使用JWT认证授权的方法
demo地址: https://github.com/william0705/jwts
名词解析
认证 : 识别用户是否合法
授权: 赋予用户权限 (能访问哪些资源)
鉴权: 鉴定权限是否合法
jwt优势与劣势
优势
1、 无状态
token 存储身份验证所有信息 , 服务端不需要保存用户身份验证信息, 减少服务端压力 , 服务端更容易水平扩展, 由于无状态, 又会导致它最大缺点 , 很难注销
2、 支持跨域访问
cookie是不允许垮域访问的,token支持
3、 跨语言
基于标准化的 json web token (jwt) , 不依赖特定某一个语言 , 例如生成的token可以对多种语言使用(net , java , php …)
劣势
1、token有效性问题
后台很难注销已经发布的token , 通常需要借助第三方储存(数据库/缓存) 实现注销, 这样就会失去jwt最大的优势
2、占带宽
token长度(取决存放内容) 比session_id大 , 每次请求多消耗带宽 , token只存必要信息 , 避免token过长
3、需要实现续签
cookies – session 通常是框架已经实现续签功能, 每次访问把过期时间更新, jwt需要自己实现, 参考oauth2刷新token机制实现刷新token
4、消耗更多cpu
每次请求需要对内容解密和验证签名这两步操作,典型用时间换空间
只能根据自身使用场景决定使用哪一种身份验证方案 , 没有一种方案是通用的,完美的
.net core集成jwt认证授权服务
1、认证服务api:认证用户,并发布token
1、引入nuget包,system.identitymodel.tokens.jwt
2、创建生成token的服务,建议使用面向接口和实现编程,方便服务注入容器servicescollection(涉及di和ioc概念)
3、创建接口
4、在appsettings.config中添加生成token需要的信息,并映射成对象
5、实现接口,注入configuration,获取tokenparameter对象
6、jwt中定义好的claims
jwt标准里面定好的claim有:
- iss(issuser):代表这个jwt的签发主体;
- sub(subject):代表这个jwt的主体,即它的所有人;
- aud(audience):代表这个jwt的接收对象;
- exp(expiration time):是一个时间戳,代表这个jwt的过期时间;
- nbf(not before):是一个时间戳,代表这个jwt生效的开始时间,意味着在这个时间之前验证jwt是会失败的;
- iat(issued at):是一个时间戳,代表这个jwt的签发时间;
- jti(jwt id):是jwt的唯一标识。
7、在鉴权项目工程startup.cs文件里依赖注入jwt的服务类
8、添加authenticationcontroller,生成token,后期可以添加refreshtoken
2、资源中心api:使用从认证服务中心获取的token,去访问资源,资源中心对用户信息以及token进行鉴权操作,认证失败返回401
1、资源中心添加nuget包(microsoft.aspnetcore.authentication.jwtbearer)
2、添加authentication服务,添加jwtbearer,通过configuration获取tokenparameter对象
3、在资源控制器上添加[authorize]属性,以启用认证授权访问api资源
到此这篇关于asp.net core使用jwt认证授权的方法的文章就介绍到这了,更多相关asp.net core jwt认证授权 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
ASP.NET Core 2.2 : 二十六. 应用JWT进行用户认证及Token的刷新
-
ASP.NET Core静态文件的使用方法
-
ASP.Net Core 3.1 中使用JWT认证
-
详解在ASP.NET Core中使用Angular2以及与Angular2的Token base身份认证
-
ASP.Net Core中使用枚举类而不是枚举的方法
-
使用NLog给Asp.Net Core做请求监控的方法
-
asp.net core 使用 TestServer 来做集成测试的方法
-
ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库
-
ASP.NET Core 2.1 使用Docker运行的方法步骤
-
ASP.NET Core 2.0利用Jwt实现授权认证