本文介绍OIDC标准协议的OIDC id_token扩展值填写规范及配置示例。
id_token扩展字段填写规则
|
类型 |
填写值 |
说明 |
|
变量 |
user.username |
用户名。 |
|
user.displayName |
显示名称。 |
|
|
user.phone(已过期) |
手机号,不包含国际区号(已过期) |
|
|
user.phoneNumber |
手机号,不包含国际区号。 |
|
|
user.email |
邮箱。 |
|
|
user.status |
用户状态,取值:
|
|
|
user.primaryOrganizationalUnitId |
用户所属主组织ID。 |
|
|
user.organizationalUnits |
用户所属组织所有信息。 |
|
|
ArrayMap(user.organizationalUnits, __item.organizationalUnitId) |
用户所属所有组织ID。 格式:JSON数组。 |
|
|
user.groups |
账户所属组,组的所有信息。 格式:JSON数组 |
|
|
ArrayMap(user.groups, __item.groupId) |
账户所属组ID列表 格式:JSON数组 |
|
|
ArrayMap(user.groups, __item.groupExternalId) |
账户所属组外部ID列表 格式:JSON数组 |
|
|
user.customFields |
所有扩展字段信息 格式:JSON数组 |
|
|
user.customFieldMap.$fieldname$.fieldValue |
某个扩展字段的值 |
|
|
常量 |
使用 "" 英文双引号,引号中填写常量。 |
|
|
表达式 |
高级功能,可以灵活地将值进行拼接、变化。 具体功能请参考高级账户字段表达式。 |
|
输入示例:(user对象)
{
...
"customFieldMap": {
"place": {
"fieldName": "place",
"fieldValue": "beijing"
},
"age": {
"fieldName": "age",
"fieldValue": "18"
}
},
"identityProviderUserMap": {
"idp_m2gngriuenktdkxxxxxx": {
"identityProviderId": "idp_m2gngriuenktdkxxxxxx",
"identityProviderType": "ding_talk",
"identityProviderExternalId": "corp_1234xxxxxxx",
"identityProviderUserId": "b2ed5fc0xxxxx"
}
},
"organizationalUnits": [
{
"organizationalUnitId": "ou_sdfadtaaxxxxxx",
"organizationalUnitName": "AD",
"primary": false
},
{
"organizationalUnitId": "ou_werttxxxxxx",
"organizationalUnitName": "name_002",
"primary": true
}
],
"primaryOrganizationalUnitId": "ou_werttxxxxxx",
"customFields": [
{
"fieldName": "place",
"fieldValue": "beijing"
},
{
"fieldName": "age",
"fieldValue": "18"
}
],
"groups": [
{
"groupId": "group_jp6al4sn4n4wjgjxxxxxx",
"groupName": "group1",
"groupExternalId": "group_jp6al4sn4n4wjgjxxxxxx"
},
{
"groupId": "group_vavikcxewkf5h3oxxxxxx",
"groupName": "group2",
"groupExternalId": "group_vavikcxewkf5h3oxxxxxx"
}
],
...
}
OIDC表达式相关示例
在 IDaaS 的应用页面,单击隐藏高级配置展开高级配置区域,在扩展 id_token区域通过双列映射表添加扩展字段名与对应表达式。
-
通过表达式user.organizationalUnits进行id_token解析后:
[ { "organizationalUnitId": "ou_sdfadtaaxxxxxx", "organizationalUnitName": "AD", "primary": false }, { "organizationalUnitId": "ou_werttxxxxxx", "organizationalUnitName": "name_002", "primary": true } ] -
通过表达式ArrayMap(user.organizationalUnits, __item.organizationalUnitId)进行id_token解析后:
[ "ou_sdfadtaaxxxxxx", "ou_werttxxxxxx" ] -
通过表达式user.groups进行id_token解析后:
[ { "groupId": "group_jp6al4sn4n4wjgjxxxxxx", "groupName": "group1", "groupExternalId": "group_jp6al4sn4n4wjgjxxxxxx" }, { "groupId": "group_vavikcxewkf5h3oxxxxxx", "groupName": "group2", "groupExternalId": "group_vavikcxewkf5h3oxxxxxx" } ] -
通过表达式ArrayMap(user.groups, __item.groupId)进行id_token解析后:
[ "group_jp6al4sn4n4wjgjxxxxxx", "group_vavikcxewkf5h3oxxxxxx" ] -
通过表达式ArrayMap(user.groups, __item.groupExternalId)进行id_token解析后:
[ "group_jp6al4sn4n4wjgjxxxxxx", "group_vavikcxewkf5h3oxxxxxx" ] -
通过表达式user.customFields进行id_token解析后:
[ { "fieldName": "place", "fieldValue": "beijing" }, { "fieldName": "age", "fieldValue": "18" } ] -
通过表达式user.customFieldMap.age.fieldValue进行id_token解析后:
18
id_token扩展字段重写规则
默认字段规则
-
系统默认字段不支持重写:
exp,nbf,iat,iss,jti,at_hash,c_hash,nonce,sid。 -
支持重写字段:
sub。
用户信息字段规则
用户 id_token 中的以下字段根据 scope 判断是否可重写:
|
字段名称 |
关联scope |
不可重写条件 |
|
email, email_verified |
|
当scope包含email且用户email不为空时 |
|
phone_number, phone_number_verified |
phone |
当scope包含phone且用户phoneNumber不为空时 |
|
name, preferred_username, updated_at, locale |
profile |
当scope包含profile时 |
|
instance_id, application_id |
instance |
当scope包含instance时 |
配置建议
-
在用户信息范围配置中谨慎选择scope,因为这将影响哪些用户字段可以被重写。
-
如果需要重写特定字段,请确保:未包含对应的scope或对应的用户字段为空值。