全部产品
Search
文档中心

Identity as a Service:Ekspresi bidang akun tingkat lanjut

更新时间:Nov 09, 2025

Topik ini menjelaskan cara menggunakan ekspresi tingkat lanjut untuk bidang akun di mesin ekspresi bawaan IDaaS dan menyediakan rincian tentang bidang model, fungsi, serta contoh referensi.

Dasar-Dasar

IDaaS dilengkapi dengan mesin ekspresi bawaan. Dalam aplikasi SAML dan OpenID Connect (OIDC), Anda dapat menggunakan ekspresi tingkat lanjut untuk menambahkan parameter baru ke informasi pengguna yang dikembalikan. Gunakan ekspresi jika aplikasi target memerlukan parameter tambahan yang perlu dikonversi, digabungkan, atau dievaluasi.

Metode yang sama juga dapat digunakan untuk menyesuaikan nilai bidang dengan ekspresi saat mengonfigurasi pemetaan bidang untuk sinkronisasi dengan penyedia identitas.

Topik ini menyertakan contoh referensi untuk membantu Anda memahami skenario dan metode penggunaan ekspresi.

Sebagai contoh, dalam konfigurasi Single Sign-On (SSO) OIDC, Anda dapat memperluas informasi id_token yang dikembalikan. Di dalam nilai ekstensi, Anda dapat memasukkan ekspresi tingkat lanjut seperti full_phone untuk mencapai tujuan pemrosesan tertentu.

image.png

Untuk informasi lebih lanjut, lihat Aturan Pemetaan Pernyataan Atribut SAML, Aturan Pemetaan Nilai Ekstensi OIDC id_token, dan Manajemen Bidang.

Ekspresi terdiri dari dua komponen:

  • Model, yang mencakup User (untuk akun IDaaS) dan AppUser (untuk akun aplikasi).

  • Fungsi, yang mewakili operasi logika.

Deskripsi Model

1. Pengguna

Bidang-bidang berikut terdapat dalam Model Pengguna IDaaS. Anda dapat mereferensikannya menggunakan format seperti user.username dan user.lockExpireTime.

Field Display Name

Field ID

Data Type

Required

Unique

User Permissions

Deskripsi

ID Akun

userId

String

Tidak

Ya

Tampak

ID pengguna.

Nama pengguna

username

String

Ya

Ya

Tampak

Nama pengguna.

Nama tampilan

displayName

String

Tidak

Tidak

Dapat diedit

Nama tampilan pengguna.

Email

email

String

Tidak

Ya

Dapat diedit

Alamat email.

Ponsel

phoneNumber

Number

Tidak

Ya

Dapat diedit

Nomor telepon.

Kode area telepon

phoneRegion

Number

Tidak

Tidak

Dapat diedit

Kode area untuk nomor telepon. Contoh: Kode area untuk China adalah "86", tanpa "00" atau "+".

ID Eksternal

userExternalId

String

Tidak

Ya

Tampak

ID eksternal pengguna.

Jenis sumber

userSourceType

String

Tidak

Tidak

Tampak

Jenis sumber. Nilai yang valid:

  • build_in: Dibuat sendiri.

  • ding_talk: DingTalk.

  • ad: AD.

  • ldap: LDAP.

  • we_com: WeCom.

  • lark: Lark.

  • idp_auto_build: Dibuat secara otomatis oleh IdP.

ID Sumber

userSourceId

String

Tidak

Tidak

Tampak

ID sumber.

Status akun

status

String

Tidak

Tidak

Tampak

Status pengguna. Nilai yang valid:

  • enabled: Diaktifkan.

  • disabled: Dinonaktifkan.

Deskripsi

description

String

Tidak

Tidak

Tampak

Deskripsi.

Waktu kedaluwarsa akun

accountExpireTime

Number

Tidak

Tidak

Tampak

Waktu ketika akun pengguna kedaluwarsa. Ini adalah stempel waktu UNIX dalam milidetik.

Waktu pendaftaran akun

registerTime

