ASP.NET Core使用JWT认证授权的方法
副标题[/!--empirenews.page--]
短视频,自媒体,达人种草一站服务 这篇文章主要介绍了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、创建接口 namespace JWTS.Services 4、在appsettings.config中添加生成token需要的信息,并映射成对象 "TokenParameter": { public class TokenParameter 5、实现接口,注入Configuration,获取TokenParameter对象 using Microsoft.Extensions.Configuration; namespace JWTS.Services iss: The issuer of the token,token 是给谁的 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的服务类 public void ConfigureServices(IServiceCollection services) { services.AddScoped <IJWTService, JWTService> (); services.AddControllers(); } 8、添加AuthenticationController,生成Token,后期可以添加RefreshToken (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |