我正在尝试通过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
中注册它,并能够在我的控制器中访问它。
这肯定是可行的,问题是如何?
我希望这很清楚,并且有人可以帮助我。 非常感谢
答案 0 :(得分:1)
这是非常可行的。最简单的方法是在.NET Core中的OnAuthenticate
管道中添加一个行为类似于Configure()
的中间件。在这里,您将换出IPrincipal。请注意,这仅在Web应用程序设置为仅在IIS / IIS Express中与Windows身份验证一起运行时才有效。匿名身份验证会增加额外的开销。
如果您具有这种简单的Win auth设置,请在Startup.cs
方法的顶部附近放置它:
Configure(IApplicationBuilder app)
```