すべてのプロダクト
Search
ドキュメントセンター

Identity as a Service:高度なアカウントフィールド式

最終更新日:Nov 09, 2025

このトピックでは、IDaaS 組み込み式エンジンで高度なアカウントフィールド式を使用する方法について説明し、モデルフィールド、関数、およびリファレンス例の詳細を提供します。

基本

IDaaS には組み込みの式エンジンがあります。SAML および OpenID Connect (OIDC) アプリケーションでは、高度な式を使用して、返されるユーザー情報に新しいパラメーターを追加できます。ターゲットアプリケーションが変換、連結、または評価が必要な追加のパラメーターを要求する場合に式を使用します。

同様に、ID プロバイダーとの同期のためにフィールドマッピングを構成する際に、同じ方法を使用して式でフィールド値をカスタマイズできます。

このトピックでは、式を使用するシナリオと方法を理解するのに役立つリファレンス例を提供します。

たとえば、OIDC シングルサインオン (SSO) 構成では、返された id_token 情報を拡張できます。拡張値には、full_phone などの高度な式を入力して、特定の処理目標を達成できます。

image.png

詳細については、「SAML 属性ステートメントのマッピングルール」、「OIDC id_token 拡張値のマッピングルール」、および「フィールド管理」をご参照ください。

式は次の 2 つの部分で構成されます:

  • モデル。User (IDaaS アカウント用) と AppUser (アプリケーションアカウント用) が含まれます。

  • 関数。論理演算を表します。

モデルの説明

1. User

以下のフィールドは IDaaS User モデルにあります。user.usernameuser.lockExpireTime などの形式で参照できます。

Field Display Name

Field ID

Data Type

Required

Unique

User Permissions

説明

アカウント ID

userId

String

いいえ

はい

表示可能

ユーザー ID です。

ユーザー名

username

String

はい

はい

表示可能

ユーザー名です。

表示名

displayName

String

いいえ

いいえ

編集可能

ユーザーの表示名です。

メール

email

String

いいえ

はい

編集可能

メールアドレスです。

携帯電話

phoneNumber

Number

いいえ

はい

編集可能

電話番号です。

電話の市外局番

phoneRegion

Number

いいえ

いいえ

編集可能

電話番号の市外局番です。例: 中国の市外局番は「86」で、「00」や「+」は付けません。

外部 ID

userExternalId

String

いいえ

はい

表示可能

ユーザーの外部 ID です。

ソースタイプ

userSourceType

String

いいえ

いいえ

表示可能

ソースタイプです。有効な値:

  • build_in: 自己構築。

  • ding_talk: DingTalk。

  • ad: AD。

  • ldap: LDAP。

  • we_com: WeCom。

  • lark: Lark。

  • idp_auto_build: IdP によって自動的に作成されます。

ソース ID

userSourceId

String

いいえ

いいえ

表示可能

ソース ID です。

アカウントステータス

status

String

いいえ

いいえ

表示可能

ユーザーステータスです。有効な値:

  • enabled: 有効。

  • disabled: 無効。

説明

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)

入力パラメーターを連結して新しい文字列を作成します。これは str1+str2+... と同等です。

  • 入力: Append("str1", "@example.com")

  • 出力: str1@example.com

Join

Join(source1, source2, ..., sourceN, separator)

複数のソース値を指定された区切り文字で区切って 1 つの文字列に結合します。

  • 入力: Join("str1", "str2", 123,"-")

  • 出力: "str1-str2-123"

Coalesce

Coalesce(source1, source2, ..., sourceN, defaultValue)

入力から最初の空でないパラメーターを返します。すべてのパラメーターが空の場合、null を返します。空でないパラメーターは null ではなく、長さが 0 より大きいものです。

  • 入力: Coalesce("", user.phoneRegion, "86")

  • 出力: 電話の市外局番が空または欠落している場合、出力は 86 です。

IIF

IIF(condition, whenTrue, whenFalse)

三項演算。条件の結果に基づいて値を返します。条件が true の場合は whenTrue を返し、条件が false の場合は whenFalse を返します。

