ADFS不传递NameID

时间:2015-05-27 15:42:41

标签: adfs2.0

以下是设置身份验证的方式。 - 客户端浏览器将请求(下面的URL)发送到客户端的ADFS服务器, - 客户端ADFS然后查看嵌套的中继状态并将请求转发到我们的ADFS服务器。 - 我们的ADFS查看请求并将请求发送到我们的APP。

网址就在这里。

https://clientadfs.clientdomain.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=RPID%3Dhttps%3A%2F%2ouradfs.ourdomain.com%2Fadfs%2Fls%2F%26RelayState%3DRPID%3Dhttps%3A%2F%2ourapp.ourdomain.com%2Fvaruna%2Fconsole%2Fsso.aspx%3FsamISso%26lang%3Den_CA

请求会在ADFS服务器上生成一个没有错误的空白页。

我得到了小提琴手跟踪客户端。客户使用用户的电子邮件地址来识别用户。我可以在SAML令牌中看到发送给客户端的ADFS有这个电子邮件地址。 此SAML令牌转到我们的ADFS服务器,我看到来自ADFS服务器的SAML响应。但是,这没有用户电子邮件地址。我认为这就是问题。

在我们的ADFS服务器上,我有此客户的声明(在声明提供商信任上)来处理用户ID(这是他们的电子邮件):

声明规则名称:电子邮件 传入声明类型:名称ID 传入的名称ID格式:电子邮件 传出的名称ID格式:电子邮件 通过所有索赔值。

以下是“声明规则语言”中的声明

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

在客户端的ADFS配置中,这是他们的电子邮件/用户ID配置:

IssuanceTransformRules               : @RuleTemplate = "LdapClaims"
                                       @RuleName = "Pass email"
                                       c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccou
                                       ntname", Issuer == "AD AUTHORITY"]
                                        => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/20
                                       05/05/identity/claims/nameidentifier"), query = ";mail;{0}", param = c.Value);

我不知道我做错了什么。谁能发现我的问题?或者你能建议我应该在哪里看看吗?

感谢您的帮助!

  • RM

1 个答案:

答案 0 :(得分:4)

“处理用户ID(这是他们的电子邮件)”

SAML断言是针对某种类型的电子邮件还是针对某种类型的用户ID的断言?即该属性的断言名称是什么。

在ADFS方面。要转换电子邮件声明,它需要一种“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

<强>更新

您需要将NameId转换为电子邮件。 NameId还有一个“输入名称ID格式”,我猜是“电子邮件”。您需要在SAML元数据中验证这一点。

因此,您的声明规则应如下所示:

  

c:[Type ==   “http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”,   属性[ “http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format”]   ==“urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress”] =&gt;问题(Type =   “http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress”,   Issuer = c.Issuer,OriginalIssuer = c.OriginalIssuer,Value = c.Value,   ValueType = c.ValueType);

更新1

ADFS支持:

<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>

因此格式可以是emailAddress,持久性或瞬态。

尝试使用所有三种格式的转换规则,并参阅。

此外,您的申请是什么声明?您可以通过How to: Access Claims in an ASP.NET Page转发它们。