KeyCloak与云SSO进行单点登录的示例

更新时间:
复制为 MD 格式

本文为您提供KeyCloak与云SSO进行单点登录(SSO)的示例。

背景信息

假设企业使用本地目录服务(基于LDAP协议)管理用户,并已在阿里云资源目录(RD)中搭建了多账号体系结构。企业希望经过配置,使本地目录服务中的用户通过KeyCloak SSO登录的方式访问资源目录指定成员账号中的指定资源。

在配置SSO登录前,需要事先在服务器上搭建KeyCloak服务,并将本地目录服务中的用户同步至KeyCloak中。示例基于KeyCloak官网Docker镜像服务进行。

说明

本文中涉及的KeyCloak配置部分属于建议,仅用于帮助理解阿里云SSO登录的端到端配置流程,阿里云不提供KeyCloak配置的咨询服务。

步骤一:在 云SSO 获取服务提供商(SP)元数据

  1. 登录SSO控制台

  2. 在左侧导航栏,单击设置

  3. SSO登录区域,复制服务提供商(SP)的 ACS URL Entity ID,或下载保存SP元数据文档。

步骤二:在 KeyCloak 创建新的管理域Realm

  1. 登录 KeyCloak 服务,进入 Console 控制台

  2. 在左侧导航栏,选择 Manage realms.

  3. Manage realms页签单击Create realms新建新的管理域。

步骤三:在 KeyCloak 创建新的Clients

  1. 在左侧导航栏,选择Manage -> Clients

  2. Clients页签,单击Import Client 来快速新建新的Client。

  3. 通过导入步骤一中获取的云SSO元数据文档,创建新的Client,相关信息KeyCloak会自动解析。

    image.png

  4. 单击 Save 进行保存

  5. Clients页签,选择新建的Client进入Client Details,在页面顶部选择Settings页签,下滑至SAML capability栏,将Name ID format 设置为username。

    image.png

步骤四:在KeyCloak获取身份提供商(IdP)元数据

  1. 在左侧导航栏选择Realm Setting 进入设置页签。

  2. 在右侧选择顶部的General 页签,下滑至页面底部,下载并保存SAML 2.0 Identity Provider Metadata元数据。

    image.png

步骤五:在云SSO启用SSO登录

  1. 在云SSO的左侧导航栏,单击设置

  2. SSO登录区域,单击配置身份提供商信息

  3. 配置身份提供商信息对话框,选择上传元数据文档

  4. 单击上传文件,上传从步骤四中获取的IdP元数据文件

  5. 打开SSO登录开关,启用SSO登录。

    image.png

步骤六:创建用户至云SSO

在云SSO创建同名用户,具体操作,请参见基本操作

(可选)步骤七:为用户授权

如果您计划用户SSO登录后访问资源目录指定成员账号中的指定资源,您还需要创建访问配置,并为用户在RD账号上授权。

  1. 在云SSO创建访问配置,定义权限策略。

    具体操作,请参见创建访问配置

  2. 为用户在RD账号上授权。

    具体操作,请参见RD账号上授权

验证结果

完成上述配置后,您可以从阿里云或 KeyCloak 发起SSO登录。

  • 从阿里云发起SSO登录

    1. SSO控制台概览页,复制用户登录地址。

    2. 使用新的浏览器打开复制的用户登录地址。

    3. 单击跳转,系统会自动跳转到KeyCloak的登录页面

    4. 使用KeyCloak 用户名和密码登录。系统将自动SSO登录并重定向到您指定的Default RelayState页面。本示例中未指定Default RelayState,系统会访问云SSO用户门户。

    image.png

  • KeyCloak进行登录

    1. KeyCloak 控制台左侧导航栏单击Clients,选择上述新建的SAML Client进入详情页。

    2. Settings 页签,下滑至Access Settings,为 IDP-Initiated SSO URL name 设置一个名称,用于登录的URL为:image.png

      {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name}.
    3. URL通过新的浏览器打开,使用KeyCloak的用户名和密码登录。系统将自动SSO登录并重定向到您指定的Default RelayState页面。本示例中未指定Default RelayState,系统会访问云SSO用户门户。