ADFS集成
# 说明
文档主要说明IDaaS如何接入ADFS, 实现访问ADFS集成的应用时,通过IDaaS统一登陆
# 前提条件
- 客户侧已完成应用和ADFS集成,已经实现访问应用时跳转到ADFS登录页面
# 集成概要说明
- IDaaS 添加SAML认证协议应用, 用于ADFS认证
- ADFS 添加声明提供方信任,用于IDaaS认证
- 分别在IDaaS及ADFS中配置映射匹配规则
- 集成测试
# 详细步骤说明
# IDaaS 操作
- 登录IDaaS企业控制台,新建应用,开启 SAML 认证集成,导入ADFS提供的SP元数据文件
ADFS sp元数据文件下载地址, 注意contoso.com为你的adfs域名
https://contoso.com/federationmetadata/2007-06/federationmetadata.xml
2
- 映射配置修改,默认 userName 映射为用户名,可根据真实场景设置指定的属性值
- 授权管理,基于用户策略或者授权策略添加应用账号
- 访问【设置-服务配置-IDP配置】,点击下载IDP元数据并保存,后续在ADFS操作中需要使用
# ADFS 操作
打开ADFS控制台,选择 “声明提供方信任”, 操作中点击 “添加声明提供方信任”
欢迎使用向导中点击启动,选择数据源中,选择“从文件导入有关声明提供方的数据”, 选择IDaaS中下载的IDP元数据文件后,点击下一步
输入显示名称,例如:IDaaS SAML IDP, 点击下一步,在准备好添加信任中可以查看元数据的信息,直接点击下一步。完成配置
添加“声明提供方信任”也可通过命令执行, 与上面效果一致
Add-AdfsClaimsProviderTrust -Name "IDaaS SAML IDP" -ProtocolProfile "SAML" -MetadataFile "C:\IDPMetadata.xml"
完成后,在 “声明提供方信任” 列表中能看到新增的提供方配置。 选中新增的提供方,点击 “编辑声明规则”
依次添加以下三个规则, 选择“自定义规则”, 分别输入以下代码
规则1: 注意 Value 中的 “DOMAIN” 需要替换成客户AD域, 该代码含义为通过SAML断言中返回的 userName 值拼接 DOMAIN
c:[Type == "userName"]
=> issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer = "AD AUTHORITY", OriginalIssuer = "AD AUTHORITY", Value = "DOMAIN\" + c.Value, ValueType = c.ValueType);
规则2:通过规则1中拼接的值 通过 query 查询条件,到AD中查找用户upn
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"), query = ";userPrincipalName;{0}", param = c.Value);
规则3:通过 query 查询条件查找AD用户的SID
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = ";objectSID;{0}", param = c.Value);
2
3
4
5
6
7
8
9
10
11
- 到此,IDaaS 与 ADFS 的SAML互信配置已完成。
# 验证
访问ADFS集成应用,该应用跳转到ADFS认证,ADFS登录页面显示两种登录方式,AD账密登录,以及配置的 IDaaS SAML IDP 登录方式
选择 IDaaS SAML IDP 登录方式, 跳转到IDaaS 登录页面, 登录成功后,重定向返回应用,登录成功
如果IDaaS登录成功后,没有成功跳转应用,可能需要执行以下脚本
set-adfsclaimsprovidertrust -TargetName "IDaaS SAML IDP" -AnchorClaimType "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"
get-adfsclaimsprovidertrust
2
3
- set-adfsclaimsprovidertrust 命令中 TargetName 参数为“声明提供方信任” 显示名称
- get-adfsclaimsprovidertrust 可以查看 是否添加成功
# 默认IDaaS登录(扩展)
如需要隐藏ADFS登录选择页面, 实现默认采用IDaaS登录。 可通过以下操作实现
- 在 ADFS 服务器上, 针对登录页面主题的修改流程
New-AdfsWebTheme -Name "newTheme" -SourceName default
新建一个目录,例如 c:\adfs-theme 后执行, 将新的web主题文件导出到改目录下 Export-AdfsWebTheme –Name newTheme –DirectoryPath c:\adfs-theme
在导出后的script 目录下,有onload.js 执行备份后再进行修改, 在底部新增以下代码 。(注意,以下代码中的 "https://domain.bccastle.com/api/ams/saml/idp" 和 申明中的标识符保持一致)
var myCheckHRD = document.getElementById('hrdArea') ;
if (myCheckHRD) {
HRD.selection('https://domain.bccastle.com/api/ams/saml/idp')
}
2
3
4
修改后,继续更新: Set-AdfsWebTheme -TargetName newTheme -OnLoadScriptPath "C:\adfs-theme\script\onload.js"
最后进行激活 Set-AdfsWebConfig -ActiveThemeName newTheme
激活成功后,再次登录应用时,页面会自动选择IDaaS SAML IDP 方式进行登录。