好的,所以我对索赔感知应用程序的整个世界都很陌生。我能够使用 Azure ACS 快速启动并运行,但在尝试使用 ADFS 2.0 作为身份提供者时情况有所不同(我实际上想将其用作联合提供者,但目前我'我只是试图让一个样本运行使用它作为身份提供者)。
我一直在查看此处的指南,并尝试遵循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,进入依赖方信任并在我的示例应用程序上选择从联合元数据更新。因此,它现在将电子邮件列为已接受的声明之一。
然后,我进入声明提供者信任并将电子邮件声明规则添加到 Active Directory 提供者信任的接受转换规则中(仅列出一个)。
但是,当我运行该应用程序时,它不会通过电子邮件声明(或我尝试的任何其他方法)。有人可以告诉我我在这里缺少什么吗?
我还应该注意,我进行了测试以将我的应用程序更改为仅接受电子邮件声明规则,它不仅没有通过电子邮件,而且仍然通过Windows 帐户名称和名称声明,尽管事实上我什至没有将它们列为我的申请的已接受索赔。
如果有人能指出我在这里严重错误的地方,将不胜感激。
根据之前的博客文章启用日志记录后,以下是日志中的相关条目:
事件 ID 1000,“详细信息中包含调用主体的输入声明”:
所以你可以看到,我要求的信息很明显丢失了。我将日志输出设置为详细,但实际上没有任何其他兴趣。您将看到 NETWORK SERVICE 用户的跟踪记录(具有相同的声明集),但没有什么引人注目的。所有日志条目都是信息性的,没有任何错误。