• IdentityServer4原理
  • 发布于 2个月前
  • 290 热度
    0 评论
概念理解
Scope
范围,它的定义比较宽泛,可大可小。大到可把多个包含相同Scope的站点或服务形成一个虚拟的组,也可以是站点或服务的子级;小到身份所需要包含的信息,以精确出哪种身份。

Client
用户将要使用的客户端;如:PC端、移动端、小程序、商家app、购物app、管理员app等客户端包含了标识、授权方式、密钥、指定的范围等信息。

客户端请求样例:


[统一认证授权服务]中存放了多种Client,请求[统一认证授权服务]时附带的参数表明是哪个Client的请求,[统一认证授权服务]验证是否存在的Client。

Client.Scope
客户端指定的支持范围(能匹配到的服务 + 可取得的身份信息)
Client.Scope参数 = Scope + Claim
Claim
用户信息属性,描述身份信息的元素;
如:姓名的Claim对象、手机的Claim对象,部门角色等的众多对象 存于 IssuedClaims 中。
ApiResource
资源的定义,可认为是一个站点或一个后台服务等,也就是可被授权访问的服务,如:产品服务、订单服务
ApiResource.Scope
Client通过参数Scope可关联到的ApiResource
ApiResource.UserClaims
访问服务时,Token中要求必须有的用户信息(服务的个性化要求)
IdentityResource
认证后的身份信息,主要定义关于身份的描述,身份中的Claim包含了比较完整的用户(身份)信息,数据取自于 IssuedClaims,于Token中附带;如:OpenID、profile(姓名、性别、账号、电话等)、email、地址等,可按情况自定义追加

运行前提
.Client 客户端的数据源
.IdentityResource 身份结构的定义
.ApiResource 的数据源
.Scope 的数据源
.UserClaims 用户信息数据源
 
运行过程
1、请求认证授权的主要参数:客户端标识、用户凭证、授权方式、密钥Secret、范围Scope
2、验证客户端是否存在
3、验证Scope关联到的身份是否存在
4、验证Scope关联到的ApiResource是否存在
5、验证Scope是否已定义
6、验证账户信息
7、账户信息通过Claim组合成Principal成为Identity合法身份
8、通过Client.Scope参数,关联到的ApiResource + 关联到已认证的身份信息 => 生成Token

Client.Scope参数透过ApiResource.Scopes匹配到的ApiResource;
Client.Scope参数透过IdentityResource.userClaims匹配到的身份属性,

请求参数Scope关联到的ApiResource + 请求参数Scope关联到的Claim => 生成 Token
相当于:要授权的ApiResource + 认证后的Claim信息 => 生成Token
也相当于:认证授权后的Token = 可访问的服务 + 已认证的用户信息

授权认证过程示例图


用户评论