例 1:

  • 入力: IIF(true, 1, 2)

  • 出力: 1

例 2:

  • 入力: IIF(false, 1, 2)

  • 出力: 2

IsNull

IsNull(value)

値が null または欠落している場合、出力は true です。

例 1:

  • 入力: IsNull(null)

  • 出力: true

例 2:

  • 入力: IsNull("")

  • 出力: false

IsNullOrEmpty

IsNullOrEmpty(value)

値が null または空の文字列の場合、出力は true です。

例 1:

  • 入力: IsNullOrEmpty(user.email)

  • 出力: メールが null または欠落している場合、出力は true です。

例 2:

  • 入力: IsNullOrEmpty("")

  • 出力: true

Now

Now()

現在の UTC DateTime を yyyy-MM-dd'T'HH:mm:ssXXX 形式の文字列で返します。

  • 出力: 2021-11 01T09:52:11Z

StringReplace

StringReplace("hello $VariableName", "$VariableName", ReplaceString)

単純な文字列置換を実行します。

  • 入力: StringReplace("hello $str", "$str", "world")

  • 出力: hello world

Trim

Trim(source)

ソース文字列の先頭と末尾の空白文字を削除します。

  • 入力: Trim(" 123 ")

  • 出力: 123

TrimLeft

TrimLeft(source)

ソース文字列の先頭の空白文字を削除します。

  • 入力: TrimLeft(" 123 ")

  • 出力: 123

TrimRight

TrimRight(source)

ソース文字列の末尾の空白文字を削除します。

  • 入力: TrimRight(" 123 ")

  • 出力: 123

ToLower

ToLower(source)

文字列をすべて小文字に変換します。

  • 入力: ToLower(" Abc ")

  • 出力: abc

ToUpper

ToUpper(source)

文字列をすべて大文字に変換します。

  • 入力: ToUpper(" Abc ")

  • 出力: ABC

Substring

Substring(source, fromIndex, endIndex)

文字列の部分文字列を返します。部分文字列は fromIndex から始まり、endIndex の前で終わります。

  • source: 必須。ソース文字列。構文でサポートされている任意の型にすることができます。

  • fromIndex: 必須。整数。整数でない場合、関数は null を返します。

  • endIndex: 必須。整数。整数でない場合、関数は null を返します。

例 1:

  • 入力: Substring("0123456", 1, 5)

  • 出力: 1234

例 2:

  • 入力: Substring("0123456", -1, 7)

  • 出力: 0123456

例 3:

  • 入力: Substring("0123456", "1", 5)

  • 出力: null

SubstringBefore

SubstringBefore(source, subString)

ソース文字列を左から右に検索してターゲット文字列を見つけ、最初の出現箇所の前にある部分文字列を返します。ターゲット文字列が見つからない場合は null が返されます。

パラメーター:

  • source: 必須。ソース文字列。構文でサポートされている任意の型にすることができます。

  • subString: 必須。ターゲット文字列。構文でサポートされている任意の型にすることができます。

戻り値: 文字列

例 1:

  • 入力: SubstringBefore("test@example@com", "@")

  • 出力: "test"

Array

Array(source1, source2,...)

複数の値を配列に結合します。値は Object 型にすることができます。

  • 入力: Array(1, 2, 3)

  • 出力: [1, 2, 3]

ArrayAdd

ArrayAdd(Array(), "test")

配列オブジェクトに要素を追加します。

  • 入力: ArrayAdd(Array(), "test")

  • 出力: ["test"]

ArrayMap

ArrayMap($ArrayObject, __item.ObjectProperty)

オブジェクトの配列から特定のプロパティの値を持つ新しい配列を作成します。

ユーザーのグループ ID のリストを取得します:

  • 入力: ArrayMap(user.groups, __item.groupId)

  • 出力: ["groupId1","groupId2","groupId3"]

ArrayIndex

ArrayIndex(Array(), n)

配列内の特定のインデックスにある要素を取得します。インデックスは 0 から始まります。

  • 入力: ArrayIndex(Array(1,2,3), 0)

  • 出力: 1

