前面的文章讲述了如何将自己开发的应用集成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`文件中
![53\_1.png][53_1.png]
2、 使用步骤1中保存的SpMetadata.xml在Keycloak管理后台添加SAML客户端
![53\_2.png][53_2.png]
![53\_3.png][53_3.png]
![53\_4.png][53_4.png]
3、 将Keycloak当前Realm的SAML IDP Metadata保存至本地
> 示例Reaml名为Saml,点击`Realm Settings`菜单中`Endpoints`中的`SAML 2.0 Identity Provider Metadata`链接,可查看具体的IDP Metadata内容,将内容保存至本地`IdpMetadata.xml`文件中
![53\_5.png][53_5.png]
4、 阿里云RAM访问控制后台编辑用户SSO登录设置
![53\_6.png][53_6.png]
5、 阿里云RAM访问控制后台创建相应的用户
![53\_7.png][53_7.png]
6、 Keycloak管理后台创建相应的用户
> 注意:用户的邮箱必须与步骤5中的完整登录名称完全一致
![53\_8.png][53_8.png]
效果演示
1、 访问阿里云SSO登录地址,点击使用企业账号登录
![53\_9.png][53_9.png]
2、 跳转Keycloak登录页进行登录
![53\_10.png][53_10.png]
3、 Keycloak登录成功后跳转至阿里云控制台
![53\_11.png][53_11.png]
阿里云角色SSO集成Keycloak配置方式
角色SSO的方式不需要在阿里云创建用户,不过SAML配置上会相对复杂一些
配置步骤
1、 登录阿里云RAM访问控制台,下载保存角色SSOSAML服务提供商元数据到本地
![53\_12.png][53_12.png]
2、 角色SSO中新建身份提供商
> 元数据文档的获取与用户SSO步骤3的方式相同
![53\_13.png][53_13.png]
3、 创建RAM角色
> 身份提供商选择上一步新建的身份提供商
![53\_14.png][53_14.png]
![53\_15.png][53_15.png]
4、 使用步骤1中保存的SpMetadata.xml在Keycloak管理后台添加SAML客户端
![53\_16.png][53_16.png]
![53\_17.png][53_17.png]
5、 设置IDP Initiated SSO URL Name,这个就是从Keycloak登录阿里云的地址
> 本示例使用本地环境的Keycloak演示,实际请使用生产环境的Keycloak进行配置,生产环境Keycloak部署可参考:[使用Docker在生产环境快速部署Keycloak高可用集群][Docker_Keycloak]
![53\_18.png][53_18.png]
6、 Keycloak后台创建相应的用户
![53\_19.png][53_19.png]
7、 为创建的用户添加自定义用户属性SamlRole
> 配置此用户属性的目的是为了添加SAML断言,SamlRole名字自定,值必须按照特定格式,参照阿里云文档说明:[支持角色SSO的SAML断言][SSO_SAML]
![53\_20.png][53_20.png]
8、 Keycloak中为创建的客户端配置Mappers以添加SAML断言
> 参照阿里云文档说明:[支持角色SSO的SAML断言][SSO_SAML],必须添加`https://www.aliyun.com/SAML-Role/Attributes/Role`以及`https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName`这2个SAML断言
![53\_21.png][53_21.png]
![53\_22.png][53_22.png]
![53\_23.png][53_23.png]
效果演示
1、 访问SSO登录地址并进行登录,即步骤5中配置的IDP Initiated SSO URL
![53\_24.png][53_24.png]
2、 登录成功后跳转至阿里云控制台
![53\_25.png][53_25.png]
总结
本文对阿里云支持的2种SSO方式进行了配置的示例,而现有不少的三方系统提供的SSO都为SAML 2.0协议,实现上比较类似,可参考本文的方法进行相关的配置。Keycloak不仅可以很方便的对内部开发的应用进行集成,同时凭借本身对SAML 2.0协议良好的支持,只需进行少量SAML相关的配置便可以接入三方系统,从而实现内部系统及外部服务统一的用户认证管理功能。