MVC2 ::我如何*使用*自定义IIdentity类?

时间:2011-01-20 23:09:45

标签: security asp.net-mvc-2 authorization iprincipal iidentity

我正在尝试从网络服务存储一整套关于用户的信息。由于这是有关当前经过身份验证的用户的信息,我认为将该信息存储在自定义IIdentity实现中是有意义的。

自定义MagicMembershipProvider.GetUser(string id, bool userIsOnline)调用webservice并返回一个MagicMembershipUser实例,其中填充了所有字段(部门,电话号码,其他员工信息)。

自定义成员资格提供程序和自定义成员资格用户都可以正常工作。

强>

我一直试图用MVID2应用程序中的IIdentity,IPrincipal和Role授权来围绕安全程序流程 - 但我真的在这里苦苦挣扎并且可以使用一些指导。有一篇关于这些部分的文章,但关于整体的文章并不多。

修改

到目前为止,我最好的猜测是在IPrincipal User中分配HttpContext.Current.User

FormsAuthenticationService

1 个答案:

答案 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]属性装饰您的基本控制器。