ArrayJoin

ArrayJoin(Array(), str)

配列の要素を指定された区切り文字を使用して文字列に結合します。

  • 入力: ArrayJoin(Array(1,2,3), "-")

  • 出力: "1-2-3"

Object

Object(key1, value1, key2, value2, ...)

キーと値のペアを組み合わせて Object を作成します。

ゼロまたは偶数個のパラメーターをサポートします。

  • 入力: Object("key1", "value1", "key2", "value2")

  • 出力オブジェクト:

{"key1": "value1", "key2": "value2"}

ObjectIndex

ObjectIndex(user, "username")

オブジェクトから特定のプロパティの値を取得します。

コード ObjectIndex(user, "username")user.username と同等です。

ObjectToJsonString

ObjectToJsonString(user.groups)

オブジェクトを JSON 文字列に変換します。

-

Contains

Contains(str1,str2)

文字列に別の文字列が含まれているかどうかを確認します。true または false を返します。

例 1:

  • 入力: Contains("test", "t")

  • 出力: true

例 2:

  • 入力: Contains("test", "a")

  • 出力: false

Or

Or(true,false,...,true)

複数の条件に対して論理 OR 演算を実行します。いずれかの条件が true の場合、結果は true になります。

例 1:

  • 入力: Or(true,false)

  • 出力: true

例 2:

  • 入力: Or(true,true,false)

  • 出力: true

例 3:

  • 入力: Or(false,false)

  • 出力: false

And

And(true,false,...,true)

複数の条件に対して論理 AND 演算を実行します。いずれかの条件が false の場合、結果は false になります。

例 1:

  • 入力: And(true,false)

  • 出力: false

例 2:

  • 入力: And(true,true,false)

  • 出力: false

例 3:

  • 入力: And(true,true,true)

  • 出力: true

xOr

xOr(true,false,...,true)

正確に 2 つの条件が必要です。

両方の条件が true または両方が false の場合は false を返します。

一方の条件が true でもう一方が false の場合は true を返します。

例 1:

  • 入力: xOr(true,false)

  • 出力: true

例 2:

  • 入力: xOr(true,true)

  • 出力: false

例 3:

  • 入力: And(false,false)

  • 出力: false

StartsWith

StartsWith(str1, str2)

文字列が指定されたプレフィックスで始まるかどうかを確認します。この関数は正確に 2 つのパラメーターを取ります。

例 1:

  • 入力: StartsWith("test", "t")

  • 出力: true

例 2:

  • 入力: StartsWith("test", "e")

  • 出力: false

Split

Split("str1,str2,str3")

文字列を部分文字列の配列に分割します。

例 1:

  • 入力: Split("str1,str2,str3",",")

  • 出力: Array(str1,str2,str3)

Equals

Equals(str1,str2)

2 つの文字列が等しいかどうかを比較します。

Equals(str1,str2)。

Equals(str1,str2,false) は、大文字と小文字を区別する比較を実行します。

Equals(str1,str2,true) は、大文字と小文字を区別しない比較を実行します。

例 1:

  • 入力: Equals("test","Test")

  • 出力: false

例 2:

  • 入力: Equals("test","Test",true)

  • 出力: true

例 3:

  • 入力: Equals("test","Test",false)

  • 出力: false

CurrentTimeMillis

CurrentTimeMillis()

ミリ秒単位の現在の UNIX タイムスタンプ。

-

SamlArray

SamlArray(Array())

SAML SSO でのみ使用可能です。

入力:

SamlArray(Array("group1","group2"))

  • SAML レスポンス出力:

<saml2:Attribute Name="grouIdArray"

NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">

<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:type="xsd:string">

group1

</saml2:AttributeValue>

<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">

group2

</saml2:AttributeValue>

  • 入力: SamlArray(Array("group1","group2"))

  • SAML レスポンス出力:

</saml2:Attribute>

ExtractPhoneRegion

ExtractPhoneRegion(source, defaultRegion,autoAppendPlusSignal)

