基礎說明
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 | 來源類型,取值為: build_in、ding_talk、ad、ldap、idp_auto_build |
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)) |