本文介绍SAML标准协议的SAML Attribute Statements扩展值填写规范及配置示例。
SAML扩展值填写规范说明
|
类型 |
填写值 |
说明 |
|
变量 |
user.username |
用户名。 |
|
user.displayName |
显示名称。 |
|
|
user.phone(已过期) |
手机号,不包含国际区号(已过期)。 |
|
|
user.phoneNumber |
手机号,不包含国际区号。 |
|
|
user.email |
邮箱。 |
|
|
user.status |
用户状态,取值:
|
|
|
user.primaryOrganizationalUnitId |
用户所属主组织ID。 |
|
|
ObjectToJsonString(user.organizationalUnits) |
用户所属组织所有信息。 格式:JSON数组字符串。 |
|
|
ArrayJoin(ArrayMap(user.organizationalUnits, __item.organizationalUnitId), ",") |
用户所属组织ID列表。 格式:JSON数组字符串。 |
|
|
ObjectToJsonString(user.groups) |
账户所属组,组的所有信息。 格式:JSON数组字符串。 |
|
|
ArrayJoin(ArrayMap(user.groups, __item.groupId), ",") |
账户所属组ID列表。 格式:JSON数组字符串。 |
|
|
ArrayJoin(ArrayMap(user.groups, __item.groupExternalId), ",") |
账户所属组外部ID列表。 格式:JSON数组字符串。 |
|
|
ObjectToJsonString(user.customFields) |
所有扩展字段信息。 格式:JSON数组字符串。 |
|
|
user.customFieldMap.$fieldname$.fieldValue |
某个扩展字段的值。 |
|
|
appUser.username |
应用账户。 |
|
|
常量 |
使用 "" 英文双引号,引号中填写常量。 |
|
|
表达式 |
高级功能,可以灵活地将值进行拼接、变化。 具体功能请参考高级账户字段表达式。 |
|
SAML表达式相关示例
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"
}
],
...
}
SAML界面配置示例
在 SAML 应用配置页面中,签名算法 Signing Algorithm 选择 SHA256(仅支持 RSA-SHA256)。断言属性 Attribute Statements 区域配置如下属性映射:organizationalUnits → ObjectToJsonString(user.organizationalUnits)、organizationalUnitIds → ArrayJoin(ArrayMap(user.organizationalUnits, __item.organizationalUnitId), ",")、groups → ObjectToJsonString(user.groups)、groupIds → ArrayJoin(ArrayMap(user.groups, __item.groupId), ",")、groupExternalIds → ArrayJoin(ArrayMap(user.groups, __item.groupExternalId), ",")、grouldArray → SamlArray(ArrayMap(user.groups, __item.groupId))、customFields → ObjectToJsonString(user.customFields)、age → user.customFieldMap.age.fieldValue。在 SAML Response 中可将这些额外用户字段返回给应用解析。SSO 发起方 选择 支持门户和应用发起,即支持从 IDaaS 门户页点击发起 SSO,也支持由应用登录主动发起。
SAML扩展值解析结果示例
-
通过ObjectToJsonString(user.organizationalUnits)表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="organizationalUnits" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> [{"organizationalUnitId":"ou_sdfadtaaxxxxxx","organizationalUnitName":"AD","primary":false},{"organizationalUnitId":"ou_werttxxxxxx","organizationalUnitName":"name_002","primary":true}] </saml2:AttributeValue> </saml2:Attribute> -
通过ArrayJoin(ArrayMap(user.organizationalUnits, __item.organizationalUnitId), ",")表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="organizationalUnitIds" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> ou_sdfadtaaxxxxxx,ou_werttxxxxxx </saml2:AttributeValue> </saml2:Attribute> -
通过ObjectToJsonString(user.groups)表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="groups" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> [{"groupId":"group_jp6al4sn4n4wjgjxxxxxx","groupName":"group1","groupExternalId":"group_jp6al4sn4n4wjgjxxxxxx"},{"groupId":"group_vavikcxewkf5h3oxxxxxx","groupName":"group2","groupExternalId":"group_vavikcxewkf5h3oxxxxxx"}] </saml2:AttributeValue> </saml2:Attribute> -
通过表达式ArrayJoin(ArrayMap(user.groups, __item.groupId), ",")解析后的SAML返回结果如下:
<saml2:Attribute Name="groupIds" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> group_jp6al4sn4n4wjgjxxxxxx,group_vavikcxewkf5h3oxxxxxx </saml2:AttributeValue> </saml2:Attribute> -
通过ArrayJoin(ArrayMap(user.groups, __item.groupExternalId), ",")表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="groupExternalIds" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> group_jp6al4sn4n4wjgjxxxxxx,group_vavikcxewkf5h3oxxxxxx </saml2:AttributeValue> </saml2:Attribute> -
通过SamlArray(ArrayMap(user.groups, __item.groupId))表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="grouIdArray" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:type="xsd:string"> group_jp6al4sn4n4wjgjxxxxxx </saml2:AttributeValue> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> group_vavikcxewkf5h3oxxxxxx </saml2:AttributeValue> </saml2:Attribute> -
通过ObjectToJsonString(user.customFields)表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="customFields" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:type="xsd:string"> [{"fieldName":"place","fieldValue":"beijing"},{"fieldName":"age","fieldValue":"18"}] </saml2:AttributeValue> </saml2:Attribute> -
通过user.customFieldMap.age.fieldValue表达式解析后的SAML返回结果如下:
<saml2:Attribute Name="age" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string"> 18 </saml2:AttributeValue> </saml2:Attribute>