【发布时间】:2015-10-15 14:05:57
【问题描述】:
我想在身份验证期间向 Principal 添加一些额外的声明。我正在尝试在使用 Windows 身份验证的 MVC 4.5 项目中实现自定义 ClaimsAuthenticationManager:
namespace Project.Infrastructure
{
public class ClaimsTransformer : ClaimsAuthenticationManager
{
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
{
((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim(ClaimTypes.Role, "Admin"));
}
return incomingPrincipal;
}
}
}
我已将 web.config 设置为使用我的自定义类:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</configSections>
和
<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="Project.Infrastructure.ClaimsTransformer, [AssemblyName]" />
</identityConfiguration>
</system.identityModel>
但是 Authenticate 方法永远不会被调用。我错过了什么吗?
【问题讨论】:
-
您是否已将索赔授权模块添加到您的 .config 中?
-
不,我没有自定义授权。我的理解是两者是分开的和不同的,一个不依赖于另一个。这不正确吗?
标签: c# asp.net-mvc asp.net-mvc-4 wif claims-based-identity