SSO场景系列:实现Microsoft AD到阿里云的单点登录

简介: 在文章合规与安全:阿里云与企业身份系统的集成中,我们介绍了阿里云与企业身份系统的集成,可以配置云账号下的子账号通过企业身份系统登陆。本文以Windows Server 2012 R2为例,介绍如何配置Microsoft AD作为阿里云的单点登录IdP。

【更新:随着RAM 2.0的上线,阿里云官网提供了对SAML Federation的官方技术文档,读者可以参考:https://help.aliyun.com/document_detail/96239.html ,同时推荐用户使用RAM控制台进行配置,原企业控制台(公测)将逐步下线】

在文章合规与安全:阿里云与企业身份系统的集成中,我们介绍了阿里云与企业身份系统的集成,可以配置云账号下的子账号通过企业身份系统登陆。配置要点是

  1. 在阿里云目录中配置可信企业SAML IdP
  2. 在企业IdP中配置阿里云为可信SAML SP

其中第二点在不同的身份系统中有不同的配置方法。本文以Windows Server 2012 R2为例,介绍如何配置Microsoft AD作为阿里云的单点登录IdP。

前置条件

本文假定用户对Microsoft AD做了合理正确的配置,在Windows Server 2012 R2上配置了以下Server Role

  • DNS服务器:DNS服务器用来将身份认证请求解析到正确的Federation Service上
  • Active Directory域服务 (AD DS):域服务提供对域用户和域设备等对象的创建,查询和修改等功能
  • Active Directory Federation Service (AD FS):Federation Service提供配置联合身份认证依赖方的功能,并对配置好的依赖方提供单点登录认证。

针对配置Active Directory的疑问,用户可以参考微软官方文档或者搜索相关的第三方博客。

示例配置

示例中用到相关配置如下

  1. 云账号的目录默认域名为junpu.onaliyun.com
  2. 云账号下包含子用户junpu.chen,其完整的User Principal Name(UPN)为junpu.chen@junpu.onaliyun.com
  3. 自建Microsoft AD中的AD FS服务名称是adserver.testdomain.com
  4. 自建Microsoft AD的域名为 testdomain.com,NETBIOS名为testdomain
  5. 用户junpu.chen在AD中的UPN为junpu.chen@testdomain.com,域内登陆也可以使用testdomain\junpu.chen

在阿里云目录中配置可信外部SAML IdP

在浏览器中输入如下地址

https://adserver.testdomain.com/FederationMetadata/2007-06/FederationMetadata.xml

将元数据XML文件下载存储到本地,并按照合规与安全:阿里云与企业身份系统的集成中介绍的流程,将下载好的IdP元数据文档配置到阿里云目录中。

完成这一步之后,阿里云目录则对示例中的AD FS产生了单向信任。如果用户在阿里云子用户登陆页面输入junpu.chen@junpu.onaliyun.com,阿里云则会向AD FS发出SAML认证请求,但是AD FS此时并不信任阿里云,因此AD FS会报出如下错误

relogin_noadtrust

在AD FS中配置阿里云为可信SP

在Microsoft的AD FS语境中,SAML SP被称作Relying Party(依赖方,信赖方),这是因为AD FS支持OAuth/OIDC/WS-Federation,而这三个协议中的单点登录消费方都被称作Relying Party,因此AD FS在对SAML协议支持中并没有采用SAML特有的术语Service Provider,而是统一采用Relying Party来指定不同协议中的单点登录消费方。

创建阿里云作为AD FS的可信SP步骤如下
第一步:在服务器管理器中的工具菜单中打开AD FS管理
Screen_Shot_2017_12_12_at_6_25_44_PM

第二步:在AD FS管理工具中添加信赖方信任(Relying Party Trust)

relyingpartytrust

第三步:为新创建的信赖方设置阿里云的SAML元数据

信赖方可以直接配置元数据的URL,或者将阿里云SAML元数据下载之后,为信赖方配置下载好的XML文件。阿里云SAML元数据的URL可以通过以下方式获取:

  1. 登录 RAM 控制台。
  2. 单击人员管理 > 设置 > 高级设置,在SSO 登录设置下可以查看当前云账号的SAML 服务提供方元数据 URL。

完成配置信赖方之后,阿里云和AD FS就产生了互信,阿里云会将junpu.onaliyun.com目录内的用户认证请求转发到AD FS adserver.testdomain.com上,AD FS也会接受来自于阿里云的认证请求并向阿里云转发认证响应。

接下来需要对信赖方配置SAML断言中需要颁发的属性。

为阿里云SP配置SAML断言属性

为了让阿里云能使用SAML响应定位到云目录中的子用户,我们需要SAML断言中的NameID字段取值为云目录中子用户的UPN。

配置Active Directory中的UPN为SAML断言中的NameID

在这里,微软用了Claim(声明)这一术语来指代SAML断言中的属性。这是因为AD FS支持的其他协议(OAuth,WS-Fed等)也都使用Claim来表达Token中的字段。

第一步:为信赖方编辑声明规则
所谓声明规则,指的是Claims Rule,也就是SAML断言中的声明(属性)是怎样从Active Directory的用户属性中生成的。

claimtransform

第二步:添加颁发转换规则
所谓颁发转换规则,指的是Issuance Transformation Rule,指的是如何将一个已知的用户属性,经过转换之后,颁发为SAML断言中的属性。由于我们要将用户在AD中的UPN颁发为NameID,因此需要添加一个新的规则

claimtransform2

规则的模版为转换传入声明

claimtransform5

到这里,由于我们示例中的云账号里的UPN域名为junpu.onaliyun.com,而AD中的UPN域名为testdomain.com,显然如果直接将AD中的User Principal Name映射为NameID会让阿里云无法匹配到正确的子账号用户。

