全部產品
Search
文件中心

:進階:賬戶欄位運算式

更新時間:Oct 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_inding_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))