从 ADFS 3.0 获取声明并显示给 SAML 2.0 中的 Shibboleth 2.6 服务提供商 (SP)

Getting Claims from ADFS 3.0 and Displaying To Shibboleth 2.6 Service Provider (SP) in SAML 2.0

我正在尝试配置 Windows Server 2012 r2 ADFS 3.0 以将 NameID 发送到 Shibboleth 2.6 SAML 2.0 SP ,但我不断收到这些错误:

2016-11-15 10:07:07 WARN Shibboleth.AttributeResolver.Query [1]: can't attempt attribute query, either no NameID or no metadata to use
2016-11-15 10:07:07 INFO Shibboleth.SessionCache [1]: new session created: ID (_7e425978e43bc32c86393f518b26eb3e) IdP (https://c-adfs01.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml) Protocol(urn:oasis:names:tc:SAML:2.0:protocol) Address (192.168.50.131)

我知道这与从 ADFS IDP 传递 NameID 属性并在 中显示 nameID 有关Shibboleth SAML 2.0 SP.

我还读到你需要在ADFS IDP中设置一个规则来传递Email Address,并将Email address转换为NameID。我已经做到了,并且有这些规则:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");

但是,我观察到配置似乎只与 SAML 1.0 兼容,而不是 2.0(可能)。

所以,我继续添加名称属性。我尝试了 transientpersistentemailAddress,并尝试了 SAML 1.0SAML 2.0 配置。

<Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" id="NameID"/>
<Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" id="NameID"/>
<Attribute name="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" id="NameID"/>

问题:

那么,配置 ADFS IDP 以将 NameID 发送到 Shibboleth SP 并显示的正确方法是什么转到我的应用程序会话页面时的会话属性?

具体来说,我应该期望 Claim Rules 的正确输出是什么? Shibboleth attribute-map.xml 的 XML 配置应该是什么样的?

https://c-app01.contoso.com/Shibboleth.sso/Session

解法:

解决方案是 依赖方 的 "Issuance Transform Rules" 选项卡中创建两条规则。以下是要设置的规则:

  • 将规则添加到 将 LDAP 属性作为声明发送
  • 添加规则以转换传入声明

此外,确保允许所有用户访问颁发授权规则选项卡内。


说明:

添加规则以将 LDAP 属性作为声明发送:

  • 声明规则名称:电子邮件
  • 属性存储:Active Directory
  • LDAP 映射:电子邮件地址到电子邮件地址

这将映射电子邮件地址。

添加规则以转换传入声明:

  • 声明规则名称:EmailToNameID
  • 收到的声明类型:电子邮件地址
  • 传出声明类型:名称 ID
  • 传出名称 ID 格式:电子邮件
  • 确保选择 "Pass Through Claim Values"。

上面 "Transform An Incoming Claim" 的设置将为您提供以下声明规则:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");

之后,您可以像这样配置 attribute-map.xml

<Attribute name="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" id="Email"/> 

我的错误:

我发现我的 Claims Rules 中的每个设置都是正确的,除了 EmailEmailToNameID 的规则应该在 Issuance Transform Rules 依赖方的选项卡