Number

Tidak

Tidak

Tampak

Waktu ketika pengguna mendaftar. Ini adalah stempel waktu UNIX dalam milidetik.

Waktu kedaluwarsa kata sandi

passwordExpireTime

Number

Tidak

Tidak

Tampak

Waktu ketika kata sandi kedaluwarsa. Ini adalah stempel waktu UNIX dalam milidetik.

Waktu kedaluwarsa kunci

lockExpireTime

Number

Tidak

Tidak

Tampak

Waktu ketika kunci kedaluwarsa. Ini adalah stempel waktu UNIX dalam milidetik.

Waktu pembuatan

createTime

Number

Tidak

Tidak

Tampak

Waktu ketika akun dibuat. Ini adalah stempel waktu UNIX dalam milidetik.

Waktu pembaruan

updateTime

Number

Tidak

Tidak

Tampak

Waktu ketika informasi pengguna terakhir diperbarui. Ini adalah stempel waktu UNIX dalam milidetik.

2. Pengguna Aplikasi

Bidang-bidang berikut terdapat dalam model AppUser IDaaS. Anda dapat mereferensikannya menggunakan format seperti appUser.username.

Properti

Deskripsi

username

Nama pengguna akun aplikasi.

3. Pengguna IdP

Model Pengguna IdP digunakan untuk sinkronisasi dengan penyedia identitas. Sebagai contoh, bidang lokasi kantor untuk DingTalk adalah idpUser.work_place.

Untuk bidang spesifik, lihat dokumentasi untuk penyedia identitas yang sesuai, seperti Dokumen Bantuan DingTalk - Detail Pengguna.

Penting

Untuk penyedia identitas OIDC (lihat Menyambungkan Penyedia Identitas OIDC), ketika Anda menggunakan ekspresi dalam fitur lampiran otomatis, awalan idpUser. hanya berlaku untuk sub, phoneNumber, dan email dari id_token (contohnya, idpUser.sub). Untuk semua bidang lainnya, Anda harus menggunakan awalan idpUser.rawUserInfo. (contohnya, idpUser.rawUserInfo.aud).

Deskripsi fungsi

Tabel berikut menjelaskan fungsi yang tersedia dan memberikan contoh:

Nama Fungsi

Definisi Fungsi

Deskripsi

Contoh

Append

Append(str1, str2, ..., strn)

Menggabungkan parameter input menjadi string baru. Ini setara dengan str1+str2+....

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

  • Output: str1@example.com

Join

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

Menggabungkan beberapa nilai sumber menjadi satu string, dipisahkan oleh pemisah yang ditentukan.

  • Input: Join("str1", "str2", 123,"-")

  • Output: "str1-str2-123"

Coalesce

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

Mengembalikan parameter pertama yang tidak kosong dari input. Jika semua parameter kosong, maka mengembalikan null. Parameter tidak kosong adalah bukan null dan memiliki panjang lebih besar dari 0.

  • Input: Coalesce("", user.phoneRegion, "86")

  • Output: Jika kode area telepon kosong atau hilang, outputnya adalah 86.

IIF

IIF(condition, whenTrue, whenFalse)

Operasi ternary. Mengembalikan nilai berdasarkan hasil kondisi. Jika kondisi benar, maka mengembalikan whenTrue. Jika kondisi salah, maka mengembalikan whenFalse.

Contoh 1:

  • Input: IIF(true, 1, 2)

  • Output: 1

Contoh 2:

  • Input: IIF(false, 1, 2)

  • Output: 2

IsNull

IsNull(value)

Jika nilai adalah null atau hilang, outputnya adalah true.

Contoh 1:

  • Input: IsNull(null)

  • Output: true

Contoh 2:

  • Input: IsNull("")

  • Output: false

IsNullOrEmpty

IsNullOrEmpty(value)

Jika nilai adalah null atau string kosong, outputnya adalah true.

Contoh 1:

  • Input: IsNullOrEmpty(user.email)

  • Output: Jika email adalah null atau hilang, outputnya adalah true.

