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
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:
/Account/Login
)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.
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
:)