myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » Forms Authentifizierung mit Active Directory Groups bei klassischer MVC5 Anwendung
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Forms Authentifizierung mit Active Directory Groups bei klassischer MVC5 Anwendung

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
schuppsl
myCSharp.de-Mitglied

Dabei seit: 10.12.2007
Beiträge: 737
Entwicklungsumgebung: VS2017


schuppsl ist offline

Forms Authentifizierung mit Active Directory Groups bei klassischer MVC5 Anwendung

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallöle zusammen.

Ich habe hier eine "klassische" Asp.Net MVC 5 Anwendung bei der einzelne Seiten nur für bestimmte User sein sollten.
Für diese User wird eine neue Gruppe im Active Directory erstellt, damit neue User einfach hinzugefügt werden können.

Dabei soll es keine Hochsicherheits-Anwendung sein, Forms Authentifizierung mit Cookies macht man zwar nimmer, reicht hier aber völlig aus.
Alles bleibt intern.

Gebe ich im entsprechenden Controller die einzelnen Benutzer an, funktioniert es.
Bei den AD-Gruppen aber nicht.

So sieht der Quellcode aus:

Web.config

XML-Code:
<add name="ADConnectionString" connectionString="LDAP://Pfad zum AD" />

....
<authentication mode="Forms">
      <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All" />
    </authentication>

    <membership defaultProvider="ADMembershipProvider">
      <providers>
        <clear />
        <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName"  connectionUsername="DOMÄNE\Benutezr" connectionPassword="PASSWORT"/>
      </providers>
    </membership>

Dann im Controller, so funktioniert es:

C#-Code:
     [Authorize(Users="username")]
        public ActionResult Korrektur()
        {
...
}

So funktioniert es nicht:

C#-Code:
  [Authorize(Roles = "DOMÄNE\\GRUPPE)]
        public ActionResult Korrektur()
        {

        }

Die Login Form:

C#-Code:
@using (Html.BeginForm(null, null, new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Login</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.RememberMe, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.RememberMe)
                    @Html.ValidationMessageFor(model => model.RememberMe, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Log In" class="btn btn-default" />
            </div>
        </div>
    </div>
}

Und der Account Controller:

C#-Code:
public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (!this.ModelState.IsValid)
            {
                return this.View(model);
            }

            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (this.Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return this.Redirect(returnUrl);
                }

                return this.RedirectToAction("Korrektur", "Home");
            }

            this.ModelState.AddModelError(string.Empty, "Benutzername oder Passwort falsch");

            return this.View(model);
        }

Es soll also nur die View "Korrektur" geschützt werden.
Wie gesagt, mit dem User geht es, mit der Gruppe nicht.

Ich sehe zwar, dass der User authentifiziert ist, aber autorisiert für die Seite ist er nicht.

Es ist das erste Mal, dass ich mich damit auseinandersetze, was mache ich falsch?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von schuppsl am 24.09.2018 08:51.

24.09.2018 08:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
UncleBens
myCSharp.de-Mitglied

avatar-332.jpg


Dabei seit: 14.02.2009
Beiträge: 130
Entwicklungsumgebung: Visual Studio 2019 Enterprise


UncleBens ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hoi,

ich vermute mal, das fehlende Schlusszeichen ist nur ein Typo? ;-)

C#-Code:
[Authorize(Roles = "DOMÄNE\\GRUPPE)]

Ansonsten hab ich grade mal in Code bei mir gespickt... ich verwende bei Authorize den Gruppennamen ohne vorangestellte Domäne (obwohl es sich um eine Gruppe in Active Directory handelt) und das klappt wunderbar. Lass doch mal testweise den Domänennamen weg...
24.09.2018 09:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
schuppsl
myCSharp.de-Mitglied

Dabei seit: 10.12.2007
Beiträge: 737
Entwicklungsumgebung: VS2017

Themenstarter Thema begonnen von schuppsl

schuppsl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von UncleBens:
Hoi,

ich vermute mal, das fehlende Schlusszeichen ist nur ein Typo? ;-)

Ja...
Habe es schon mit und ohne Domäne versucht, beider geht nicht.
Die Gruppe stimmt.
Habe mal gelesen, dass es so mit Gruppen gar nicht geht...muss aber nochmals genauer nachlesen.

Also es liegt nicht daran, dass in der web.config was falsch angegeben ist?

In der Funktion

C#-Code:
FormsAuthentication

gebe ich ja den Username an, hier wird dan das Cookie entsprechend angelegt(?)
Im Controller gebe ich aber die Gruppe an.
Also müsste ich das Cookie auch mit der Gruppe anlegen?

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von schuppsl am 24.09.2018 09:52.

24.09.2018 09:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.060
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ein klassisches Forms gibts mit Active Directory eigentlich nicht.

Üblich wäre: Du verwendest die Windows Authentication im IIS. Das bietet auch direkt Single Sign On und es gibt kein Login-Fenster.
Dann funktioniert auch das Attribut; denn das sind schließlich Rollen die aus dem AD geladen werden müssen.
24.09.2018 13:04 Beiträge des Benutzers | zu Buddylist hinzufügen
schuppsl
myCSharp.de-Mitglied

Dabei seit: 10.12.2007
Beiträge: 737
Entwicklungsumgebung: VS2017

Themenstarter Thema begonnen von schuppsl

schuppsl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Gesagt, getan.

Funktioniert prima, danke Daumen hoch
24.09.2018 16:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.10.2019 07:07