基礎說明
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模型應用於與身份提供方進行同步時,舉例:DingTalk的辦公地點欄位:idpuser.work_place
。
具體欄位請查看對應身份提供方文檔,例如DingTalk的DingTalk協助文檔-使用者詳情。
對於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,其中非空指非null且參數長度大於0。 |
IIF | IIF(condition, whenTrue, whenFalse) | 三目運算。根據condition的結果返回不同的值,為true時返回whenTrue,為false時返回whenFalse。 |
IsNull | IsNull(value) | 當value為null即缺失時,輸出為true。 |
IsNullOrEmpty | IsNullOrEmpty(value) | 當value為null或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)) |