我正在尝试从网络服务存储一整套关于用户的信息。由于这是有关当前经过身份验证的用户的信息,我认为将该信息存储在自定义IIdentity实现中是有意义的。
自定义MagicMembershipProvider.GetUser(string id, bool userIsOnline)
调用webservice并返回一个MagicMembershipUser
实例,其中填充了所有字段(部门,电话号码,其他员工信息)。
自定义成员资格提供程序和自定义成员资格用户都可以正常工作。
强>
我一直试图用MVID2应用程序中的IIdentity,IPrincipal和Role授权来围绕安全程序流程 - 但我真的在这里苦苦挣扎并且可以使用一些指导。有一篇关于这些部分的文章,但关于整体的文章并不多。
到目前为止,我最好的猜测是在IPrincipal User
中分配HttpContext.Current.User
:
FormsAuthenticationService
答案 0 :(得分:1)
将会员用户信息放入每个控制器可访问的IPrincipal User对象的最佳方法是什么?在哪里?
在自定义[Authorize]
过滤器实现中。您可以覆盖AuthorizeCore方法并调用基本方法,如果它返回true,则查询您的成员资格提供程序并将自定义魔术身份注入上下文。
示例:
public class MagicAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
var username = httpContext.User.Identity.Name;
var magicUser = _provider.GetUser(username, false) as MagicMembershipUser;
var identity = new MagicIdentity(username, magicUser);
var principal = new GenericPrincipal(identity, null);
httpContext.User = principal;
}
return isAuthorized;
}
}
现在剩下的就是使用[MagicAuthorize]
属性装饰您的基本控制器。