gpt4 book ai didi

asp.net-mvc-3 - 带有表单例份验证的 MVC3 中的简单授权

转载 作者:行者123 更新时间:2023-12-05 00:34:16 24 4
gpt4 key购买 nike

我正在尝试做 MVC3 中应该做的简单的事情。

我有一个应用程序,它使用表单例份验证通过第 3 方 SSO 对用户进行身份验证。 SSO 成功登录后,会回发到我的应用程序上的特定 Controller 操作。然后我调用FormsAuthentication.SetAuthCookie(user,false); .

我正在尝试实现某种程度的授权。简单地说,一个用户可以存在多个不同的角色,例如AdminDeveloper .某些 Controller 操作应该只对某些角色可用。用户所属角色的详细信息是通过调用另一个外部 API 获得的,该 API 返回一个简单的 JSON 响应指示。

理论上,在我设置 FormsAuthentication cookie 之后,这应该像这样简单:

string[] rolelist = GetRoleListForUserFromAPI(User.Identity.Name);
HttpContext.User = new GenericPrincipal(User.Identity, rolelist);

但是,我不能在调用 SetAuthCookie 后直接调用它。 , 因为 HttpContext.User在这一点上没有任何意义。

我可以尝试在每个请求上设置它,但是对我的应用程序的任何请求都意味着往返 API 调用。

到目前为止,我见过的最有前途的方法是创建一个自定义 Authorization 属性并覆盖 OnAuthorization做这样的事情:
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (<some way of checking if roles have already been set for this user, or role cache has timed out>)
{
string[] rolelist = GetRoleListForUserFromAPI(filterContext.HttpContext.User.Identity.Name);
filterContext.HttpContext.User = new GenericPrincipal(filterContext.HttpContext.User.Identity,rolelist);
}
}

然后我可以使用 [MyCustomAuthorization(Roles="Admin")]在 Controller Action 之前使魔术发生。

但是,我不知道如何检测当前的 HttpContext.User对象已经设置了它的角色,或者它是否是在某个时间之前设置的,并且需要另一个 API 行程。

最好的方法是什么?

最佳答案

另一种方法是将角色存储在 FormsAuthentcationTicket 的 UserData 属性中。这可以用逗号分隔的字符串来完成。

http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.formsauthenticationticket

然后在 AuthenticateRequest 方法上,您可以拉回票证,获取角色数据并使用通用主体将其分配给当前用户。

关于asp.net-mvc-3 - 带有表单例份验证的 MVC3 中的简单授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10949070/

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