我们提供两个路径来填补这一空白。

路径一:在阿里云目录中验证AD域名

如果域名testdomain.com是一个在公网DNS中注册的域名,那么用户可以在阿里云目录中验证自己对域名的所有权。进入企业控制台的人员目录>域名设置>创建域别名

_

验证通过之后,阿里云目录的默认域junpu.onaliyun.com则有了一个域别名testdomain.com。子用户junpu.chen的UPN为junpu.chen@testdomain.com。

验证域名之后的云目录则可以在域名上与自建AD DS保持一致:云目录子用户的UPN与AD中用户的UPN都使用testdomain.com这个域名。

完成这个设置后,我们回到上面的声明转换规则编辑中,将UPN映射为NameID(名称ID)。

Screen_Shot_2017_12_13_at_2_18_01_PM

路径二:将AD中的User Principal Name的域名转换后颁发为NameID

如果域名testdomain.com是企业的内网域名,那么阿里云将无法验证企业对域名的所有权。云目录就只能采用onaliyun.com下的子域名。在这种情况下,在AD FS给阿里云颁发的SAML断言中就必须将UPN的域名后缀从testdomain.com替换为junpu.onaliyun.com(假定用户名一一对应)

Screen_Shot_2017_12_13_at_2_32_27_PM

最后

在笔者的示例中,自建ADtestdomain.com这一域名是内网域名,通过上述路径二对断言属性进行映射之后,从自建AD的内网访问阿里云,在子账号登陆中输入junpu.chen@junpu.onaliyun.com

Screen_Shot_2017_12_13_at_2_38_20_PM

阿里云将认证请求转发给adserver.testdomain.com

Screen_Shot_2017_12_13_at_2_40_01_PM

输入AD内的用户名junpu.chen@testdomain.com和密码之后,就完成了登陆回到阿里云控制台

Screen_Shot_2017_12_13_at_2_41_51_PM

常见问题

由于企业自建AD配置上可能有所不同,因此可能需要编辑略有不同的声明规则。但是最终的目标都是让SAML响应中能够返回阿里云目录可以识别的子账号UPN。

这里列出一些常见的问题

  • 如果没有配置声明规则,导致SAML断言中缺失NameID字段
无法解析外部身份提供商签发的认证信息。: Unable to understand SAML response
  • 如果SAML断言中的NameID域名与云目录并不一致
您的阿里云目录的外部单点登录配置无效,请联系管理员。: {"domainName":"testdomain.com"}
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
1月前
|
存储 编解码 缓存
购买阿里云服务器如何选择实例?根据业务场景与细分场景选择实例规格
对于很多初次购买阿里云服务器的用户来说,面对众多可选择的云服务器实例规格,往往不知道如何选择,不同实例规格适用于不同的业务场景,本文为大家汇总了不同业务场景和细分场景下应该选择的主要实例规格,以及这些实例规格的主要性能和适用场景,如果你不知道如何选择阿里云服务器的实例规格,不妨根据自己的场景参考本文所推荐的主要实例规格来选择。
购买阿里云服务器如何选择实例?根据业务场景与细分场景选择实例规格
|
27天前
|
存储 SQL 数据管理
阿里云数据库 SelectDB 内核 Apache Doris 如何基于自增列满足高效字典编码等典型场景需求|Deep Dive 系列
自增列的实现,使得 Apache Doris 可以在处理大规模时展示出更高的稳定性和可靠性。通过自增列,用户能够高效进行字典编码,显著提升了字符串精确去重以及查询的性能。使用自增列作为主键来存储明细数据,可以完美的解决明细数据更新的问题。同时,基于自增列,用户可以实现高效的分页机制,轻松应对深分页场景,有效过滤掉大量非必需数据,从而减轻数据库的负载压力,为用户带来了更加流畅和高效的数据处理体验。
|
1月前
|
边缘计算 专有云 虚拟化
阿里云神龙在智慧办公场景下的特点
阿里云神龙在智慧办公场景下的特点
|
1月前
|
存储 人工智能 安全
阿里云第八代云服务器实例通用型g8i实例性能和适用场景介绍
随着云计算技术的不断演进,阿里云作为国内领先的云服务提供商,持续推出创新的云服务器实例以满足不同用户的需求。近日,阿里云宣布其第八代云服务器ECS g8i实例已经完成全新升级。g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。
阿里云第八代云服务器实例通用型g8i实例性能和适用场景介绍
|
3月前
|
存储 人工智能 安全
阿里云企业成长解决方案,含通用、企业上云、企业服务、教育等多场景
在数字化时代,企业的成长离不开云计算技术的支持。阿里云作为领先的云服务提供商,推出了全面的企业成长解决方案,涵盖通用场景、企业上云、新零售、企业服务、教育、游戏、医疗健康、文化传媒和工业制造等多个行业。这些解决方案旨在帮助企业轻松应对各种挑战,实现数字化转型和升级。
阿里云企业成长解决方案,含通用、企业上云、企业服务、教育等多场景
|
3月前
|
边缘计算 安全 算法
阿里云丁玉杰:构建全场景服务引擎
2023全球边缘计算大会·上海站,阿里云边缘云演讲分享
106 0
|
4月前
|
SQL BI Apache
奇富科技基于阿里云数据库 SelectDB 版内核 Apache Doris 的统一 OLAP 场景探索实践
Apache Doris 作为整体 OLAP 场景,助力奇富科技信贷科技服务平台优化,使得报表分析场景 SLA 达标率提升至 99% 以上,平均查询耗时降低 50%,为营销活动、广告投放等提供强有力的数据支持。
奇富科技基于阿里云数据库 SelectDB 版内核 Apache Doris 的统一 OLAP 场景探索实践
|
25天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
28天前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考
|
29天前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程