wake-up-neo.net

Windows und anonyme Authentifizierung in .Net Core 2.0

Ich versuche, die Windows - und Anonymous -Authentifizierung in einer leeren Web-App .Net Core 2.0 zu mischen. Ich möchte das Attribut [Authorize] meiden, da ich keine Mvc oder Controller verwenden möchte.

Mein Setup ist wie folgt:

  1. Ich habe eine leere .Net Core 2.0-Webanwendung erstellt

  2. Ich ging zu Projekteigenschaften -> Debug -> Markierte "Windows-Authentifizierung aktivieren" und deaktivierte "Anonyme Authentifizierung aktivieren" . Jetzt "windowsAuthentication": true und "anonymousAuthentication": false wurde in "launchSettings.json" unter "IIS" angezeigt.

  3. In Startup.cs habe ich in ConfigureServices services.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme); hinzugefügt, wie in https://docs.Microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x#windows- erwähnt. authentication-httpsys - iisintegration

  4. Ich habe ein einfaches Console.WriteLine(context.User.Identity.Name); hinzugefügt, um zu sehen, dass es in app.Run und ....__ funktioniert.

Jedoch ... sobald ich "anonymousAuthentication" in "launchSettings.json" auf "true" gesetzt habe, funktioniert es nicht mehr und ich kann nicht herausfinden, was ich tun kann, um die Windows-Authentifizierung parallel dazu zu machen. Context.User.Identity.IsAuthenticated ist immer false . Wie Sie sehen, ist meine Konfiguration sehr einfach und ich brauche sie, um so zu bleiben. Ich möchte die Windows-Authentifizierung für bestimmte dynamische Routen aktivieren/deaktivieren. Daher ist die Verwendung von Controllern mit dem Attribut [Authorize] keine Option.

Was ich versuche zu erreichen, ist eine einfache App, bei der die URL "/ authenticated" mit dem Wert von context.User.Identity.Name antworten würde und die URL "/ public" etwa mit dem Hinweis "Dies ist eine öffentliche Seite!" Antworten würde . Etwas ähnelt der NTLM-Authentifizierung auf einer bestimmten Route in ASP.NET Core , jedoch ohne das Attribut [Authorize] und die Controller ..__ Die Ressourcen sind sehr knapp ... Hat jemand eine Ahnung, was mir fehlen könnte? Vielen Dank!

10
Ted Chirvasiu

Anonym hat Vorrang. Sie müssen httpContext.ChallengeAsync () aufrufen, wenn Sie eine anonyme Anforderung an einen eingeschränkten Teil Ihrer App erhalten. Dies bewirkt, dass der Client bei der nächsten Anforderung Anmeldeinformationen sendet. Hier ist ein Test, der dies tut .

8
Tratcher

Tratchers Antwort rettete mich nach einiger Zeit bei diesem Thema. Für ein sehr einfaches Szenario (anonyme Controller + Windows-Authentifizierung im übrigen eingeschränkt), hier ein kurzer Einstieg (Middleware):

public class NtlmAndAnonymousSetupMiddleware
{
    private readonly RequestDelegate next;

    public NtlmAndAnonymousSetupMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.User.Identity.IsAuthenticated || context.Request.Path.ToString().StartsWith("/Anonymous"))
        {
            await next(context);
            return;
        }

        await context.ChallengeAsync("Windows");
    }

}

Ich habe dies gerade am Anfang der Startup.Configure-Methode angeschlossen:

app.UseMiddleware<NtlmAndAnonymousSetupMiddleware>();
0
Alexei