2017-10-18 5 views
2

J'ai enfin obtenu ma méthode de connexion avec JWT Token Authentication.SignInAsync vs AuthenticateAsync

Ici, je vous appelle

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

J'ai aussi appelé

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme); 

Dans l'exemple que je lis que je ne le besoin SignInAsync. J'ai donc testé et retiré AuthenticateAsync Mais encore, User.Identity.IsAuthenticated renvoie true.

Est-il correct d'enlever le AuthenticateAsync? Ou est-ce que j'en ai encore besoin? Pourquoi existe-t-il? La chaîne doc de AuthenticateAsync dit que méthode d'extension pour Authentifier

Répondre

2

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

ChallengeAsync

Cela demandera votre navigateur où aller à authentifier. Par exemple:

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

AuthenticateAsync

Cette étape permet de gérer n'importe quelle information provenant de la page d'authentification (où vous avez été redirigé t o par l'étape Défi) et l'utilise pour créer une instance ClaimsPrincipal qui identifie l'utilisateur connecté.

Cette ClaimsPrincipal est ensuite affectée à HttpContext.User.

SignInAsync

Cette étape prend la ClaimsPrincipal construit à partir de l'étape précédente, et il persiste. La façon la plus courante est bien sûr les cookies.

Notez que basé sur le code source dans https://github.com/aspnet/Security/, il semble être le seul moyen de conserver le ClaimsPrincipal.

SignOutAsync

Ceci est l'étape inverse de l'étape SignIn. Il ordonne au middleware de supprimer toutes les données persistantes.

  • Les cookies supprimer le cookie stocké
  • AD Azure vous redirigera vers leur page logout Microsoft
  • etc ..

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

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