7

好的,所以我对索赔感知应用程序的整个世界都很陌生。我能够使用 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 用户的跟踪记录(具有相同的声明集),但没有什么引人注目的。所有日志条目都是信息性的,没有任何错误。

4

2 回答 2

4

如果您使用 ADFS 作为身份提供者并希望它发出电子邮件声明,那么您必须使用将 LDAP 属性作为声明自定义声明规则访问 AD 作为属性存储并发出电子邮件声明。假设用户已经在某处进行了身份验证,则对传入的声明使用传递。在 Windows 身份验证的情况下,Windows 帐户名是从 Kerberos 令牌发出的,这就是为什么您必须通过它,但其他人必须发出。

于 2011-08-02T22:57:50.277 回答
2

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

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

于 2011-07-29T22:46:06.570 回答