高级:账户字段表达式

基础说明

IDaaS内置了表达式引擎,在SAMLOIDC应用中,支持使用高级表达式,向返回信息中添加新的参数。当目标应用需接受额外参数,且参数需要进行某种转化、拼接、判断时,可使用表达式实现。

与此类似,可以使用同样方法,在配置与身份提供方间同步的字段映射时,也可使用表达式实现字段值自定义赋值。

本篇文档下方列有常见示例,帮助快速理解使用场景和方法。​

OIDC为例,在SSO配置中,支持扩展返回的id_token信息。在扩展值中,可填写高级表达式,以达成特定处理目标。

image.png

更多使用方式请参考:SAML Attribute Statements值填写规范OIDC id_token扩展值填写规范扩展字段

表达式分为两部分:

  1. 模型,包含User(对应IDaaS账户)和AppUser(对应应用账户)两种。

  2. 函数,代表执行逻辑关系。

模型说明

1. User

下列字段在IDaaSUser模型中,可使用类似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

下列字段在IDaaSAppUser模型中,可使用类似appUser.username引用方式。

属性

说明

username

应用账号用户名

3. IdP User

IdP User模型应用于与身份提供方进行同步时,举例:钉钉的办公地点字段:idpuser.work_place

具体字段请查看对应身份提供方文档,例如钉钉的钉钉帮助文档-用户详情

重要

对于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且参数长度大于0。

IIF

IIF(condition, whenTrue, whenFalse)

三目运算。根据condition的结果返回不同的值,为true时返回whenTrue,为false时返回whenFalse。

IsNull

IsNull(value)

valuenull即缺失时,输出为true。

IsNullOrEmpty

IsNullOrEmpty(value)

valuenull或空字符串时,输出为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))