加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 使用表单身份验证的MVC3中的简单授权

发布时间:2020-12-16 06:47:32 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试做MVC3中应该是一件简单的事情. 我有一个应用程序,它使用表单身份验证来通过第三方SSO对用户进行身份验证.成功登录后,SSO会回复我的应用程序上的特定控制器操作.然后我调用FormsAuthentication.SetAuthCookie(user,false);. 我正在尝试实施某种程
我正在尝试做MVC3中应该是一件简单的事情.

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

我正在尝试实施某种程度的授权.简单地说,用户可以存在许多不同的角色,例如管理员和开发者.某些控制器操作应仅适用于某些角色.通过调用另一个外部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”)]来实现魔术.

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

对此最好的方法是什么?

解决方法

我的第一个想法是你应该调查实现自定义角色提供程序.这可能是矫枉过正,但似乎适合基于角色的管道.

来自MSDN here的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读