以下是设置身份验证的方式。 - 客户端浏览器将请求(下面的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);
我不知道我做错了什么。谁能发现我的问题?或者你能建议我应该在哪里看看吗?
感谢您的帮助!
答案 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转发它们。