基础说明
IDaaS内置了表达式引擎,在SAML和OIDC应用中,支持使用高级表达式,向返回信息中添加新的参数。当目标应用需接受额外参数,且参数需要进行某种转化、拼接、判断时,可使用表达式实现。
与此类似,可以使用同样方法,在配置与身份提供方间同步的字段映射时,也可使用表达式实现字段值自定义赋值。
本篇文档下方列有常见示例,帮助快速理解使用场景和方法。
以OIDC为例,在SSO配置中,支持扩展返回的id_token
信息。在扩展值中,可填写高级表达式,以达成特定处理目标。
更多使用方式请参考:SAML Attribute Statements值填写规范、OIDC id_token扩展值填写规范、扩展字段。
表达式分为两部分:
模型,包含User(对应IDaaS账户)和AppUser(对应应用账户)两种。
函数,代表执行逻辑关系。
模型说明
1. User
下列字段在IDaaS的User模型中,可使用类似user.username
、user.lockExpireTime
的引用方式。
属性 | 说明 |
username | 用户名 |
displayName | 用户显示名 |
passwordSet | 密码是否已设置 |
phoneRegion | 手机地区编号,示例:中国区号为 "86",不带 "00" 或 "+" |
phoneNumber | 手机号码 |
邮箱 | |
userSourceType | 来源类型,取值为: |
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模型应用于与身份提供方进行同步时,举例:钉钉的办公地点字段:idpuser.work_place
。
具体字段请查看对应身份提供方文档,例如钉钉的钉钉帮助文档-用户详情。
对于OIDC身份提供方(参考绑定OIDC身份提供方),在自动绑定能力中使用表达式时,仅id_token
中的sub、phoneNumber、email字段的前缀使用idpuser.
,例如idpuser.sub
;其余字段的前缀需使用idpUser.rawUserInfo.
,例如idpUser.rawUserInfo.aud
。
函数说明
以下为我们开放的常用函数及说明:
函数名 | 函数定义 | 说明 |
Append | Append(str1, str2, ..., strn) | 拼接输入参数为新的字符串,等于 |
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) | 当value为null即缺失时,输出为true。 |
IsNullOrEmpty | IsNullOrEmpty(value) | 当value为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)) |