声明未在ADFS 2.0中传递给依赖方

jac*_*ida 6 wif adfs2.0

好的,所以我对索赔感知应用程序的整个世界都很陌生.我能够使用Azure ACS快速启动和运行,但在尝试使用ADFS 2.0作为身份提供程序时,它有点不同(我想将其实际用作联合提供程序,但暂时我我只是试图使用它作为身份提供者来运行样本.

我一直在查看这里的指南,并试图遵循AD FS 2.0联盟,其中列出了WIF应用程序循序渐进指南.它将指导您完成设置ADFS 2.0以及一些声明感知的示例应用程序,您只需查看正在发送的声明即可.

所以我可以启动并运行,通过指南中定义的声明(只是Windows帐户名称).问题是当我尝试添加更多.我可以使用Pass Through或Filter Incoming Claim规则模板转到ADFS GUI中的依赖方应用程序并添加Issuance Transform Rule .但是,当我运行我的应用程序时,除非添加的声明类型是Name,否则它不会将声明传递给我的应用程序.

我想要传递的其中一个是登录到应用程序的用户的电子邮件地址.所以我添加了一个规则来传递电子邮件地址,然后更新示例应用程序的web.config以取消注释claimTypeRequired部分下的这一行:

<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="false" />
Run Code Online (Sandbox Code Playgroud)

请注意,我将其设置为非可选.我还更新了要添加的应用程序的联合元数据,如下所示:

<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" />
Run Code Online (Sandbox Code Playgroud)

然后我进入ADFS GUI,转到依赖方信任,我的示例应用程序中选择了联邦元数据更新.因此,它现在将电子邮件列为已接受的声明之一.

然后,我进入了声明提供程序信任,并将电子邮件声明规则添加到Active Directory提供程序信任的接受转换规则中(列出的唯一一个).

但是,当我运行应用程序时,它没有通过电子邮件声明(或我尝试的任何其他声明).谁能告诉我我在这里失踪了什么?

我还应该注意,我运行了一项测试,将我的应用程序更改为接受电子邮件声明规则,不仅没有通过电子邮件,而且它仍然通过Windows帐户名称名称声明,尽管事实是我甚至没有将它们列为我申请的可接受的索赔.

如果有人能指出我在这里发生严重错误的地方,那将非常感激.

根据之前的博客文章启用日志记录后,以下是日志中的相关条目: TraceRecord 事件ID 1000,"输入详细信息中包含的主叫索赔": 输入索赔日志条目

所以你可以看到,我要求的信息显然已经丢失了.我将日志记录输出设置为详细,但实际上没有其他任何兴趣.您将看到NETWORK SERVICE用户的跟踪记录(具有相同的声明集),但没有什么引人注目的.所有日志条目都是信息性的,没有任何错误.

小智 2

Active Directory 是否会发出电子邮件地址声明?我不知道如何检查这一点,但如果没有,那么您传递它们就无关紧要了。在这种情况下,您需要尝试“发送 LDAP 属性作为声明”规则;根据我在 ADFS 实例中看到的内容,尝试将“电子邮件地址”属性映射到“电子邮件地址”声明。

在与您类似的情况下,我必须做类似的事情才能让 UPN 索赔成功。我不确定 LDAP 属性可能是复数是否重要。