最後に、JWTトークン認証を使用したログイン方法が機能しました。
ここに電話します
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
ClaimsPrincipalFactory.CreatePrincipal(claims),
authProps);
私も呼んだ
await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
この例では、SignInAsync
のみが必要であることを読みました。だから私はそれをテストしてAuthenticateAsync
を削除しました。それでも、 User.Identity.IsAuthenticated
はtrue
を返します。
AuthenticateAsync
を削除してもよろしいですか?それとも必要ですか?なぜそれが存在するのですか? AuthenticateAsync
のdoc-stringは認証のための拡張メソッドのみを示します
ここでは、認証フレームワーク(ASP.NET Core 2.0の場合)に由来するすべてのさまざまなメソッドの要約を、一般的な認証フローで呼び出される順に示します。
ChallengeAsync
これにより、認証する場所をブラウザに指示します。例えば:
/Account/Login
)AuthenticateAsync
このステップは、認証ページ(チャレンジステップによってリダイレクトされた場所)からの情報を処理し、それを使用して、ログインしたユーザーを識別するClaimsPrincipal
インスタンスを作成します。
次に、そのClaimsPrincipal
がHttpContext.User
に割り当てられます。
SignInAsync
このステップでは、前のステップで構築されたClaimsPrincipal
を取得して永続化します。最も一般的な方法はもちろんCookieです。
https://github.com/aspnet/Security/ のソースコードに基づくと、これがClaimsPrincipal
を永続化する唯一の方法のようです。
SignOutAsync
これは、SignIn
ステップの逆のステップです。永続化されたデータを削除するようにミドルウェアに指示します。
したがって、質問に答えるために、すでにClaimsPrincipal
がある場合は、AuthenticateAsync
を呼び出す必要はありません。
実際、ClaimsPrincipal
を呼び出す前にAuthentificateAsync
を持っているのは少し奇妙です:)