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": "[email protected]"
}

不过依我的观察,在「快速开始」并没有与这个endpoint互动。profile的资讯是oidc-client透过id_token解析再做整理而来的。


其他属性同样会因爲 profile scope,而添加到token里,譬如:birthdate

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


<<:  [DAY28] 用 hyperdrive 来微调超参数

>>:  Day29 跟着官方文件学习Laravel-VSCode 开发PHP & Laravel

企业资料通讯 Week3

Q:多个传送者去分配同一条channel? FDM(分频) V.S TDM(分时) 可以看: FDM...

DAY14 - [JS] 扩充toDoList功能 : 新增 category

今日文章目录: 需求说明 事前准备 需求说明 针对不同用途的toDoList。像是:工作用的toD...

30天轻松学会unity自制游戏-让Player动起来

按照之前的进度制作,现在按下▶Player应该会魔性地扭动起来,但就没有其他效果了,接下来就改造Pl...

[DAY-17] 热情从何处来

2021 最後一季拉!!! 倒数 3 个月 当兵有破百 每年的此时此刻也进入破百的阶段拉!!! 前...

【Side Project】 程序码整理 -Model运用

之前为方便快速了解我们程序完整的功能, 所以把所有的资料都放在Controller里面。 今天这篇我...