電話番号から市外局番を抽出します。

  • source: 電話番号。

  • autoAppendPlusSignal: プラス記号 (+) を自動的に追加するかどうかを指定します。記号を追加する場合は true に、追加しない場合は false に設定します。

  • defaultRegion: 携帯電話の市外局番のデフォルトの国または地域。国または地域コードには、ISO 3166 国コード標準 (https://www.iso.org/obp/ui/#search) の Alpha-2 コード (CN、US、TW など) を使用します。

    • 電話番号にプラス記号 (+) プレフィックス付きの市外局番が含まれている場合は、autoAppendPlusSignal および defaultRegion パラメーターを省略します。

    • 電話番号にプラス記号 (+) プレフィックスなしの市外局番が含まれている場合は、autoAppendPlusSignal を true に設定し、defaultRegion をデフォルトの国または地域コードに設定します。

    • 電話番号に市外局番が含まれていない場合は、autoAppendPlusSignal を false に設定し、defaultRegion をデフォルトの国または地域コードに設定します。

例 1:

電話番号が +86131xxxxx000+86 131xxxxx000、または +86-131xxxxx000 の場合:

  • 入力: ExtractPhoneRegion(idpUser.mobile)

  • 戻り値: 86

例 2:

電話番号が 86131xxxxx00086 131xxxxx000、または 86-131xxxxx000 の場合:

  • 入力: ExtractPhoneRegion(idpUser.mobile, "CN", true)

  • 戻り値: 86

例 3:

電話番号が 131xxxxx000 の場合:

  • 入力: ExtractPhoneRegion(idpUser.mobile, "CN", false)

  • 戻り値: 86

ExtractPhoneNumber

ExtractPhoneNumber(source, defaultRegion,autoAppendPlusSignal)

市外局番なしの電話番号を抽出します。

  • source: 電話番号。

  • autoAppendPlusSignal: プラス記号 (+) を自動的に追加するかどうかを指定します。記号を追加する場合は true に、追加しない場合は false に設定します。

  • defaultRegion: 携帯電話の市外局番のデフォルトの国または地域。国または地域コードには、ISO 3166 国コード標準 (https://www.iso.org/obp/ui/#search) を使用します。たとえば、CN、US、TW です。

    • 電話番号にプラス記号 (+) がプレフィックスとして付加された市外局番が含まれている場合、autoAppendPlusSignal および deafaultRegion パラメーターを渡す必要はありません。

    • 電話番号にプラス記号 (+) なしの市外局番が含まれている場合は、autoAppendPlusSignal を true に設定し、defaultRegion をデフォルトの国または地域コードに設定します。

    • 電話番号に市外局番が含まれておらず、デフォルトの市外局番を設定したい場合は、autoAppendPlusSignal を false に設定し、defaultRegion をデフォルトの国または地域コードに設定します。

例 1:

電話番号が +86131xxxxx000+86 131xxxxx000、または +86-131xxxxx000 の場合:

  • 入力: ExtractPhoneNumber(idpUser.mobile)

  • 戻り値: 131xxxxx000

例 2:

電話番号が 86131xxxxx00086 131xxxxx000、または 86-131xxxxx000 の場合:

  • 入力: ExtractPhoneNumber(idpUser.mobile, "CN", true)

  • 戻り値: 131xxxxx000

例 3:

電話番号が 131xxxxx000 の場合:

  • 入力: ExtractPhoneNumber(idpUser.mobile, "CN", false)

  • 戻り値: 131xxxxx000

リファレンス例

結果

式の例

ユーザー名を取得し、固定文字列「@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)

電話番号の中央 4 桁をアスタリスク (*) でマスクします。

Append(

SubString(user.phoneNumber, 0, 4),

"****",

SubString(user.phoneNumber, 8, 10)

)

メールアドレスからユーザー名を抽出します。

SubstringBefore(user.email, "@")

System for Cross-domain Identity Management (SCIM) プロトコルで指定された配列形式でメールフィールドを組み立てます。

Array(Object("email", user.email, "type", "work", "primary", true))

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"
}