概念理解
Scope
範圍,它的定義比較寬泛,可大可小。
大到可把多個包含相同Scope的站點或服務形成一個虛擬的組,也可以是站點或服務的子級;小到身份所需要包含的資訊,以精確出哪種身份。
Client
使用者將要使用的客戶端;如:PC端、移動端、小程式、商家app、購物app、管理員app等
客戶端包含了標識、授權方式、金鑰、指定的範圍等資訊。
客戶端請求樣例:
[統一認證授權服務]中存放了多種Client,請求[統一認證授權服務]時附帶的參數列明是哪個Client的請求,[統一認證授權服務]驗證是否存在的Client。
Client.Scope
客戶端指定的支援範圍(能匹配到的服務 + 可取得的身份資訊)
認證授權後的Token = 可訪問的服務 + 已認證的使用者資訊。
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、透過Scope引數,關聯到的ApiResource + 關聯到已認證的身份資訊 => 生成Token
符合Scope引數的ApiResource,符合Scope引數的身份,
此Token就可以訪問一個或多個服務(範圍)及附帶的使用者資訊。
請求引數Scope關聯到的ApiResource + 請求引數Scope關聯到的Claim => 生成 Token
相當於:要授權的ApiResource + 認證後的Claim資訊 => 生成Token
也相當於:Token => 可訪問的ApiResource服務 + 取已認證的使用者身份資訊
授權認證過程示例圖