ADFS集成

认证集成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
1
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
  • 完成后,在 “声明提供方信任” 列表中能看到新增的提供方配置。 选中新增的提供方,点击 “编辑声明规则”

  • 依次添加以下三个规则, 选择“自定义规则”, 分别输入以下代码

规则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);
1
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
1
2
3
  1. set-adfsclaimsprovidertrust 命令中 TargetName 参数为“声明提供方信任” 显示名称
  2. 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')
}
1
2
3
4
  • 修改后,继续更新: Set-AdfsWebTheme -TargetName newTheme -OnLoadScriptPath "C:\adfs-theme\script\onload.js"

  • 最后进行激活 Set-AdfsWebConfig -ActiveThemeName newTheme

  • 激活成功后,再次登录应用时,页面会自动选择IDaaS SAML IDP 方式进行登录。