(给DotNet加星标,提升.Net技能)
转自: 郑小超 cnblogs.com/GreenLeaves/p/12164056.html
前言
介绍JwtToken认证之前,必须要掌握.NET Core认证系统的核心原理,如果你还不了解,请参考《.NET Core认证组件源码解析》,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还需要掌握identityserver4的基本用法,关于identityserver4因为设计到两个协议Oath2.0和openidconnect协议,内容较多,不是本文重点,后续有时间我会写一片关于identityserver4的源码分析.且为了保证整个系统的高度可控,我重写了整个id4,留下了password模式.如果有兴趣,可以关注本人的后续文章.
假设你已经掌握以上内容,那么整个流程可以抽象为如下步骤:
(1)、用户输入用户名密码同时带着客户端Id和客户端密钥去identityserver4请求accesstoken.(访问令牌,令牌中带着用户Id,带着客户端的名称和密码)
(2)、拿到token后,接着用户去请求客户端指定的控制器方法,那么客户端第一步,会解析token中的客户端名称和密码是否正确,还有过期时间等常规字段的判断.
(3)、token验证通过,这个时候就可以拿到用户信息(ClaimsPrincipal)
(4)、此时我们拿到持有的用户信息中的用户Id,发起httpclient或者grpc调用,去统一权限系统查找用户的权限是否有当前请求的方法,有就通过授权认证,返回数据,没有,就返回权限不足.
整个流程大致如上,本文的重点是当拿到id4颁发的有效令牌(token)后,客户端如何解析?
微软提供了IdentityServer4.AccessTokenValidation类库,用来解析id4颁发的token.
.NET Core启用IdentityServer4token验证的方法如下:
指定id4的认证方案,并指定认证参数,那么看看里面到底干了什么
因为id4的令牌有