【发布时间】:2011-10-15 20:01:04
【问题描述】:
好的,所以我对声明感知应用程序的整个世界都很陌生。我能够使用 Azure ACS 快速启动并运行,但在尝试使用 ADFS 2.0 作为身份提供者时情况有所不同(我实际上想将其用作联合提供者,但目前我'我只是试图让一个样本运行使用它作为身份提供者)。
我一直在查看the guides here 并尝试按照AD FS 2.0 Federation 以及其中列出的 WIF 应用程序分步指南指南进行操作。它会带您完成 ADFS 2.0 的设置以及一个小声明感知示例应用程序,您可以使用它来查看正在发送的声明。
所以我可以启动并运行它,通过指南中定义的声明(只是 Windows 帐户名称)。问题是当我尝试添加更多内容时。我可以转到 ADFS GUI 中的依赖方应用程序并使用 Pass Through 或 Filter Incoming Claim 规则模板添加一个颁发转换规则。但是,当我运行我的应用程序时,除非添加的声明类型是 Name,否则它不会将声明传递给我的应用程序。
我想要传递的其中一个是登录到应用程序的用户的电子邮件地址。所以我添加了一个规则来传递电子邮件地址,然后更新了示例应用程序的 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,进入 Relying Party Trusts 并在我的示例应用程序中选择 Update from Federation Metadata。因此,它现在将电子邮件列为已接受的声明之一。
然后,我进入 Claims Provider Trusts 并将电子邮件声明规则添加到 Active Directory 提供程序信任的接受转换规则中(仅列出一个)。
但是,当我运行该应用程序时,它并没有通过电子邮件声明(或我尝试的任何其他方法)。有人可以告诉我我在这里缺少什么吗?
我还应该注意,我运行了一个测试,将我的应用程序更改为仅接受电子邮件声明规则,它不仅没有通过电子邮件,而且仍然通过 Windows 帐户名称 和 名称 声明,尽管我什至没有将它们列为我的应用程序接受的声明。
如果有人能指出我在这里严重错误的地方,将不胜感激。
根据之前的博客文章启用日志记录后,以下是日志中的相关条目: 事件 ID 1000,“详细信息中包含调用主体的输入声明”:
所以你可以看到,我要求的信息很明显丢失了。我将日志输出设置为详细,但实际上没有任何其他兴趣。您将看到 NETWORK SERVICE 用户的跟踪记录(具有相同的声明集),但没有什么引人注目的。所有日志条目都是信息性的,没有任何错误。
【问题讨论】:
-
AD FS 2.0(它本身基于 WIF)有几个日志和跟踪选项;有关详细信息,请参阅blog post "Diagnostics in AD FS 2.0"。
-
谢谢 Marnix,我现在已经打开了详细日志记录,我将编辑我的问题以提供日志记录输出。
-
你解决过这个问题吗?我遇到了一个类似的问题,我的 LDAP 声明根本没有出现。