IdentityServer4 已经v4.x了,与3.x在概念上还是有区别的,本章主要阐述对4.x的理解。下一篇再写代码实现的案例。
一、概念理解
Scope
范围,它的定义比较宽泛,可大可小,便于开发者按情况利用它。
它大到可把多个包含相同Scope的站点或服务形成一个虚拟的组,也可以是站点或服务独有的子级;
它小到一个身份所需要包含的信息,以精确出身份信息的结构。
作者:[Sol·wang] - 博客园,原文出处:https://www.cnblogs.com/Sol-wang/p/16976789.html
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
四、授权认证过程示例图
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!