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

具有自定义角色的ASP.NET MVC和Windows身份验证

发布时间:2020-12-15 22:56:37 所属栏目:asp.Net 来源:网络整理
导读:我试图在我的ASP.NET MVC2应用程序中实现 Windows身份验证. 我遵循官方文件建议的所有步骤: authentication mode="Windows" /authorization deny users="?" //authorization 我已经指定了NTLM身份验证.到现在为止还挺好.一切都很好 我想检查登录到我的数据
我试图在我的ASP.NET MVC2应用程序中实现 Windows身份验证.
我遵循官方文件建议的所有步骤:
<authentication mode="Windows" />

<authorization>
  <deny users="?" />
</authorization>

我已经指定了NTLM身份验证.到现在为止还挺好.一切都很好
我想检查登录到我的数据库的用户.
我想从我的表中获取角色,然后使用自定义属性来管理授权.
我不想使用会员和角色提供者.
我已经有我的表用户/角色到位,因为他们已被用于互联网应用程序(这是内部网应用程序).

在我的互联网应用程序中,我有一个用户输入数据的表单.表单发布到控制器,该控制器检查所有内容,并与登录用户的用户(和角色)一起创建Cookie.

在我的global.asax中,我已经陷入了AuthenticateRequest事件,在那里我读取了cookie,并创建了一个自定义的主体,我使用全部的应用来检查授权.

如何使用Windows身份验证实现?

解决方法

只需创建一个新的主体并将其分配给Global.asax中的用户和线程(或使用操作过滤器).
protected void Application_AuthenticateRequest(object sender,EventArgs args)
{
  if(HttpContext.Current != null)
  {
     String [] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name);

     GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity,roles);

     Thread.CurrentPrincipal = HttpContext.Current.User = principal;
  }
}

如果用户没有任何匹配的角色,则可以使用web.config authoirzation元素禁止应用使用它们:

<authorization>
  <allow roles="blah,whatever"/>
  <deny users="*"/>               
</authorization>

(编辑:李大同)

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

    推荐文章
      热点阅读