本文提供一个以AD FS与阿里云进行SSO的示例,帮助用户理解企业IdP与阿里云进行SSO的端到端配置流程。本文以在Windows Server 2012 R2 ECS实例上搭建的AD FS为例进行介绍。
背景信息
企业使用Active Directory (AD)进行员工管理,并通过AD FS配置包括阿里云在内的企业应用。AD管理员通过员工的用户组来管理员工对阿里云账号的访问权限。在本示例中,企业拥有两个阿里云账号(Account1和Account2),要管理的权限为Admin和Reader,企业员工用户名为Alice,该用户所在的AD用户组为Aliyun-<account-id>-ADFS-Admin和Aliyun-<account-id>-ADFS-Reader,企业要实现从AD FS到Account1和Account2的角色SSO。
- <account-id>为云账号Account1或Account2的账号ID,因此用户Alice所在的AD用户组共4个,分别对应两个云账号中的Admin和Reader权限。
- 本文中涉及到Microsoft Active Directory配置的部分属于建议,仅用于帮助理解阿里云SSO登录的端到端配置流程,阿里云不提供Microsoft Active Directory配置的咨询服务。
基本流程
员工进行控制台登录的基本流程如下图所示。

AD管理员在完成角色联合登录的配置后,企业员工(Alice)可以通过如图所示的方法登录到阿里云控制台。更多信息,请参见SAML角色SSO概览。
上述过程表示,用户登录时,企业会进行统一登录认证,无需用户提供在阿里云上的任何用户名和密码。
步骤一:在阿里云中将AD FS配置为可信SAML IdP
步骤二:在AD FS中将阿里云配置为可信SAML SP
在AD FS中,SAML SP被称作信赖方(Relying Party)。设置阿里云作为AD FS的可信SP的操作步骤如下。
步骤三:为阿里云SP配置SAML断言属性
阿里云需要AD FS在SAML断言中提供NameID
、Role
和RoleSessionName
属性。AD FS中通过颁发转换规则来实现这一功能。
NameID
配置Active Directory中的Windows账户名为SAML断言中的
NameID
,其操作步骤如下。- 为信赖方编辑声明规则。
- 添加颁发转换规则。
说明 颁发转换规则(Issuance Transform Rules):指如何将一个已知的用户属性,经过转换后,颁发为SAML断言中的属性。由于我们要将用户在AD中的Windows账户名颁发为
NameID
,因此需要添加一个新的规则。 - 声明规则模版选择转换传入声明。
- 使用如下配置规则,并单击完成。
- 声明规则名称:NameID
- 传入声明类型:Windows账户名
- 传出声明类型:名称ID
- 传出名称ID格式:永久标识符
- 传递所有声明值:勾选
配置完成后,AD FS将发送阿里云需要的
NameID
格式。<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"> YourDomain\rolessouser </NameID>
RoleSessionName
配置Active Directory中的UPN为SAML断言中的
RoleSessionName
,其操作步骤如下。- 单击添加转换声明规则。
- 从声明规则模板中选择以声明方式发送LDAP特性。
- 使用如下配置规则,并单击完成。
- 声明规则名称:RoleSessionName
- 特性存储:Active Directory
- LDAP 特性列:User-Principal-Name(您也可以根据具体需求选择其他属性,例如email。)
- 传出声明类型:
https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
配置完成后,AD FS将发送阿里云需要的
RoleSessionName
格式。<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName"> <AttributeValue>rolessouser@example.com<AttributeValue> </Attribute>
Role
通过自定义规则将特定的用户所属组的信息转化成阿里云上的角色名称,其操作步骤如下。
- 单击添加转换声明规则。
- 从声明规则模板中选择使用自定义规则发送声明,单击下一步。
- 使用如下配置规则,并单击完成。
- 声明规则名称:Get AD Groups
- 自定义规则:
c:[Type =="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory",types = ("http://temp/variable"), query = ";tokenGroups;{0}", param =c.Value);
说明 这个规则获取用户在AD中所属组的信息,保存在中间变量http://temp/variable中。 - 单击添加转换声明规则。
- 重复以上步骤,并单击完成。
- 声明规则名称:Role
- 自定义规则:
c:[Type == "http://temp/variable", Value =~ "(?i)^Aliyun-([\d]+)"] => issue(Type = "https://www.aliyun.com/SAML-Role/Attributes/Role",Value = RegExReplace(c.Value, "Aliyun-([\d]+)-(.+)", "acs:ram::$1:role/$2,acs:ram::$1:saml-provider/<provider-name>"));
说明 <provider-name>为步骤一:在阿里云中将AD FS配置为可信SAML IdP中创建的身份提供商名称。本示例中为ADFS。
根据这个规则,如果用户所属的AD组中包含Aliyun-<account-id>-ADFS-Admin或Aliyun-<account-id>-ADFS-Reader,则将生成一个SAML属性,映射到阿里云上的角色ADFS-Admin或ADFS-Reader。
配置完成后,IdP将返回阿里云所需要的SAML断言片段,如下所示。
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role"> <AttributeValue>acs:ram::<account-id>:role/ADFS-Admin,acs:ram::<account-id>:saml-provider/<provider-name></AttributeValue> </Attribute>