Contoh 2:

  • Input: IsNullOrEmpty("")

  • Output: true

Now

Now()

Mengembalikan string yang mewakili DateTime UTC saat ini dalam format yyyy-MM-dd'T'HH:mm:ssXXX.

  • Output: 2021-11 01T09:52:11Z

StringReplace

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

Melakukan penggantian string sederhana.

  • Input: StringReplace("hello $str", "$str", "world")

  • Output: hello world

Trim

Trim(source)

Menghapus karakter spasi putih di awal dan akhir string sumber.

  • Input: Trim(" 123 ")

  • Output: 123

TrimLeft

TrimLeft(source)

Menghapus karakter spasi putih di awal string sumber.

  • Input: TrimLeft(" 123 ")

  • Output: 123

TrimRight

TrimRight(source)

Menghapus karakter spasi putih di akhir string sumber.

  • Input: TrimRight(" 123 ")

  • Output: 123

ToLower

ToLower(source)

Mengonversi string menjadi huruf kecil semua.

  • Input: ToLower(" Abc ")

  • Output: abc

ToUpper

ToUpper(source)

Mengonversi string menjadi huruf besar semua.

  • Input: ToUpper(" Abc ")

  • Output: ABC

Substring

Substring(source, fromIndex, endIndex)

Mengembalikan substring dari string. Substring dimulai dari fromIndex dan berakhir sebelum endIndex.

  • source: Wajib. String sumber. Bisa berupa tipe apa pun yang didukung oleh sintaksis.

  • fromIndex: Wajib. Bilangan bulat. Jika bukan bilangan bulat, fungsi mengembalikan null.

  • endIndex: Wajib. Bilangan bulat. Jika bukan bilangan bulat, fungsi mengembalikan null.

Contoh 1:

  • Input: Substring("0123456", 1, 5)

  • Output: 1234

Contoh 2:

  • Input: Substring("0123456", -1, 7)

  • Output: 0123456

Contoh 3:

  • Input: Substring("0123456", "1", 5)

  • Output: null

SubstringBefore

SubstringBefore(source, subString)

Mencari string sumber dari kiri ke kanan untuk string target dan mengembalikan substring yang mengikuti kemunculan pertama. Jika string target tidak ditemukan, null dikembalikan.

Parameter:

  • source: Wajib. String sumber. Bisa berupa tipe apa pun yang didukung oleh sintaksis.

  • subString: Wajib. String target. Bisa berupa tipe apa pun yang didukung oleh sintaksis.

Nilai kembali: string

Contoh 1:

  • Input: SubstringBefore("test@example@com", "@")

  • Output: "test"

Array

Array(source1, source2,...)

Menggabungkan beberapa nilai menjadi array. Nilai-nilai tersebut dapat berupa tipe Object.

  • Input: Array(1, 2, 3)

  • Output: [1, 2, 3]

ArrayAdd

ArrayAdd(Array(), "test")

Menambahkan elemen ke objek array.

  • Input: ArrayAdd(Array(), "test")

  • Output: ["test"]

ArrayMap

ArrayMap($ArrayObject, __item.ObjectProperty)

Membuat array baru dengan nilai properti tertentu dari array objek.

Dapatkan daftar ID grup untuk pengguna:

  • Input: ArrayMap(user.groups, __item.groupId)

  • Output: ["groupId1","groupId2","groupId3"]

ArrayIndex

ArrayIndex(Array(), n)

Mendapatkan elemen pada indeks tertentu dalam array. Indeks dimulai dari 0.

  • Input: ArrayIndex(Array(1,2,3), 0)

  • Output: 1

ArrayJoin

ArrayJoin(Array(), str)

Menggabungkan elemen-elemen array menjadi string, menggunakan pemisah yang ditentukan.

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

  • Output: "1-2-3"

Object

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

Membuat Object dengan menggabungkan pasangan kunci-nilai.

Mendukung nol atau jumlah parameter genap.

  • Input: Object("key1", "value1", "key2", "value2")

  • Objek Output:

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

