使用Windows身份验证扩展.NET Core 2.1中的IPrincipal

时间:2018-12-06 17:14:38

标签: c# .net-core windows-authentication

我正在尝试通过Windows身份验证在.NET Core中扩展IPrincipal

Application_Start()的上一个项目(使用.NET Framework 4.6.1)中,我添加了以下代码以扩展IPrincipal

protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (e.Identity != null && e.Identity.IsAuthenticated)
    {
        NgUser opPrincipal = CustomStaticMethod.GetUserAD();
        HttpContext.Current.User = opPrincipal;
     }
 }

这是我的自定义课程

public class NgUser : IPrincipal
{
    // code removed for abbr ...
}

然后每次在将HttpContext.Current.User转换为CustomPrincipal的控制器中,我都可以访问自定义属性,而不必使用声明或使用静态扩展或在会话中存储对象。

现在,在.NET Core中,我已经看到您可以customize claims transformation,并且我还阅读了this,它们基本上扩展了IPrincipal

我希望用自定义类扩展IPrincipal,在Startup.cs中注册它,并能够在我的控制器中访问它。

这肯定是可行的,问题是如何?

我希望这很清楚,并且有人可以帮助我。 非常感谢

1 个答案:

答案 0 :(得分:1)

这是非常可行的。最简单的方法是在.NET Core中的OnAuthenticate管道中添加一个行为类似于Configure()的中间件。在这里,您将换出IPrincipal。请注意,这仅在Web应用程序设置为仅在IIS / IIS Express中与Windows身份验证一起运行时才有效。匿名身份验证会增加额外的开销。

如果您具有这种简单的Win auth设置,请在Startup.cs方法的顶部附近放置它:

Configure(IApplicationBuilder app)

```