IdentityServer4 已经v4.x了,与3.x在概念上还是有区别的,本章主要阐述对4.x的理解。下一篇再写代码实现的案例。
作者:[Sol·wang] - 博客园,原文出处:https://www.cnblogs.com/Sol-wang/p/16976789.html
一、概念理解
Scope
范围,它的定义比较宽泛,可大可小,便于开发者按情况利用它。
它大到可把多个包含相同Scope的站点或服务形成一个虚拟的组,也可以是站点或服务独有的子级;
它小到一个身份所需要包含的信息,以精确出身份信息的结构。
Client
用户将要使用的客户端;如:PC端、移动端、小程序、商家app、购物app、管理员站点等;
后端也定义了众多客户端,客户端包含了标识、授权方式、密钥、可应用到的范围等信息。以验证请求客户端的合法性等。
客户端请求参数样例:
[认证授权服务]中存放了多种Client,请求[认证授权服务]时附带的参数表明是哪个Client的请求,[认证授权服务]验证是否存在的Client。
Client.Scope
客户端请求的参数,指定可支持应用到的范围;这里的Scope有两种意思:能匹配到的服务 + 可取得的身份信息。
Client.Scope参数 = Scope + IdentityResource
Claim
用户信息属性,描述身份信息的元素;
如:姓名的Claim对象、手机的Claim对象,部门/角色等的众多对象 存于 IssuedClaims 中。
ApiResource
资源的定义,可认为是一个站点或一个后台服务等,也就是可被授权访问的服务,如:产品服务、订单服务
ApiResource.Scope
Client通过参数Scope可关联到的ApiResource,作为已授权的服务。
ApiResource.UserClaims
访问已授权服务时,已授权服务中需要的身份(用户)信息。后续附带于Token中。
IdentityResource
自定义身份信息的结构,主要是对身份的描述;一个IdentityResource = 一组Claim,多个IdentityResource比较完整的描述了一个认证后身份;它接受来自Client.scope参数的匹配,从中关联出一批Claims。
如:OpenID、profile(姓名/性别/账号/电话等)、Email(地址/是否验证)、住址等。
所有Cliams数据取自于用户验证后存入的 IssuedClaims,后续于Token中附带。
二、运行前提
- Client 客户端的数据源
- IdentityResource 身份结构的定义
- ApiResource 的数据源
- Scope 的数据源
- 用户信息数据源
三、运行过程
1、请求认证授权的主要参数:客户端标识、用户凭证、授权方式、密钥Secret、范围Scope
2、验证客户端是否存在
3、验证Scope关联到的身份是否存在
4、验证Scope关联到的ApiResource是否存在
5、验证Scope是否存在
6、验证账户信息
7、账户信息通过Claim组合成Principal成为Identity合法身份
8、通过Client.Scope参数,关联到的ApiResource + 关联到的身份信息 => 生成Token
Client.Scope参数透过ApiResources.Scopes匹配到的ApiResource;
Client.Scope(IdentityResource)参数透过IdentityResource.Claims关联到ApiResources.UserClaims匹配到的各ApiResource的身份属性,
请求参数Scope关联到的ApiResource + 请求参数Scope(IdentityResource)关联到的ApiResource.UserClaims => 生成 Token
四、授权认证过程示例图
- IdentityServer4 IdentityServer 概念 过程 v4identityserver4 identityserver概念 过程 identityserver4 identityserver net v4 identityserver4 identityserver4 identityserver tokenrequestvalidator identityserver4 identityserver identityserver4 identityserver ocelot net6 identityserver4 identityserver密码 模式 identityserver4 identityserver证书 问题 identityserver4 identityserver客户端 模式 identityserver4 identityserver客户端 客户