有没有将ASP.NET Windows身份验证与自定义IPrincipal / IIdentity对象相结合的好方法?我需要存储用户的电子邮件地址,并使用我在AuthenticateRequest事件期间添加到Context.CurrentUser的自定义IIdentity / IPrincipal对进行表单身份验证。
我最好如何使用WindowsAuthentication完成此任务?
答案 0 :(得分:3)
也许您可以将“ExtendedWindowsPrincipal”创建为基于WindowsPrincipal的派生类,只需将您的额外数据添加到派生类中?
这样,您的ExtendedWindowsPrincipal仍然可以在需要WindowsPricinpal的任何地方被识别。
或者:因为您正在谈论使用Windows身份验证,您可能在Windows网络中 - 某处有Active Directory或用户数据库,您可以在其中查找您感兴趣的电子邮件地址而不是将其存储在校长?
马克
答案 1 :(得分:3)
我最终重构了我最初的解决方案来替换Principal而不是我最初想到的身份。替换身份证明很麻烦,因为我在创建新的扩展WindowsPrincipal的实例时遇到了安全问题。
public class ExtendedWindowsPrincipal : WindowsPrincipal
{
private readonly string _email;
public ExtendedWindowsPrincipal(WindowsIdentity ntIdentity,
string email) : base(ntIdentity)
{
_email = email;
}
public string Email
{
get { return _email; }
}
}
在我的身份验证模块中,我替换了HttpContext上的主体,如下所示:
var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity;
HttpContext.Current.User =
new ExtendedWindowsPrincipal(currentUser, userEmail);