基礎說明
IDaaS內置了表達式引擎,在SAML和OIDC應用中,支持使用高級表達式,向返回信息中添加新的參數。當目標應用需接受額外參數,且參數需要進行某種轉化、拼接、判斷時,可使用表達式實現。
與此類似,可以使用同樣方法,在配置與身份提供方間同步的字段映射時,也可使用表達式實現字段值自定義賦值。
本篇文檔下方列有常見示例,幫助快速理解使用場景和方法。?
以OIDC為例,在SSO配置中,支持擴展返回的id_token
信息。在擴展值中,可填寫高級表達式,以達成特定處理目標。
更多使用方式請參考:SAML Attribute Statements值填寫規范、OIDC id_token擴展值填寫規范、擴展字段。
表達式分為兩部分:
模型,包含User(對應IDaaS賬戶)和AppUser(對應應用賬戶)兩種。
函數,代表執行邏輯關系。
模型說明
1. User
下列字段在IDaaS的User模型中,可使用類似user.username
、user.lockExpireTime
的引用方式。
屬性 | 說明 |
username | 用戶名 |
displayName | 用戶顯示名 |
passwordSet | 密碼是否已設置 |
phoneRegion | 手機地區編號,示例:中國區號為 "86",不帶 "00" 或 "+" |
phoneNumber | 手機號碼 |
郵箱 | |
userSourceType | 來源類型,取值為: |
userSourceId | 來源ID |
status | 用戶狀態,取值為:enabled、disabled |
accountExpireTime | 賬戶過期時間,UNIX紀元時間,單位毫秒 |
registerTime | 用戶注冊時間,UNIX紀元時間,單位毫秒 |
lockExpireTime | 鎖定過期時間,UNIX紀元時間,單位毫秒 |
updateTime | 最近一次更新時間,UNIX紀元時間,單位毫秒 |
description | 描述 |
2. App User
下列字段在IDaaS的AppUser模型中,可使用類似appUser.username
引用方式。
屬性 | 說明 |
username | 應用賬號用戶名 |
3. IdP User
IdP User模型應用于與身份提供方進行同步時,舉例:釘釘的辦公地點字段:idpuser.work_place
。
具體字段請查看對應身份提供方文檔,例如釘釘的釘釘幫助文檔-用戶詳情。
對于OIDC身份提供方(參考綁定OIDC身份提供方),在自動綁定能力中使用表達式時,僅id_token
中的sub、phoneNumber、email字段的前綴使用idpuser.
,例如idpuser.sub
;其余字段的前綴需使用idpUser.rawUserInfo.
,例如idpUser.rawUserInfo.aud
。
函數說明
以下為我們開放的常用函數及說明:
函數名 | 函數定義 | 說明 |
Append | Append(str1, str2, ..., strn) | 拼接輸入參數為新的字符串,等于 |
Join | Join(source1, source2, ..., sourceN, separator) | 將多個源值拼接為一個字符串,源值間用分隔符分隔。 |
Coalesce | Coalesce(source1, source2, ..., sourceN, defaultValue) | 返回輸入參數中第一個非空參數,若參數都為空,則返回null,其中非空指非null且參數長度大于0。 |
IIF | IIF(condition, whenTrue, whenFalse) | 三目運算。根據condition的結果返回不同的值,為true時返回whenTrue,為false時返回whenFalse。 |
IsNull | IsNull(value) | 當value為null即缺失時,輸出為true。 |
IsNullOrEmpty | IsNullOrEmpty(value) | 當value為null或空字符串時,輸出為true。 |
Now | Now() | 返回表示當前UTC DateTime的字符串,格式為 yyyy-MM-dd'T'HH:mm:ssXXX |
StringReplace | StringReplace("hello $VariableName", "$VariableName", ReplaceString) | 普通字符串替換。 |
Trim | Trim(source) | 去除源值字符串前后的空白字符。 |
ToLower ToUpper | ToLower(source) ToUpper(source) | 字符串變為全大寫或全小寫。 |
Substring | Substring(source, fromIndex, endIndex) | 返回字符串的子字符串,即子字符串下標地址為 [fromIndex, endIndex]。 |
SubstringBefore | SubstringBefore(source, subString) | 返回subString之前的字符串。 |
Array | Array(source1, source2,...) | 將多個值組合成為數組。值可為Object類型。 |
Object | Object(key1, value1, key2, value2, ...) | 通過制定鍵值對組合成為Object對象。 |
參考示例
效果 | 表達式示例 |
取用戶名,拼接固定 "@example.com"。 | Append(user.username, "@example.com") |
當郵箱不為空,返回郵箱。 當郵箱為空時,取手機號。 | Coalesce(user.email, user.phoneNumber) |
當手機號為空時,默認填寫固定手機號。 | IIF(IsNullOrEmpty(user.phoneNumber), "1888888****", user.phoneNumber) |
將手機號地區和手機號以 - 拼接。 | Join(user.phoneRegion, user.phoneNumber, "-") |
返回包含顯示名的自定義歡迎信息。 | StringReplace("hello $DisplayName", "$DisplayName", user.displayName) |
將手機號中間四位用 * 脫敏返回。 | Append( SubString(user.phoneNumber, 0, 4), "****", SubString(user.phoneNumber, 8, 10) ) |
提取郵箱中的用戶名。 | SubstringBefore(user.email, "@") |
組裝SCIM規范中數組格式的email字段。 | Array(Object("email", user.email, "type", "work", "primary", true)) |