web-dev-qa-db-fra.com

À quoi sert exactement «UseAuthentication ()»?

J'ai une question concernant l'authentification dans ASP.NET Core 2: à quoi sert exactement l'appel app.UseAuthentication () ?

Est-ce une condition préalable de base pour pouvoir implémenter ma logique d'authentification personnalisée? J'ai déjà jeté un œil à l'implémentation de seAuthentication et aussi du middleware réel AuthenticationMiddleware , mais pour être honnête, je ne comprends pas ce que cela fait et pourquoi serait nécessaire.

Pour le dire autrement:

Dois-je appeler UseAuthentication () enter image description here

ou est-ce un Nice-to-have et je peux quand même faire mon authentification personnalisée? enter image description here

Si j'allais bien sans appeler UseAuthentication () je serais toujours intéressé par ce que AuthenticationMiddleware fait réellement. Donc, si vous saviez que je vous serais très reconnaissant si vous pouviez également l'expliquer pour moi.

23
baumgarb

Si vous écrivez votre middleware personnalisé (comme vous le faites dans votre exemple), vous n'avez pas besoin d'appeler AddAuthentication car le middleware d'authentification ne sera pas au courant du vôtre.

Cela étant dit, vous ne voulez probablement pas créer votre propre middleware: vous voulez probablement créer un nouveau gestionnaire d'authentification qui joue bien avec le cadre d'authentification ASP.NET (afin d'utiliser le [Authorize] attribut sur les contrôleurs).

Pour créer une authentification personnalisée, vous devez créer un gestionnaire dédié qui hérite de AuthenticationHandler et implémente les méthodes appropriées. Vous pouvez jeter un œil à un exemple d'authentification de base sur github: https://github.com/blowdart/idunno.Authentication , mais voici un exemple rapide pour montrer l'essentiel des gestionnaires personnalisés.

public class BasicAuthenticationOptions : AuthenticationSchemeOptions
{
    public BasicAuthenticationOptions()
    {
    }
}

internal class BasicAuthenticationHandler : AuthenticationHandler<BasicAuthenticationOptions>
{
    private const string _Scheme = "MyScheme";

    public BasicAuthenticationHandler(
        IOptionsMonitor<BasicAuthenticationOptions> options,
        ILoggerFactory logger,
        UrlEncoder encoder,
        ISystemClock clock) : base(options, logger, encoder, clock)
    {
    }

    protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        string authorizationHeader = Request.Headers["Custom-Auth-Handler"];

        // create a ClaimsPrincipal from your header
        var claims = new[]
        {
            new Claim(ClaimTypes.NameIdentifier, "My Name")
        };

        var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, Scheme.Name));
        var ticket = new AuthenticationTicket(claimsPrincipal,
            new AuthenticationProperties { IsPersistent = false },
            Scheme.Name
        );

        return AuthenticateResult.Success(ticket);
    }

Vous pouvez ensuite enregistrer votre nouveau schéma dans Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
        .AddScheme<BasicAuthenticationOptions, BasicAuthenticationHandler>("MyScheme", options => { /* configure options */ })
}
12
Métoule

Vous devez l'appeler.

UseAuthentication() est documentée comme:

https://docs.Microsoft.com/en-us/dotnet/api/Microsoft.aspnetcore.builder.authappbuilderextensions.useauthentication?view=aspnetcore-2.

Ajoute AuthenticationMiddleware à IApplicationBuilder spécifié, ce qui active les capacités d'authentification.

Il fait essentiellement ceci:

IApplicationBuilder AddAuthentication(this IApplicationBuilder app) {

    return app.UseMiddleware<AuthenticationMiddleware>();
}

... donc cela vous fait juste économiser de la frappe et peut-être des importations supplémentaires de using.

Cela ajoute une instance AuthenticationMiddleware dans le pipeline de traitement des demandes du processus, et cet objet particulier ajoute la plomberie pour l'authentification.

1
Dai