单点登录 (SSO)
通过 Cloud Directory 的单点登录 (SSO),可以提供在多个 Web 应用程序之间的顺利认证体验。 如果用户初始登录时开启了 SSO,那么用户下次登录时,无需重新输入其凭证。 相反,用户会自动登录到由同一 App ID 实例进行保护的任何应用程序。
App ID 为 Cloud Directory 用户提供 SSO。 如果使用社交或联合 SAML 身份提供商,则 SSO 由该提供商管理,App ID。
运作方式
查看下图以了解 SSO 的工作方式。
- Cloud Directory 用户首次登录到应用程序。
- 系统要求用户通过提供用户名或电子邮件和密码进行认证。
- 如果凭证有效,用户将登录到应用程序。 同时,App ID 会创建会话并在用户的浏览器上设置 cookie。
- 如果用户尝试登录到其他某个应用程序,那么 App ID 会检测到会话 cookie 并自动将用户登录到应用程序中。App ID 会话 cookie 是特定于实例的,由实例的唯一专用密钥签署。
目前,Cloud Directory SSO 已配置为在 Cloud Directory 是启用的唯一身份提供者时有效。 如果 App ID 的实例配置为使用多个身份提供者,那么启用 SSO 不会影响登录流程。 用户每次登录时,系统都会提示用户输入其 Cloud Directory 凭证或选择其他某个提供者。
配置 SSO
可以使用 App ID 仪表板或使用 API 来配置单点登录。
使用 GUI
可以通过 GUI 来配置 SSO。
-
导航至 App ID 仪表板的 Cloud Directory > 单点登录选项卡。
-
将启用单点登录切换为已启用。
-
设置 SSO 会话将在用户处于不活动状态多久之后到期。 会话到期后,用户必须重新登录。 此时间以分钟为单位进行指定,并且允许的最长不活动时间为 10,080 分钟(7 天)。 缺省时间为 1440 分钟,相当于 1 天。
-
将重定向 URI 添加到注销重定向 URI 框,然后单击 + 号。 请确保仅注册您信任的应用程序。 通过注册 URI,可授权 App ID 将应用程序包含在授权工作流程中。
-
单击保存。
使用 API
通过使用 SSO 配置管理 API 来定义三个设置,可以开启 SSO 功能。
示例调用:
{
"isActive": true,
"inactivityTimeoutSeconds": 86400,
"logoutRedirectUris": [
"http://my-first-app.com/after_logout",
"http://my-second-app.com/after_logout"
]
}
设置 | 定义 |
---|---|
isActive |
要启用 SSO,请将该值设置为 true 。 默认设置为 false 。 |
inactivityTimeoutSeconds |
在要求用户重新输入其凭证之前,允许没有任何用户活动的最长时间。 该值以秒为单位指定,最大值为 604800 seconds (7 天)。 默认设置为 86400 seconds (1 天)。 |
logoutRedirectUris |
App ID 可以在用户注销后将用户重定向到的允许 URI 的逗号分隔列表。 |
配置注销
通过 App ID,可以结束用户在当前浏览器的 SSO 会话。 如果 API 端点是通过用户的浏览器访问的,那么会终止用户的会话,并且系统会在用户下次尝试在该浏览器中登录时,提示用户输入其凭证 - 对于任何应用程序都会要求这样做。
当与更改,重置或更新密码相关的某个流启动时,将自动为用户终止所有客户机中的会话。
使用 API
要注销用户,请使用您的信息完成以下 API 调用,以重定向用户的浏览器。
https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/cloud_directory/sso/logout?redirect_uri=<redirectURI>&client_id=<clientID>
变量 | 值 |
---|---|
region |
供应 App ID 实例的区域。 了解有关 可用区域 的更多信息。 |
tenantID |
App ID 实例的唯一标识。 您可以在 App ID 控制面板的“服务证书”选项卡中找到该值。 如果没有服务凭证集,可以进行创建,然后从中获取此值。 |
redirectURI |
通过 App ID 仪表板在 SSO 配置中指定的 URI。 出于安全原因,如果未指定值,那么不会执行重定向,并且会显示错误。 |
clientID |
应用程序的客户机标识。 |
即使 SSO 会话已结束,只要用户在其会话中存储的有效访问令牌未到期,那么用户也可能无需再次输入其凭证。 缺省情况下,令牌会在 1 小时后到期。
使用 Node.JS 服务器 SDK
您还可以使用 App ID Node.js 服务器 SDK 来自动处理重定向。
-
将
logoutSSO
设置为方法。 例如:let webAppStrategy = new WebAppStrategy(.....); .... webAppStrategy.logoutSSO();
-
配置注销。
app.get('/logoutSSO', (req, res) => { res.clearCookie("refreshToken"); webAppStrategy.logoutSSO(req,res, { "redirect_uri": "https://my-app.com/after_logout" }); });
结束用户的所有会话
作为管理员,您可以使用 App ID 管理 API 来结束任何用户的所有 SSO 会话。 这些 API 由 Cloud IAM 令牌进行保护。
示例 API 请求:
POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users/<userID>/sso/logout
Headers:
Authorization: Bearer <IAMToken>
Content-Type: application/json
变量 | 值 |
---|---|
Content-Type |
您请求的内容类型。 接受值为 application/json 。 |
region |
供应 App ID 实例的区域。 了解有关 可用区域 的更多信息。 |
tenantID |
App ID 实例的唯一标识。 您可以在 App ID 控制面板的“服务证书”选项卡中找到该值。 如果没有服务凭证集,可以进行创建,然后从中获取此值。 |
userID |
Cloud Directory 用户的唯一标识。 可以使用 Cloud Directory 用户 API 或通过查看用户的身份令牌来获取此标识。 |
调用此 API 时,所有指定用户的 SSO 会话都会失效。 这意味着下次该用户尝试从任何设备或浏览器登录到任何应用程序时,都需要重新输入其凭证。