我正在创建一个 MVC Intranet 应用程序,并使用基于自定义角色的通用主体对象进行身份验证。
我的问题是如何跨请求保留通用主体对象。我正在使用下面的代码。但是我需要为每个用户请求执行以下代码,因为没有机制可以跨请求保留用户角色。请注意,我不喜欢在我的 MVC 项目中使用 session。
private GenericPrincipal GetGenericPrincipal()
{
// Use values from the current WindowsIdentity to construct
// a set of GenericPrincipal roles.
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
// Construct a GenericIdentity object based on the current Windows
// identity name and authentication type.
string authenticationType = windowsIdentity.AuthenticationType;
string userName = windowsIdentity.Name;
GenericIdentity genericIdentity =
new GenericIdentity(userName, authenticationType);
// Construct a GenericPrincipal object based on the generic identity
// and custom roles for the user.
GenericPrincipal genericPrincipal =
new GenericPrincipal(genericIdentity, GetUserRoles(userName));
return genericPrincipal;
}
}
HttpContext.Current.User = Thread.CurrentPrincipal = GetGenericPrincipal();