iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Software Development

用Keycloak學習身份驗證與授權系列 第 28

Day27 - 【概念篇】Keycloak使用基本概念 - 第二部分: User & Claim & Profile

本系列文之後也會置於個人網站


接著來看看爲什麼更新帳號資訊,在「快速開始」會有那些變化。

這與client scope和claim有關。關於後者之後會在詳細說說,而目前就先了解一下這個現象發生的原因。

首先,在我們取得token的時候曾申明需要的scopeopenid profile email。其中profile這個scope爲這次變化的主要原因。

來到Keycloak管理選單下的 Client Scopes ,然後找到 profile

接著將頁籤切換到 Mappers , 你會看見一堆與 User Attribute 有關的設定。

gender 來說,就是將使用者的性別屬性(User Attribute -- gender),映射到Token的上做爲gender的claim。此外,還可以設定應該出現在哪裏,像是ID權杖、存取權杖或是使用者資訊。關於前兩者之後還會透過分析Token格式說明,屆時也會再次看到gender claim。而userinfo,在「Device Code(2)」的小範例中其實有用到,再實戰篇解析同樣會看到,但要取得並不困難,在取得存取權杖後,使用http://localhost:8080/auth/realms/quick-start/protocol/openid-connect/userinfo這個endpoint,便會取得與使用者相關的訊息:

{
    "sub": "345b1bca-9805-4b4b-a0f8-da2c70176c59",
    "website": "https://bob.id",
    "email_verified": true,
    "birthdate": "2021/10/03",
    "group_roles": [
        "x_default-roles-quick-start",
        "x_offline_access",
        "x_uma_authorization",
        "x_Group Role A",
        "x_quick-start-example-role1"
    ],
    "gender": "man",
    "preferred_username": "bob",
    "middle_name": "J",
    "given_name": "Bob",
    "picture": "https://cdn.pixabay.com/photo/2013/07/13/10/07/man-156584_960_720.png",
    "x": [
        "/Group A"
    ],
    "nickname": "小明",
    "name": "Bob Lee",
    "group_attr": "A",
    "family_name": "Lee",
    "email": "bob@fake.email"
}

不過依我的觀察,在「快速開始」並沒有與這個endpoint互動。profile的資訊是oidc-client透過id_token解析再做整理而來的。


其他屬性同樣會因爲 profile scope,而添加到token裡,譬如:birthdate

且除了 User Attribute 外, User Property 同樣可能被處理到Token裏面。像是使用者的名字firstName在Token上呈現的cliam就是given_name


上一篇
Day26 - 【概念篇】Keycloak使用基本概念 - 第二部分: User & Group
下一篇
Day28 - 【概念篇】Keycloak使用基本概念 - 第二部分: Role
系列文
用Keycloak學習身份驗證與授權40

尚未有邦友留言

立即登入留言