我已经使用Microsoft的“本地”组织帐户身份验证机制创建了一个ASP.Net MVC 5站点。最终将其配置为指向我公司的ADFS基础结构。我找回了所有已配置的声明。但是,在运行时,ClaimsIdentity.Name为空白。这是因为ClaimsIdentity.NameClaimType默认情况下看起来是:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
但是,我希望我的ClaimsIdentity.Name映射到:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
根据Microsoft Docs的说法,在web.config中进行设置的位置位于securityTokenHandlers元素的Add元素内:
<system.identityModel>
<identityConfiguration>
<securityTokenHandlers>
<add>
<samlSecurityTokenRequirement>
<nameClaimType value=xs:string>
</nameClaimType>
</samlSecurityTokenRequirement>
</add>
</securityTokenHandlers>
</identityConfiguration>
</system.identityModel>
在我的ASP.Net MVC 5 web.config中,看起来唯一适用并通过智能感知检查的东西看起来像这样:
<system.identityModel>
<identityConfiguration>
<securityTokenHandlers>
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<samlSecurityTokenRequirement>
<nameClaimType value="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"/>
</samlSecurityTokenRequirement>
</add>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
</identityConfiguration>
</system.identityModel>
但是,这似乎没有作用。我的MVC应用仍然报告一个空的ClaimsIdentity.Name字段,并且ClaimsIdentity.NameClaimType仍然是:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
我的Web.Config应该如何将现有的声明映射到ClaimsIdentity.Name字段?
最佳答案
我发现使用以下securityTokenHandlers部分将我带到需要基于ADFS系统中的SAML 2.0有效负载的地方:
<securityTokenHandlers>
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove type="System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<samlSecurityTokenRequirement>
<nameClaimType value="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"/>
</samlSecurityTokenRequirement>
</add>
</securityTokenHandlers>
由于没有配置Saml令牌处理程序,因此我不确定使用默认的web.config如何使用声明。也许源代码中的某些内容会执行某些默认行为...