IdentityServer4 - v4.x 概念理解及运行过程

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

四、授权认证过程示例图

posted @ 2022-12-27 18:19  Sol·wang  阅读(864)  评论(0编辑  收藏  举报