全部產品
Search
文件中心

:進階:賬戶欄位運算式

更新時間:Jun 30, 2024

基礎說明

IDaaS 內建了運算式引擎,在 SAML 和 OIDC 應用中,支援使用進階運算式,向返回資訊中添加新的參數。當目標應用需接受額外參數,且參數需要進行某種轉化、拼接、判斷時,可使用運算式實現。

與此類似,可以使用同樣方法,在配置與身份提供方間同步的欄位對應時,也可使用運算式實現欄位值自訂賦值。

本篇文檔下方列有常見樣本,協助快速理解使用情境和方法。

以 OIDC 為例,在 SSO 配置中,支援擴充返回的 id_token 資訊。在擴充值中,可填寫進階運算式,以達成特定處理目標。

image.png

更多使用方式請參考:SAML Attribute Statements 值填寫規範OIDC id_token 擴充值填寫規範擴充欄位

運算式分為兩部分:

  1. 模型,包含 User(對應 IDaaS 賬戶) 和 AppUser(對應應用賬戶) 兩種。

  2. 函數,代表執行邏輯關係。

模型說明

1. User

下欄欄位在 IDaaS 的 User 模型中,可使用類似 user.usernameuser.lockExpireTime 的引用方式。

屬性

說明

username

使用者名稱

displayName

使用者顯示名稱

passwordSet

密碼是否已設定

phoneRegion

手機地區編號,樣本:中國區號為 "86",不帶 "00" 或 "+"

phoneNumber

手機號碼

email

郵箱

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)

拼接輸入參數為新的字串,等於 str1+str2+...

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))