ASP.NET MVC and Windows Authentication with custom roles

后端 未结 2 402
遇见更好的自我
遇见更好的自我 2020-12-02 11:22

I am trying to implement windows authentication in my ASP.NET MVC2 application. I\'ve followed all the steps suggested by the official documentation:



        
相关标签:
2条回答
  • 2020-12-02 12:12

    Just create a new principal and assign it to the user and thread in Global.asax (or use an action filter).

    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;
      }
    }
    

    If a user doesn't have any role that matches, they can be barred from the app using the web.config authoirzation element:

    <authorization>
      <allow roles="blah,whatever"/>
      <deny users="*"/>               
    </authorization>
    
    0 讨论(0)
  • 2020-12-02 12:29

    Just to add to the above answer, Hope this save some fokes some time.

    I have a intranet MVC 5 site with VS 2015.

    The code did not work for me until the top line was updated with HttpContext.Current.User. The site was giving me null reference to the HttpContext.Current.User if the user wasn't already created in the Database. By adding .User to the first line, it bypassed that code on first load and worked.

    if (HttpContext.Current.User != null)
            {
    
    
                String[] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name);
    
                GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles);
    
                Thread.CurrentPrincipal = HttpContext.Current.User = principal;
            }
    
    0 讨论(0)
提交回复
热议问题