好的,所以我对索赔感知应用程序的整个世界都很陌生。我能够使用Azure ACS快速启动和运行,但尝试使用ADFS 2.0作为身份提供程序时,情况有点不同(我想将其实际用作联合提供程序,但暂时我我只是试图让一个样本运行使用它作为身份提供者。)
我一直在关注the guides here,并尝试按照 AD FS 2.0联盟的WIF应用程序循序渐进指南指南进行操作。它将指导您设置ADFS 2.0以及一些声明感知的示例应用程序,您只需查看已发送的声明即可。
所以我可以启动并运行,通过指南中定义的声明(只是Windows帐户名称)。问题是当我尝试添加更多。我可以使用 Pass Through或Filter Incoming Claim 规则模板转到ADFS GUI中的依赖方应用程序并添加Issuance Transform Rule。但是,当我运行我的应用程序时,除非添加的声明类型是名称,否则它不会将声明传递给我的应用程序。
我想要传递的其中一个是登录到应用程序的用户的电子邮件地址。所以我添加了一条规则来传递电子邮件地址,然后更新示例应用程序的web.config以取消注释 claimTypeRequired 部分下的这一行:
<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="false" />
请注意,我将其设置为非可选。我还更新了要添加的应用程序的联合元数据,如下所示:
<auth:ClaimType Uri="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" Optional="false" xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
然后我进入ADFS GUI,转到依赖方信任并在我的示例应用程序中选择了
然后我进入声明提供商信任并将电子邮件声明规则添加到Active Directory提供商信任的接受转换规则中(列出的唯一信任规则)。
但是,当我运行应用程序时,它并未通过电子邮件声明(或我尝试的任何其他声明)。有人能告诉我我在这里缺少什么吗?
我还应该注意,我运行了一项测试,将我的应用程序更改为仅接受电子邮件声明规则,并且它不仅没有通过电子邮件,而且仍然通过 Windows帐户名称和名称声明,尽管我甚至没有将它们列为我的申请的已接受声明。
如果有人能指出我在这里发生严重错误的地方,我们将非常感激。
按照之前的博客文章启用日志记录后,以下是日志中的相关条目: 事件ID 1000,“输入详细信息中包含的主叫索赔”:
所以你可以看到,我要求的信息很明显丢失了。我将日志记录输出设置为详细,但实际上没有其他任何兴趣。您将看到NETWORK SERVICE用户的跟踪记录(具有相同的声明集),但没有什么引人注目的。所有日志条目都是信息性的,没有任何错误。
答案 0 :(得分:3)
如果您使用ADFS作为身份提供商并希望它发出电子邮件声明,那么您必须使用发送LDAP属性作为声明或自定义声明规则进行访问AD作为属性存储并发出电子邮件声明。假设用户已经在某处进行了身份验证,则会在传入的声明中使用传递。在Windows身份验证的情况下,从Kerberos令牌发出 Windows帐户名,这就是您必须通过它的原因,但是您必须发布其他人。
答案 1 :(得分:2)
Active Directory是否会发出电子邮件地址声明?我不知道如何检查这一点,但如果没有,那么你将它们传递给我们是无关紧要的。在这种情况下,您将要尝试“将LDAP属性作为声明发送”规则;根据我在ADFS实例中看到的内容,尝试将“电子邮件地址”属性映射到“电子邮件地址”声明。
在类似于你的情况下,我必须做类似的事情让UPN声称过来。我不确定LDAP属性是否可能是复数。