Функция диспетчера ролей ASP.NET не включена - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь создать подпрограмму на главной странице моего asp.net, которая будет проверять, является ли текущий пользователь членом группы домена Windows. Сайт размещен в IIS и виден через нашу интрасеть.

GlenFerrieLive перечислил этот код (который я хотел бы использовать) в предыдущем посте:

    UserName = System.Environment.UserName

    If Roles.IsUserInRole(UserName, "MyDomain\MyGroup") Then
        Dim UserExists As Boolean = True
    End If

При попытке этого кода я получил вышеупомянутую ошибку. Поэтому я подключил тег roleManager в моем файле Web.config так:

<roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="ActiveDirectoryMembershipProvider" cookieName=".ASPXROLES" cookiePath="/" cookieTimeout="480" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All" />

Проблема в том, что теперь я получаю сообщение об ошибке «Не удалось найти поставщика ролей по умолчанию».

Как я могу обойти это? Мне просто нужно посмотреть, существует ли текущий пользователь в определенной доменной группе.

Любая помощь будет принята с благодарностью.

Спасибо

Jason

Ответы [ 2 ]

1 голос
/ 07 июля 2011

В итоге я использовал это:

Private Function ValidateActiveDirectoryLogin(ByVal Domain As String, ByVal Username As String, ByVal Password As String) As Boolean
    Dim Success As Boolean = False
    Dim Entry As New System.DirectoryServices.DirectoryEntry("LDAP://" & Domain, Username, Password)
    Dim Searcher As New System.DirectoryServices.DirectorySearcher(Entry)
    Searcher.SearchScope = DirectoryServices.SearchScope.OneLevel
    Try
        Dim Results As System.DirectoryServices.SearchResult = Searcher.FindOne
        Success = Not (Results Is Nothing)
    Catch
        Success = False
    End Try
    Return Success
End Function 

Работал как шарм, когда это было в моем web.config:

    <authentication mode="Windows"/>

    <roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="AspNetWindowsTokenRoleProvider" cookieName=".ASPXROLES" cookiePath="/" cookieTimeout="480" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All" />
1 голос
/ 07 июля 2011

Загляните на эту страницу: http://msdn.microsoft.com/en-us/library/ff648345.aspx

Вам нужно что-то подобное в вашем webconfig, указав, где поставщик роли по умолчанию указывает на

<connectionStrings>
  <add name="ADConnectionString" 
   connectionString=
    "LDAP://domain.testing.com/CN=Users,DC=domain,DC=testing,DC=com" />
</connectionStrings>

<system.web>
 ...
 <membership defaultProvider="MembershipADProvider">
  <providers>
    <add
      name="MembershipADProvider"
      type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, 
            Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                connectionStringName="ADConnectionString" 
                connectionUsername="<domainName>\administrator" 
                connectionPassword="password"/>
   </providers>
 </membership>
 ...
</system.web>
...