このトピックでは、IDaaS 組み込み式エンジンで高度なアカウントフィールド式を使用する方法について説明し、モデルフィールド、関数、およびリファレンス例の詳細を提供します。
基本
IDaaS には組み込みの式エンジンがあります。SAML および OpenID Connect (OIDC) アプリケーションでは、高度な式を使用して、返されるユーザー情報に新しいパラメーターを追加できます。ターゲットアプリケーションが変換、連結、または評価が必要な追加のパラメーターを要求する場合に式を使用します。
同様に、ID プロバイダーとの同期のためにフィールドマッピングを構成する際に、同じ方法を使用して式でフィールド値をカスタマイズできます。
このトピックでは、式を使用するシナリオと方法を理解するのに役立つリファレンス例を提供します。
たとえば、OIDC シングルサインオン (SSO) 構成では、返された id_token 情報を拡張できます。拡張値には、full_phone などの高度な式を入力して、特定の処理目標を達成できます。

詳細については、「SAML 属性ステートメントのマッピングルール」、「OIDC id_token 拡張値のマッピングルール」、および「フィールド管理」をご参照ください。
式は次の 2 つの部分で構成されます:
モデル。User (IDaaS アカウント用) と AppUser (アプリケーションアカウント用) が含まれます。
関数。論理演算を表します。
モデルの説明
1. User
以下のフィールドは IDaaS User モデルにあります。user.username や user.lockExpireTime などの形式で参照できます。
Field Display Name | Field ID | Data Type | Required | Unique | User Permissions | 説明 |
アカウント ID | userId | String | いいえ | はい | 表示可能 | ユーザー ID です。 |
ユーザー名 | username | String | はい | はい | 表示可能 | ユーザー名です。 |
表示名 | displayName | String | いいえ | いいえ | 編集可能 | ユーザーの表示名です。 |
メール | String | いいえ | はい | 編集可能 | メールアドレスです。 | |
携帯電話 | phoneNumber | Number | いいえ | はい | 編集可能 | 電話番号です。 |
電話の市外局番 | phoneRegion | Number | いいえ | いいえ | 編集可能 | 電話番号の市外局番です。例: 中国の市外局番は「86」で、「00」や「+」は付けません。 |
外部 ID | userExternalId | String | いいえ | はい | 表示可能 | ユーザーの外部 ID です。 |
ソースタイプ | userSourceType | String | いいえ | いいえ | 表示可能 | ソースタイプです。有効な値:
|
ソース ID | userSourceId | String | いいえ | いいえ | 表示可能 | ソース ID です。 |
アカウントステータス | status | String | いいえ | いいえ | 表示可能 | ユーザーステータスです。有効な値:
|
説明 | description | String | いいえ | いいえ | 表示可能 | 説明です。 |
アカウントの有効期限 | accountExpireTime | Number | いいえ | いいえ | 表示可能 | ユーザーアカウントの有効期限が切れる時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
アカウント登録時間 | registerTime | Number | いいえ | いいえ | 表示可能 | ユーザーが登録した時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
パスワードの有効期限 | passwordExpireTime | Number | いいえ | いいえ | 表示可能 | パスワードの有効期限が切れる時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
ロックの有効期限 | lockExpireTime | Number | いいえ | いいえ | 表示可能 | ロックの有効期限が切れる時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
作成時間 | createTime | Number | いいえ | いいえ | 表示可能 | アカウントが作成された時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
更新時間 | updateTime | Number | いいえ | いいえ | 表示可能 | ユーザー情報が最後に更新された時間です。これはミリ秒単位の UNIX タイムスタンプです。 |
2. App User
以下のフィールドは IDaaS AppUser モデルにあります。appUser.username などの形式で参照できます。
プロパティ | 説明 |
username | アプリケーションアカウントのユーザー名です。 |
3. IdP User
IdP User モデルは、ID プロバイダーとの同期に使用されます。たとえば、DingTalk のオフィスの場所フィールドは idpUser.work_place です。
特定のフィールドについては、対応する ID プロバイダーのドキュメント、たとえば DingTalk ヘルプドキュメント - ユーザー詳細 をご参照ください。
OIDC ID プロバイダー (詳細については、「OIDC ID プロバイダーをアタッチする」をご参照ください) の場合、自動アタッチ機能で式を使用するとき、idpUser. プレフィックスは id_token の sub、phoneNumber、および email フィールドにのみ適用されます (例: idpUser.sub)。他のすべてのフィールドについては、idpUser.rawUserInfo. プレフィックスを使用する必要があります (例: idpUser.rawUserInfo.aud)。
関数の説明
次の表では、利用可能な関数について説明し、例を示します:
関数名 | 関数定義 | 説明 | 例 |
Append | Append(str1, str2, ..., strn) | 入力パラメーターを連結して新しい文字列を作成します。これは |
|
Join | Join(source1, source2, ..., sourceN, separator) | 複数のソース値を指定された区切り文字で区切って 1 つの文字列に結合します。 |
|
Coalesce | Coalesce(source1, source2, ..., sourceN, defaultValue) | 入力から最初の空でないパラメーターを返します。すべてのパラメーターが空の場合、null を返します。空でないパラメーターは null ではなく、長さが 0 より大きいものです。 |
|
IIF | IIF(condition, whenTrue, whenFalse) | 三項演算。条件の結果に基づいて値を返します。条件が true の場合は whenTrue を返し、条件が false の場合は whenFalse を返します。 | 例 1:
例 2:
|
IsNull | IsNull(value) | 値が null または欠落している場合、出力は true です。 | 例 1:
例 2:
|
IsNullOrEmpty | IsNullOrEmpty(value) | 値が null または空の文字列の場合、出力は true です。 | 例 1:
例 2:
|
Now | Now() | 現在の UTC DateTime を yyyy-MM-dd'T'HH:mm:ssXXX 形式の文字列で返します。 |
|
StringReplace | StringReplace("hello $VariableName", "$VariableName", ReplaceString) | 単純な文字列置換を実行します。 |
|
Trim | Trim(source) | ソース文字列の先頭と末尾の空白文字を削除します。 |
|
TrimLeft | TrimLeft(source) | ソース文字列の先頭の空白文字を削除します。 |
|
TrimRight | TrimRight(source) | ソース文字列の末尾の空白文字を削除します。 |
|
ToLower | ToLower(source) | 文字列をすべて小文字に変換します。 |
|
ToUpper | ToUpper(source) | 文字列をすべて大文字に変換します。 |
|
Substring | Substring(source, fromIndex, endIndex) | 文字列の部分文字列を返します。部分文字列は fromIndex から始まり、endIndex の前で終わります。
| 例 1:
例 2:
例 3:
|
SubstringBefore | SubstringBefore(source, subString) | ソース文字列を左から右に検索してターゲット文字列を見つけ、最初の出現箇所の前にある部分文字列を返します。ターゲット文字列が見つからない場合は null が返されます。 パラメーター:
戻り値: 文字列 | 例 1:
|
Array | Array(source1, source2,...) | 複数の値を配列に結合します。値は Object 型にすることができます。 |
|
ArrayAdd | ArrayAdd(Array(), "test") | 配列オブジェクトに要素を追加します。 |
|
ArrayMap | ArrayMap($ArrayObject, __item.ObjectProperty) | オブジェクトの配列から特定のプロパティの値を持つ新しい配列を作成します。 | ユーザーのグループ ID のリストを取得します:
|
ArrayIndex | ArrayIndex(Array(), n) | 配列内の特定のインデックスにある要素を取得します。インデックスは 0 から始まります。 |
|
ArrayJoin | ArrayJoin(Array(), str) | 配列の要素を指定された区切り文字を使用して文字列に結合します。 |
|
Object | Object(key1, value1, key2, value2, ...) | キーと値のペアを組み合わせて Object を作成します。 ゼロまたは偶数個のパラメーターをサポートします。 |
|
ObjectIndex | ObjectIndex(user, "username") | オブジェクトから特定のプロパティの値を取得します。 | コード |
ObjectToJsonString | ObjectToJsonString(user.groups) | オブジェクトを JSON 文字列に変換します。 | - |
Contains | Contains(str1,str2) | 文字列に別の文字列が含まれているかどうかを確認します。true または false を返します。 | 例 1:
例 2:
|
Or | Or(true,false,...,true) | 複数の条件に対して論理 OR 演算を実行します。いずれかの条件が true の場合、結果は true になります。 | 例 1:
例 2:
例 3:
|
And | And(true,false,...,true) | 複数の条件に対して論理 AND 演算を実行します。いずれかの条件が false の場合、結果は false になります。 | 例 1:
例 2:
例 3:
|
xOr | xOr(true,false,...,true) | 正確に 2 つの条件が必要です。 両方の条件が true または両方が false の場合は false を返します。 一方の条件が true でもう一方が false の場合は true を返します。 | 例 1:
例 2:
例 3:
|
StartsWith | StartsWith(str1, str2) | 文字列が指定されたプレフィックスで始まるかどうかを確認します。この関数は正確に 2 つのパラメーターを取ります。 | 例 1:
例 2:
|
Split | Split("str1,str2,str3") | 文字列を部分文字列の配列に分割します。 | 例 1:
|
Equals | Equals(str1,str2) | 2 つの文字列が等しいかどうかを比較します。 Equals(str1,str2)。 Equals(str1,str2,false) は、大文字と小文字を区別する比較を実行します。 Equals(str1,str2,true) は、大文字と小文字を区別しない比較を実行します。 | 例 1:
例 2:
例 3:
|
CurrentTimeMillis | CurrentTimeMillis() | ミリ秒単位の現在の UNIX タイムスタンプ。 | - |
SamlArray | SamlArray(Array()) | SAML SSO でのみ使用可能です。 | 入力:
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:type="xsd:string"> group1 group2
|
ExtractPhoneRegion | ExtractPhoneRegion(source, defaultRegion,autoAppendPlusSignal) | 電話番号から市外局番を抽出します。
| 例 1: 電話番号が
例 2: 電話番号が
例 3: 電話番号が
|
ExtractPhoneNumber | ExtractPhoneNumber(source, defaultRegion,autoAppendPlusSignal) | 市外局番なしの電話番号を抽出します。
| 例 1: 電話番号が
例 2: 電話番号が
例 3: 電話番号が
|
リファレンス例
結果 | 式の例 |
ユーザー名を取得し、固定文字列「@example.com」を追加します。 |
|
メールが空ではない場合、メールを返します。 メールが空でない場合はメールを返し、メールが空の場合は電話番号を返します。 |
|
電話番号が空の場合、固定の電話番号をデフォルトとして使用します。 |
|
電話の市外局番と電話番号をハイフン (-) で連結します。 |
|
表示名を含むカスタムのウェルカムメッセージを返します。 |
|
電話番号の中央 4 桁をアスタリスク (*) でマスクします。 |
) |
メールアドレスからユーザー名を抽出します。 |
|
System for Cross-domain Identity Management (SCIM) プロトコルで指定された配列形式でメールフィールドを組み立てます。 |
|
User モデルの JSON 例:
{
"customFieldMap": {
"place": {
"fieldName": "place",
"fieldValue": "beijing"
},
"age": {
"fieldName": "age",
"fieldValue": "18"
}
},
"identityProviderUserMap": {
"idp_m2gngriuenktdkxxxxxx": {
"identityProviderId": "idp_m2gngriuenktdkxxxxxx",
"identityProviderType": "ding_talk",
"identityProviderExternalId": "corp_1234xxxxxxx",
"identityProviderUserId": "b2ed5fc0xxxxx"
}
},
"organizationalUnits": [
{
"organizationalUnitId": "ou_sdfadtaaxxxxxx",
"organizationalUnitName": "name_001",
"primary": false
},
{
"organizationalUnitId": "ou_werttxxxxxx",
"organizationalUnitName": "name_002",
"primary": true
}
],
"primaryOrganizationalUnitId": "ou_werttxxxxxx",
"customFields": [
{
"fieldName": "place",
"fieldValue": "beijing"
},
{
"fieldName": "age",
"fieldValue": "18"
}
],
"groups": [
{
"groupId": "group_jp6al4sn4n4wjgjxxxxxx",
"groupName": "group1",
"groupExternalId": "group_jp6al4sn4n4wjgjxxxxxx"
},
{
"groupId": "group_vavikcxewkf5h3oxxxxxx",
"groupName": "group2",
"groupExternalId": "group_vavikcxewkf5h3oxxxxxx"
}
],
"userId": "user_x3zyd6cxxxxxxxxxxxxx",
"username": "name_001",
"displayName": "displayname_001",
"passwordSet": true,
"phoneRegion": "86",
"phoneNumber": "333xxxx3333",
"phoneNumberVerified": true,
"email": "xxxxx@example.com",
"emailVerified": true,
"userExternalId": "b2ed5fc0xxxxxxxxxx",
"userSourceType": "ding_talk",
"userSourceId": "corp_1234xxxxxxx",
"status": "enabled",
"accountExpireTime": "-1",
"passwordExpireTime": "-1",
"registerTime": "1730454581598",
"lockExpireTime": "-1",
"createTime": "1730454582379",
"updateTime": "1733479455307"
}