此功能与其他经过 OpenID Connect 认证的平台兼容,目前经过测试且确认支持的平台:
根据您使用的 OpenID Connect 服务提供商,通常需要在该服务提供商中添加并配置某种应用或整合。如需更多信息,请查阅您所使用提供商的 OpenID Connect 文档。下面是使用 auth0 配置 OpenID Connect 的指南。
exports.onExecutePostLogin = async (event, api) => {
if (event.authorization) {
api.idToken.setCustomClaim('group', event.authorization.roles);
api.accessToken.setCustomClaim('group', event.authorization.roles);
}
};{
"roleMappings":[
{ "source":"Supervisors","destination":"Administrators" }
]
}当配置应用程序时,您需要指定相应的回调 URL。
| 类型 | URL | 描述 |
| Redirect Uri | https://{yourSiteURL}/openid/v1/login | 用户通过身份验证后,授权码回调的 URL。 |
| Logout Uri | https://{yourSiteURL}/openid/v1/logout |
这是用户在身份提供方会话终止后被重定向的URL。 |
您可以通过进入系统管理->认证->身份验证方法,然后选择“OpenID Connect 单点登录”找到 OpenID Connect 插件。建议您先配置所需的属性并保存,然后再选择“启用”选项。否则,您的网站认证流程将立即被替换,您可能需要使用应急管理登录来进一步配置该插件。
| 选项 | 必填 | 默认 | 描述 |
| 授权服务器 | 是 | 这是 OpenID 服务提供商的基础 URL。该 URL 用于获取有关 OpenID 服务器的发现信息,包括相应的端点、JWT 令牌密钥和颁发者。 | |
| 客户端 ID | 是 | 这是由 OpenID 应用配置颁发的客户端 ID。 | |
| 客户端密钥 | 是 | 这是由 OpenID 应用配置颁发的客户端密钥。 | |
| 附加范围 | 否 | openid, profile, email | 如果您的应用程序有其他范围要求,可在此处以单行形式添加,每项新声明之间用空格分隔(例如:scope1 scope2)。默认情况下会请求标准的 openid、email 和 profile 范围。请求额外范围并不能保证服务提供商能够访问新的数据。 |
| 附加发现信息 | 否 | 通常情况下这并非必需,但如果您的授权服务器需要额外的查询字符串信息,您可以在此处添加,但无需使用“?”。如果该附加信息是应用程序的客户端ID,则可以使用之前设置的值,通过令牌 {ClientId} 来引用。例如:client_id={ClientId}。如果您使用的是静态信息,请确保其值已正确编码,以便用于URL。 |
| 选项 | 必填 | 默认 | 描述 |
| 自动创建用户账户 | 否 | 是 | 当勾选此选项时,用户通过 OpenID Connect 成功认证后,若未找到匹配的站点账户,系统将自动创建。若不勾选,则会抛出错误。通常建议保持此选项勾选,除非您采用其他方式管理用户账户的创建,例如通过 SCIM 配置。 |
| 选项 | 必填 | 默认 | 描述 |
| 唯一身份声明 | 是 | sub | 这是用户在身份平台中作为唯一标识符的声明。默认情况下,它使用 JWT 令牌中的“sub”声明,即主体信息。除非您确定有其他声明可以作为唯一标识符,否则应保持默认设置。 |
| 邮箱地址声明 | 是 | 此声明为用户的电子邮件地址。该地址将用作网站账户的私人邮箱,并作为网站账户的主要查找方式。在向网站提供时,该地址必须唯一。 | |
| 用户名声明 | 是 | preferred_user_name | 这是用于为用户站点分配用户名的声明。当提供给站点时,该用户名必须是唯一的;如果创建账户时用户名不唯一,则会依次附加数字,直到其变得唯一为止。如果用户名是电子邮件地址,则会移除其中的“@”符号和域名,然后应用相同的唯一性逻辑。此举旨在确保用户的电子邮件地址不会被无意中或非自愿地泄露。即使您打算将电子邮件地址用作用户名,它也会被修改。 |
| 组(角色)声明 | 否 | groups | 此声明代表用户组,或网站所识别的角色。这是用于映射网站中角色成员资格所必需的。如果权限系统不支持此功能,或未以简单的名称形式呈现,则应留空。 |
| 映射配置 | 否 | 提供一个用于通过 JSON 映射站点中配置文件和角色数据的实用工具。更多详细信息请参见下面的“高级配置文件和角色映射”。 |
您可使用映射选项,在用户创建并登录时,将声明信息映射到自定义配置文件字段,并将角色关联至用户(如需要)。该功能采用特定的JSON格式进行定义。在决定使用此功能时,需注意以下几点重要事项。
配置对象包含以下三个属性:
{
"claimMappings": [],
"roleMappings":[],
"onCreateOnly":false
}
| 选项 | 描述 |
| claimMappings | 用于定义如何将声明映射到自定义配置字段或系统字段的一组声明映射。 |
| roleMappings | 一系列角色映射,用于定义用户如何被映射到自定义角色和现有角色。 |
| onCreateOnly | 当为 true 时,仅在通过 OpenID Connect 创建账户时应用声明和角色映射,而不是在创建账户和登录时同时应用。 |
有两种方式可以映射声明、系统字段或自定义配置文件字段。系统字段是您站点中的常量字段,而配置文件字段则可根据您的站点进行特定配置。您可以映射任何简单值字段,例如字符串,或包含简单值的数组,例如字符串列表。
claimMappings 包括以下字段:
{
"mapsTo": { },
"claims": [],
"format": ""
}
| 选项 | 描述 |
| mapsTo | 一个映射对象,用于标识您是映射到系统字段还是配置文件字段。 |
| claims | 一组字符串,用于定义 mapTo 字段的值。当未指定格式且指定了多个声明时,这些声明将按其定义的顺序用空格连接在一起。 |
| format | 定义多个声明的合并方式,或向现有声明添加额外数据。它是一个字符串,其中 {claimName} 用于指定要使用的声明。 |
当前支持的系统字段如下:
在定义系统字段时,会在 mapsTo 字段中添加以下 JSON 格式:
"mapsTo": { "systemField": "displayName" }
“systemField” 属性是唯一所需的内容,且必须符合上述定义的预设系统字段ID。
当不使用系统字段时,您可以指定自定义配置文件字段。如果该配置文件字段已存在,则其值由 OpenID Connect 提供程序管理;如果不存在,则在首次尝试写入值时自动创建。
"mapsTo": {"profileField":{"key": "profilrField_key", "label": "FieldLabel","fieldType": "Plain Text","searchable": true } }
您可以为“mapsTo”字段指定一个或多个声明。当指定了多个声明时,若未指定格式,则这些值将按在“mapsTo”字段中定义的顺序用空格连接。此外,当适当指定时,声明也可以是字符串数组。
"claims": [ {"name": "first_name" }, { "name": "emails, "type":"array","delimiter":"," }]
简单的单值声明。
{ "name": "first_name" }
值为字符串数组的声明。
{ "name": "groups","type":"array", "delimiter":","}
您可以使用格式属性来选择声明值的显示方式。该属性是一个静态字符串,其中包含以 {claimName} 格式化的占位符,而 claimName 是在声明区域中定义的名称。当指定多个声明时,此格式非常有用。占位符将被其对应的声明值替换,但数组会根据声明定义中的分隔符方式进行显示。
单值格式
"format":"My name is {first_name}"
多值格式
"format":"{last_name}, {first_name}"
您可以为单个映射对象指定“onCreateOnly”属性。当该值为 true 时,配置文件数据仅在创建账户时应用。默认情况下此值为 false,表示数据将在创建账户和每次登录时应用。
{
"mapsTo": { },
"claims": [],
"format": "",
"onCreateOnly":true
}
您可以在“roleMappings”中定义用户如何映射到特定角色,该字段是一个包含以下属性的映射对象数组
"roleMappings":[
{ "source":"siteMembershipAdmins","destination":"CustomRole" },
{ "source":"Group 2", "destination":null,"onCreateOnly":true }
]