默认情况下哪个ADFS声明映射到Identity.Name?

时间:2018-02-01 13:56:28

标签: asp.net .net authentication adfs

最近ADFS是否更改了upn如何映射到ASP.NET中的User.Identity.Name

我所知道的:

  • 通过ADFS从外部进行身份验证的ASP.NET Web应用程序
  • 测试环境工作正常,几个月前在ADFS中未定义传出Name声明
  • 最近启动了测试环境,ADFS登录失败。 ADFS服务器没有任何配置更改
  • 问题是即使User.Identity.Namenull
  • Request.IsAuthenticated仍为true
  • 根本原因是没有Name声明,并且web.config中似乎没有显式映射可以使用upn来实现此目的

来自Microsoft:

https://msdn.microsoft.com/en-us/library/mt740689(v=vs.85).aspx

  

将有效的安全令牌传递给AD FS Web代理时   创建会话cookie并将令牌的声明处理到   会话的用户对象。该对象源自IPrincipal,和   公开一个方法,IsInRole(),您可以使用它来查询用户和   确定该用户是否断言指定的角色声明(使用   用于指定角色的字符串。)

     

IPrincipal还公开了一个属性,即返回的属性   用户的身份,表示为IIdentity对象。这个对象可以   default.aspx页面用于确定用户是否   经过身份验证(通过调用IsAuthenticated()。它也允许您   通过访问来确定用户是否声明了名称声明   Name属性,返回表示用户名的字符串。   这里的片段说明了这两种技术的使用。

我对此有疑问,我在Microsoft文档中找不到:

  1. 具体含义(如:用户声明名称声明中的xml属性或特定ADFS声明字符串)? (这是不明确的:它是“名称”声明吗?因为它更像“名称声明”,其中“名称”可以松散地定义为用户名,并且通常upn用于此,并且正在使用过去)
  2. 在ADFS中使用基于配置的标识(在web.config中定义)时,.NET用于设置User.Identity.Name的确切逻辑是什么?

1 个答案:

答案 0 :(得分:1)

AFAIK,这个“名称”逻辑在最新版本的框架中没有改变。 正如here所解释的那样,默认情况下,用于填充Identity.Name属性的声明类型始终为: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

因此,如果您的SAML令牌包含此类声明,则它将用作用户的“名称”(由您决定要在此声明中添加哪个AD属性:userPrincipalName,displayName,mail ,. ..)。

可以在代码或web.config中覆盖此默认属性。 This page提到了一个“<nameClaimType />”元素,说实话,我不记得它是否在此期间发生了变化。 一个 注意:您的链接真的很旧。 “ADFS Web Agent”来自ADFS的第一个版本,但它被WIF迅速取代。