前面的文章讲述了如何将自己开发的应用集成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相关的配置便可以接入三方系统,从而实现内部系统及外部服务统一的用户认证管理功能。
























