前面的文章讲述了如何将自己开发的应用集成Keycloak的示例,那对于现有的一些三方的系统和服务,是否也能够接入Keycloak实现统一的身份认证管理呢?答案是肯定的,当然前提是三方的系统和服务本身支持OpenID Connect
、OAuth 2.0
或SAML 2.0
这样的协议。那么阿里云需要怎么才能接入到Keycloak中呢?本文便讲述具体的集成配置方法。
阿里云SSO功能说明
阿里云官方文档有如下描述:
阿里云支持基于SAML 2.0的SSO(Single Sign On,单点登录),也称为身份联合登录。
所以我们要想阿里云接入Keycloak,那就只需要在Keycloak进行相应的SAML 2.0的配置。首先我们先来了解下SAML相关的概念。
SAML基本概念
- 身份提供商(IdP):一个包含有关外部身份提供商元数据的RAM实体,身份提供商可以提供身份管理服务。本例中指Keycloak。
- 服务提供商(SP):利用IdP的身份管理功能,为用户提供具体服务的应用,SP会使用IdP提供的用户信息。本例中指阿里云。
- 安全断言标记语言(SAML 2.0):实现企业级用户身份认证的标准协议,它是SP和IdP之间实现沟通的技术实现方式之一。SAML 2.0已经是目前实现企业级SSO的一种事实标准。
- SAML断言(SAML assertion):SAML协议中用来描述认证请求和认证响应的核心元素。例如:用户的具体属性就包含在认证响应的断言里。
- 信赖(Trust):建立在SP和IdP之间的互信机制,通常由公钥和私钥来实现。SP通过可信的方式获取IdP的SAML元数据,元数据中包含IdP签发SAML断言的签名验证公钥,SP则使用公钥来验证断言的完整性。
阿里云SSO的方式
阿里云提供以下两种基于SAML 2.0协议的SSO方式:
- 用户SSO:阿里云通过IdP颁发的SAML断言确定企业用户与阿里云RAM用户的对应关系 。企业用户登录后,使用该RAM用户访问阿里云。
- 角色SSO:阿里云通过IdP颁发的SAML断言确定企业用户在阿里云上可以使用的RAM角色。企业用户登录后,使用SAML断言中指定的RAM角色访问阿里云。
这2种SSO的方式的区别及使用场景可参考官方文档,这里简单总结下最根本的区别:
- 用户SSO:需要在阿里云及Keycloak同时创建用户才可实现SSO登录功能,SAML配置相对较简单
- 角色SSO:只需在Keycloak中创建用户便可直接登录阿里云,阿里云中不需要创建用户,SAML配置相对复杂一些
阿里云用户SSO集成Keycloak配置方式
配置步骤
用户SSO的方式需要在阿里云及Keycloak同时创建用户,配置上相对较为简单,具体步骤如下:
1、 登录阿里云RAM访问控制台,下载保存用户SSOSAML服务提供商元数据
到本地
如下图中https://signin.aliyun.com/saml/SpMetadata.xml?tenantID=XXX这个地址浏览器打开后内容保存到本地
SpMetadata.xml
文件中
2、 使用步骤1中保存的SpMetadata.xml
在Keycloak管理后台添加SAML客户端
3、 将Keycloak当前Realm的SAML IDP Metadata保存至本地
示例Reaml名为Saml,点击
Realm Settings
菜单中Endpoints
中的SAML 2.0 Identity Provider Metadata
链接,可查看具体的IDP Metadata内容,将内容保存至本地IdpMetadata.xml
文件中
4、 阿里云RAM访问控制后台编辑用户SSO登录设置
5、 阿里云RAM访问控制后台创建相应的用户
6、 Keycloak管理后台创建相应的用户
注意:用户的邮箱必须与步骤5中的完整登录名称完全一致
效果演示
1、 访问阿里云SSO登录地址,点击使用企业账号登录
2、 跳转Keycloak登录页进行登录
3、 Keycloak登录成功后跳转至阿里云控制台
阿里云角色SSO集成Keycloak配置方式
角色SSO的方式不需要在阿里云创建用户,不过SAML配置上会相对复杂一些
配置步骤
1、 登录阿里云RAM访问控制台,下载保存角色SSOSAML服务提供商元数据
到本地
2、 角色SSO中新建身份提供商
元数据文档的获取与用户SSO步骤3的方式相同
3、 创建RAM角色
身份提供商选择上一步新建的身份提供商
4、 使用步骤1中保存的SpMetadata.xml
在Keycloak管理后台添加SAML客户端
5、 设置IDP Initiated SSO URL Name
,这个就是从Keycloak登录阿里云的地址
本示例使用本地环境的Keycloak演示,实际请使用生产环境的Keycloak进行配置,生产环境Keycloak部署可参考:使用Docker在生产环境快速部署Keycloak高可用集群
6、 Keycloak后台创建相应的用户
7、 为创建的用户添加自定义用户属性SamlRole
配置此用户属性的目的是为了添加SAML断言,SamlRole名字自定,值必须按照特定格式,参照阿里云文档说明:支持角色SSO的SAML断言
8、 Keycloak中为创建的客户端配置Mappers以添加SAML断言
参照阿里云文档说明:支持角色SSO的SAML断言,必须添加
https://www.aliyun.com/SAML-Role/Attributes/Role
以及https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
这2个SAML断言
效果演示
1、 访问SSO登录地址并进行登录,即步骤5中配置的IDP Initiated SSO URL
2、 登录成功后跳转至阿里云控制台
总结
本文对阿里云支持的2种SSO方式进行了配置的示例,而现有不少的三方系统提供的SSO都为SAML 2.0协议,实现上比较类似,可参考本文的方法进行相关的配置。Keycloak不仅可以很方便的对内部开发的应用进行集成,同时凭借本身对SAML 2.0协议良好的支持,只需进行少量SAML相关的配置便可以接入三方系统,从而实现内部系统及外部服务统一的用户认证管理功能。