L'Authentification Windows avec des Groupes Active Directory

J'ai un petit projet, construit à l'aide de Visual Studio 2013, .NET 4.5, MVC 5, et EF 6. Je l'ai créé à l'aide de l'authentification Windows, mais maintenant, j'ai besoin de vérifier l'appartenance à un groupe Active Directory pour permettre ou refuser l'accès.

Je suis allé vers le bas beaucoup de TRÈS profonds trous de lapins, de tenter de trouver comment faire cela. Au début je pensais que j'aurais besoin de modifier le projet pour l'utilisation "À la Place de l'authentification". Cependant, j'ai trouvé que:

  1. Là, apparemment, n'est-ce pas une façon de VS 2013 pour modifier le type d'authentification d'un projet (autre que de modifier manuellement certains fichiers).
  2. Il n'y a pas de documentation encore expliquer comment le programme d'installation "À la Place de l'authentification". (Vraiment? Comment est-ce possible?)
  3. En tout cas, ce dont j'ai besoin n'est pas "Sur place" authentification à tous, puisque c'est seulement pour Windows Identity Federation services (ou quelque chose comme ça). Ce que je devrait utiliser au lieu de cela est juste l'Authentification Windows avec ASP.Net les rôles, les Fenêtres qui obtient apparemment de groupes Active Directory lorsque je me connecter.

Donc, en supposant que le numéro 3 est vrai, j'ai essayé la lecture de nombreux posts à ce sujet, mais ils semblent se répartissent en deux groupes de base:

  1. Simple, des méthodes simples, que je ne peux pas aller au travail, sans doute parce qu'il suppose quelques connaissances que je n'ai pas.
  2. Complexe, code personnalisé méthodes, ce qui je pense sont en train de faire via le code ce qui peut probablement être fait dans un code sans méthode.

En supposant que n ° 1 est le chemin à parcourir, voici ma plus récente tentative.

Dans mon contrôleur, j'ai:

[Authorize(Roles=@"SomeDomain\\SomeGroup")]
public class SomeController : Controller

Dans mon Web.fichier de config, j'ai:

  <system.web>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
      <providers>
        <clear/>
        <add name="AspNetWindowsTokenRoleProvider"
             type="System.Web.Security.WindowsTokenRoleProvider"
             applicationName="/" />
      </providers>
    </roleManager>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BehaviorConfiguration">
          <serviceAuthorization
               principalPermissionMode="UseAspNetRoles"
               roleProviderName="AspNetWindowsTokenRoleProvider" />
          <serviceMetadata />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Lorsque j'essaie d'accéder à la page, je suis plutôt invité à vous connecter. Après avoir entré mon login et mot de passe, je continue de recevoir l'invite de connexion. Je ne suis pas autorisé à accéder à la page.

Je n'ai rien nulle part raconter ma demande où le serveur Active Directory est, mais l'impression que je reçois est que Windows sait déjà que (depuis, lorsque je me connecte à Windows, il accède au serveur Active Directory pour authentifier moi).

Suis-je raté quelque chose? Ou je me trompe en supposant que cela peut être fait sans avoir à écrire du code personnalisé?

Mise en garde: je suis assez nouveau .NET, MVC, etc, venus du monde Java, donc il faut les utiliser de petits mots. 🙂

Vous devriez vérifier cette question. C'est probablement pour une version antérieure de la mvc, mais l'Authentification Windows n'a pas changé de temps en temps. stackoverflow.com/questions/13767439/...
J'avais regardé ce post plus tôt, et en fonction beaucoup de ce que j'ai essayé sur elle, mais il ne fonctionnait pas. Je viens de trouvé ce que j'avais fait de mal, cependant. Dans l'attribut dans mon contrôleur, j'avais 2 barres obliques inverses entre le nom de domaine et le nom du rôle, plutôt qu'un seul. J'ai donc eu: [Authorize(Roles=@"SomeDomain\\SomeGroup")] au lieu de [Authorize(Roles=@"SomeDomain\SomeGroup")] Doh!

OriginalL'auteur Wally Hartshorn | 2014-02-11