gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:11:45 25 4
gpt4 key购买 nike

我正在尝试从网络服务中存储有关用户的一整车信息。由于这是有关当前经过身份验证的用户的信息,我认为将这些信息存储在自定义 IIdentity 实现中是有意义的。
定制MagicMembershipProvider.GetUser(string id, bool userIsOnline)调用 web 服务并返回 MagicMembershipUser填充了所有字段(部门、电话号码、其他员工信息)的实例。
自定义成员(member)提供者和自定义成员(member)用户都可以正常工作。
将成员(member)用户信息放入 IPrincipal User 的最佳方法是什么以及在哪里?每个 Controller 都可以访问的对象?
我一直在尝试用 MVC2 应用程序中的 IIdentity、IPrincipal 和 Role 授权来围绕安全程序流进行思考——但我在这里真的很挣扎,可以使用一些指导。互联网上有大量关于部分的文章,但关于整体的文章不多。
编辑
到目前为止,我最好的猜测是分配 HttpContext.Current.UserFormsAuthenticationService :

public void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName))
throw new ArgumentException("Value cannot be null or empty.", "userName");

try
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
MagicMembershipUser magicUser = _provider.GetUser("", false)
as MagicMembershipUser;
MagicIdentity identity = new MagicIdentity(userName, magicUser);
GenericPrincipal principal = new GenericPrincipal(identity, null);

HttpContext.Current.User = principal;
}
catch (Exception)
{
throw;
}

}

最佳答案

What and where is the best way to put the membership user information into the IPrincipal User object that is accessible in every controller?



在自定义 [Authorize] 过滤器实现。您可以覆盖 AuthorizeCore方法并调用基本方法,如果它返回 true,则查询您的成员资格提供程序并将自定义魔术身份注入(inject)上下文。

例子:
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] 装饰你的基本 Controller 。属性。

关于security - MVC2::我如何*使用*自定义 IIdentity 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com