web-dev-qa-db-fra.com

SignInAsync vs AuthenticateAsync

J'ai finalement réussi à utiliser ma méthode de connexion avec l'authentification par jeton JWT.

Ici j'appelle

await HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme,
    ClaimsPrincipalFactory.CreatePrincipal(claims),
    authProps);

J'ai aussi appelé

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

Dans l'exemple que j'ai lu, je n'ai besoin que du SignInAsync. Je l'ai donc testé et supprimé AuthenticateAsync. Mais reste, User.Identity.IsAuthenticated renvoie true.

Est-il correct de supprimer le AuthenticateAsync? Ou en ai-je encore besoin? Pourquoi existe-t-il? La doc-string de AuthenticateAsync dit seulement Méthode d'extension pour authentifier

11
Matthias Burger

Voici un récapitulatif entre toutes les différentes méthodes provenant du cadre d'authentification (pour ASP.NET Core 2.0), dans l'ordre dans lequel elles sont appelées dans un flux d'authentification typique.

ChallengeAsync

Cela indiquera à votre navigateur où aller pour vous authentifier. Par exemple:

  • Les cookies vous redirigent vers votre propre page de connexion (par exemple /Account/Login)
  • Azure AD vous redirigera vers la page de connexion Microsoft
  • etc..

AuthenticateAsync

Cette étape gère toutes les informations provenant de la page d'authentification (où vous avez été redirigé par l'étape Challenge) et l'utilise pour créer une instance ClaimsPrincipal qui identifie l'utilisateur connecté.

Ce ClaimsPrincipal est ensuite affecté à HttpContext.User.

SignInAsync

Cette étape prend le ClaimsPrincipal construit à partir de l'étape précédente et le persiste. Le moyen le plus courant est bien sûr les cookies.

Notez que sur la base du code source dans https://github.com/aspnet/Security/ , il semble que ce soit le seul moyen de conserver le ClaimsPrincipal.

SignOutAsync

Il s'agit de l'étape inverse de l'étape SignIn. Il demande au middleware de supprimer toutes les données persistantes.

  • Les cookies supprimeront le cookie stocké
  • Azure AD vous redirigera vers leur page de déconnexion Microsoft
  • etc..

Donc pour répondre à votre question, si vous avez déjà un ClaimsPrincipal, appeler AuthenticateAsync n'est pas nécessaire.

En fait, c'est un peu étrange que vous ayez un ClaimsPrincipal avant d'appeler AuthentificateAsync :)

25
Métoule