使用Windows身份验证时,向身份添加自定义声明

时间:2018-01-25 02:24:20

标签: asp.net-mvc windows-authentication

在.Net MVC应用程序中使用Windows身份验证时,我很难理解如何添加自定义声明。

这里的挑战是在登录时使用来自数据库的自定义声明来填充用户的身份,以避免每次我想检查自定义授权属性时都进行db调用。但是使用Windows身份验证使我感到困惑,因为没有登录方法可以放置填充角色的代码。

是否有方法可以覆盖或以其他方式挂钩到Windows身份验证登录过程?

2 个答案:

答案 0 :(得分:3)

.NET Core 2.0 中,您应该使用IClaimsTransformation。

例如:

public class CustomClaimsTransformer : IClaimsTransformation
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        ((ClaimsIdentity)principal.Identity)
          .AddClaim(new Claim(claim.Name, claim.Value)); //your values

        return Task.FromResult(principal);
    }
}

并将此代码添加到Startup.cs

...
services.AddMvc();

services.AddScoped<IClaimsTransformation,CustomClaimsTransformer>(); // Add this

我不知道如何在ASP.NET MVC中执行此操作:/。

这是我的第一个答案:)。

答案 1 :(得分:1)

Ondra的解决方案为我工作,但只是想提一下这篇文章,建议创建一个新的主体,以避免多次添加相同的声明,因为await HttpContext.AuthenticateAsync();可以在应用程序中多次调用,这可能触发{ {1}}要跑。

参考:https://brockallen.com/2017/08/30/beware-in-asp-net-core-2-0-claims-transformation-might-run-multiple-times