2013-06-04 51 views
1

我有一个互联网应用程序,连接用户与Windows身份验证,当用户来到办公室和登录到Windows会话(与AD信息),他们自动登录到Web应用程序,我用Windows authentication为了达成这个。Windows身份验证和SQLRoleProvider MVC3

所以当我使用@User.Identity.Name它显示用户名。现在,如果我想要做的用户名类似Roles.AddUserToRole(username, "RoleName");它抛出一个异常The user 'Domain\user' was not found.

我的观点:

@using (Html.BeginForm("AddToRH", "Account", FormMethod.Post)) 
{ 
<div class="form_settings"> 
    <p> 
     <span> 
      @User.Identity.Name 
      @Html.Label("Username") : 
     </span> 
     @Html.Editor("username") 

    </p> 
    <p style="padding-top: 15px"> 
     <span>&nbsp;</span> 
     <input type="submit" value="Enregister" class="submit" /> 
    </p> 
</div> 
} 

我的控制器:

public ActionResult AddToRH(string username) { 
     string[] roles = Roles.GetAllRoles(); 
     Boolean contains = false; 
     foreach (string role in roles) 
     { 
      if(role.Equals("RoleName")){ 
       contains=true; 
      } 
     } 
     if (!contains) { 
      Roles.CreateRole("RoleName"); 
     }    
     Roles.AddUserToRole(username, "RoleName"); 
     return RedirectToAction("Index","Home"); 
    } 

我的web.config:

<authentication mode="Windows"> 

</authentication> 
    <membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/> 
    </providers> 
</membership> 

回答

0

错误在于会员的提供者。

类型:

System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"` 

默认情况下,该项目产生的,并没有使用dbo.aspnet_X表。这就是为什么我认为我无法检索用户。

这是一篇文章,对我帮助很大:

http://weblogs.asp.net/scottgu/pages/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx

变化也是其他提供商:对于角色我用SQLRoleProvider这样的类型是:System.Web.Security.SqlRoleProvider和配置文件我用:type="System.Web.Security.SqlProfileProvider"