ObjectIndex

ObjectIndex(user, "username")

Mendapatkan nilai properti tertentu dari sebuah objek.

Kode ObjectIndex(user, "username") setara dengan user.username.

ObjectToJsonString

ObjectToJsonString(user.groups)

Mengonversi objek menjadi string JSON.

-

Contains

Contains(str1,str2)

Memeriksa apakah sebuah string mengandung string lain. Mengembalikan true atau false.

Contoh 1:

  • Input: Contains("test", "t")

  • Output: true

Contoh 2:

  • Input: Contains("test", "a")

  • Output: false

Or

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

Melakukan operasi logika OR pada beberapa kondisi. Jika ada kondisi yang benar, hasilnya adalah true.

Contoh 1:

  • Input: Or(true,false)

  • Output: true

Contoh 2:

  • Input: Or(true,true,false)

  • Output: true

Contoh 3:

  • Input: Or(false,false)

  • Output: false

And

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

Melakukan operasi logika AND pada beberapa kondisi. Jika ada kondisi yang salah, hasilnya adalah false.

Contoh 1:

  • Input: And(true,false)

  • Output: false

Contoh 2:

  • Input: And(true,true,false)

  • Output: false

Contoh 3:

  • Input: And(true,true,true)

  • Output: true

xOr

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

Membutuhkan tepat dua kondisi.

Mengembalikan false jika kedua kondisi benar atau keduanya salah.

Mengembalikan true jika satu kondisi benar dan yang lain salah.

Contoh 1:

  • Input: xOr(true,false)

  • Output: true

Contoh 2:

  • Input: xOr(true,true)

  • Output: false

Contoh 3:

  • Input: And(false,false)

  • Output: false

StartsWith

StartsWith(str1, str2)

Memeriksa apakah sebuah string dimulai dengan awalan tertentu. Fungsi ini memerlukan tepat dua parameter.

Contoh 1:

  • Input: StartsWith("test", "t")

  • Output: true

Contoh 2:

  • Input: StartsWith("test", "e")

  • Output: false

Split

Split("str1,str2,str3")

Memisahkan string menjadi array substring.

Contoh 1:

  • Input: Split("str1,str2,str3",",")

  • Output: Array(str1,str2,str3)

Equals

Equals(str1,str2)

Membandingkan dua string untuk kesetaraan.

Equals(str1,str2).

Equals(str1,str2,false) melakukan perbandingan sensitif huruf besar-kecil.

Equals(str1,str2,true) melakukan perbandingan tidak sensitif huruf besar-kecil.

Contoh 1:

  • Input: Equals("test","Test")

  • Output: false

Contoh 2:

  • Input: Equals("test","Test",true)

  • Output: true

Contoh 3:

  • Input: Equals("test","Test",false)

  • Output: false

CurrentTimeMillis

CurrentTimeMillis()

Stempel waktu UNIX saat ini dalam milidetik.

-

SamlArray

SamlArray(Array())

Hanya tersedia untuk SAML SSO.

Input:

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

  • Output Respon 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>

  • Input: SamlArray(Array("group1","group2"))

  • Output Respon SAML:

</saml2:Attribute>

ExtractPhoneRegion

ExtractPhoneRegion(source, defaultRegion,autoAppendPlusSignal)

