Windows-Authentifizierung mit Active Directory-Gruppen

Ich habe ein kleines Projekt, erstellt mit Visual Studio 2013, .NET 4.5, MVC 5 und EF-6. Ich habe es mithilfe der Windows-Authentifizierung, aber jetzt brauche ich, um zu überprüfen, für die Mitgliedschaft in einer Active Directory Gruppe erlauben oder verweigern den Zugang.

Ich gegangen bin, viele SEHR tief Kaninchen Löcher, die versuchen, um herauszufinden, wie dies zu tun. Zuerst ging ich davon aus, dass ich ändern müssen, das Projekt "On-Premises" - Authentifizierung. Ich habe jedoch festgestellt, dass:

  1. Es anscheinend nicht möglich ist, in VS 2013, ändern Sie den Typ der Authentifizierung, die ein Projekt verwendet (außer manuell Bearbeiten einiger Dateien).
  2. Es gibt keine Dokumentation noch erklären, wie das setup "On-Premises" - Authentifizierung. (Wirklich? Wie ist das möglich?)
  3. Auf jeden Fall, was ich brauchen, ist nicht "On-Premises" - Authentifizierung, da diese nur für Windows Identity Federation services (oder so ähnlich). Was sollte ich verwenden, stattdessen ist nur die Windows-Authentifizierung mit ASP.Net Rollen, die Windows scheinbar bekommt von Active Directory-Gruppen, wenn ich login.

So, unter der Annahme, dass #3 wahr ist, ich habe versucht, das Lesen der zahlreichen Beiträge dazu, aber Sie scheinen, fallen in zwei grundlegende Gruppen:

  1. Unkomplizierte, einfache Methoden, die ich nicht auf der Arbeit, wahrscheinlich, weil Sie davon ausgegangen, einige wissen, dass ich nicht zu haben.
  2. Komplexe, benutzerdefinierte-codierte Methoden, die ich vermute, sind dabei durch code-was wohl getan werden in einen code-free-Methode.

Unter der Annahme, dass #1 ist der Weg zu gehen, hier meine letzten Versuch.

In meinem controller habe ich:

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

In meinem Web.config-Datei, die ich habe:

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

Wenn ich versuche auf die Seite zuzugreifen, bin ich stattdessen dazu aufgefordert, mich einzuloggen. Nach der Eingabe meiner login-ID und Passwort, die ich erhalten weiterhin die login-Eingabeaufforderung. Ich bin nicht berechtigt, die Seite.

Ich habe nicht alles überall sagen, meine Anwendung, in denen der Active Directory-server ist, aber der Eindruck, den ich bekomme ist, dass Windows bereits kennt, weiß, dass (da, wenn ich die Anmeldung an Windows, es greift auf das Active Directory-server zu authentifizieren mir).

Bin ich etwas fehlt? Oder bin ich da falsch in der Annahme, dass dies getan werden kann, ohne benutzerdefinierten code schreiben zu müssen?

Caveat: ich bin Recht neu auf .NET, MVC, etc, kommen aus der Java-Welt, so nutzen Sie bitte kleine Worte. 🙂

Sie sollten diese Frage aus. Wahrscheinlich ist es für eine frühere version von mvc, aber die Windows-Authentifizierung hat sich nicht geändert in eine Weile. stackoverflow.com/questions/13767439/...
Hatte ich sah, dass der post von vorhin, und basiert vieles von dem, was ich versuchte, aber es funktionierte nicht. Ich habe jetzt herausgefunden, was ich falsch gemacht habe, aber. In dem Attribut, das in meinem controller habe, hatte ich 2 backslashes zwischen den Namen der Domäne und den Namen der Rolle, anstatt einer. Also ich hatte: [Authorize(Roles=@"SomeDomain\\SomeGroup")] statt [Authorize(Roles=@"SomeDomain\SomeGroup")] Doh!

InformationsquelleAutor Wally Hartshorn | 2014-02-11

Schreibe einen Kommentar