首页 文章

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

提问于
浏览
6

好的,所以我对索赔感知应用程序的整个世界都很陌生 . 我能够使用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 . 但是,当我运行我的应用程序时,除非添加的声明类型是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帐户名称和名称声明,尽管事实是我甚至没有将它们列为我申请的可接受的索赔 .

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

按照之前的博客文章启用日志记录后,以下是日志中的相关条目:
TraceRecord
事件ID 1000,"Input claims of calling principal included in details":
Input claims log entry

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

2 回答

  • 3

    如果您使用ADFS作为身份提供程序并希望它发出电子邮件声明,则必须使用 Send LDAP Attributes as ClaimsCustom Claim Rule 来访问AD作为属性存储并发出电子邮件声明 . 假设用户已经在某处进行了身份验证,则会在传入的声明中使用传递 . 在Windows身份验证的情况下 Windows account name 是从Kerberos令牌发出的,这就是你必须通过它的原因,但是你必须发布其他人 .

  • 2

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

    在类似于你的情况下,我不得不做类似的事情让UPN声称过来 . 我不确定LDAP属性是否可能是复数 .

相关问题