Mengekstrak kode area dari nomor telepon.

  • source: Nomor telepon.

  • autoAppendPlusSignal: Menentukan apakah akan menambahkan tanda plus (+) secara otomatis. Atur ke true untuk menambahkan tanda, atau false untuk tidak menambahkannya.

  • defaultRegion: Negara atau wilayah default untuk kode area ponsel. Untuk kode negara atau wilayah, gunakan Kode Alpha-2 dari standar ISO 3166 Country Codes (https://www.iso.org/obp/ui/#search), seperti CN, US, dan TW.

    • Jika nomor telepon mencakup kode area dengan awalan tanda plus (+), abaikan parameter autoAppendPlusSignal dan defaultRegion.

    • Jika nomor telepon mencakup kode area tanpa awalan tanda plus (+), atur autoAppendPlusSignal ke true dan defaultRegion ke kode negara atau wilayah default.

    • Jika nomor telepon tidak mencakup kode area, atur autoAppendPlusSignal ke false dan defaultRegion ke kode negara atau wilayah default.

Contoh 1:

Jika nomor telepon adalah +86131xxxxx000, +86 131xxxxx000, atau +86-131xxxxx000:

  • Input: ExtractPhoneRegion(idpUser.mobile)

  • Nilai kembali: 86

Contoh 2:

Jika nomor telepon adalah 86131xxxxx000, 86 131xxxxx000, atau 86-131xxxxx000:

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

  • Nilai kembali: 86

Contoh 3:

Jika nomor telepon adalah 131xxxxx000:

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

  • Nilai kembali: 86

ExtractPhoneNumber

ExtractPhoneNumber(source, defaultRegion,autoAppendPlusSignal)

Mengekstrak nomor telepon tanpa kode area.

  • source: Nomor telepon.

  • autoAppendPlusSignal: Menentukan apakah akan menambahkan tanda plus (+) secara otomatis. Atur ke true untuk menambahkan tanda, atau false untuk tidak menambahkannya.

  • defaultRegion: Negara atau wilayah default untuk kode area ponsel. Untuk kode negara atau wilayah, gunakan Kode Alpha-2 dari standar ISO 3166 Country Codes (https://www.iso.org/obp/ui/#search). Contohnya, CN, US, dan TW.

    • Jika nomor telepon mencakup kode area yang diawali dengan tanda plus (+), Anda tidak perlu melewatkan parameter autoAppendPlusSignal dan deafaultRegion.

    • Jika nomor telepon mencakup kode area tanpa tanda plus (+), atur autoAppendPlusSignal ke true dan set defaultRegion ke kode negara atau wilayah default.

    • Jika nomor telepon tidak mencakup kode area dan Anda ingin menyetel satu kode default, atur autoAppendPlusSignal ke false dan set defaultRegion ke kode negara atau wilayah default.

Contoh 1:

Jika nomor telepon adalah +86131xxxxx000, +86 131xxxxx000, atau +86-131xxxxx000:

  • Input: ExtractPhoneNumber(idpUser.mobile)

  • Nilai kembali: 131xxxxx000

Contoh 2:

Jika nomor telepon adalah 86131xxxxx000, 86 131xxxxx000, atau 86-131xxxxx000:

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

  • Nilai kembali: 131xxxxx000

Contoh 3:

Jika nomor telepon adalah 131xxxxx000:

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

  • Nilai kembali: 131xxxxx000

Contoh referensi

Hasil

Contoh ekspresi

Dapatkan nama pengguna dan tambahkan string tetap "@example.com".

Append(user.username, "@example.com")

Jika email tidak kosong, kembalikan email.

Jika email kosong, kembalikan nomor telepon.

Coalesce(user.email, user.phoneNumber)

Jika nomor telepon kosong, gunakan nomor telepon tetap sebagai default.

IIF(IsNullOrEmpty(user.phoneNumber), "1888888****", user.phoneNumber)

Gabungkan kode wilayah telepon dan nomor telepon dengan tanda hubung (-).

Join(user.phoneRegion, user.phoneNumber, "-")

Kembalikan pesan selamat datang kustom yang mencakup nama tampilan.

StringReplace("hello $DisplayName", "$DisplayName", user.displayName)

Masker empat digit tengah nomor telepon dengan tanda bintang (*).

Append(

SubString(user.phoneNumber, 0, 4),

"****",

SubString(user.phoneNumber, 8, 10)

)

Ekstrak nama pengguna dari alamat email.

SubstringBefore(user.email, "@")

Rakit bidang email dalam format array yang ditentukan oleh Sistem untuk Protokol Manajemen Identitas Lintas-Domain (SCIM).

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

Contoh JSON model pengguna:

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