web-dev-qa-db-ja.com

SignInAsyncとAuthenticateAsync

最後に、JWTトークン認証を使用したログイン方法が機能しました。

ここに電話します

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

私も呼んだ

await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

この例では、SignInAsyncのみが必要であることを読みました。だから私はそれをテストしてAuthenticateAsyncを削除しました。それでも、 User.Identity.IsAuthenticatedtrueを返します。

AuthenticateAsyncを削除してもよろしいですか?それとも必要ですか?なぜそれが存在するのですか? AuthenticateAsyncのdoc-stringは認証のための拡張メソッドのみを示します

11
Matthias Burger

ここでは、認証フレームワーク(ASP.NET Core 2.0の場合)に由来するすべてのさまざまなメソッドの要約を、一般的な認証フローで呼び出される順に示します。

ChallengeAsync

これにより、認証する場所をブラウザに指示します。例えば:

  • Cookieにより、独自のログインページにリダイレクトされます(例:/Account/Login
  • Azure ADはMicrosoftログインページにリダイレクトします
  • 等..

AuthenticateAsync

このステップは、認証ページ(チャレンジステップによってリダイレクトされた場所)からの情報を処理し、それを使用して、ログインしたユーザーを識別するClaimsPrincipalインスタンスを作成します。

次に、そのClaimsPrincipalHttpContext.Userに割り当てられます。

SignInAsync

このステップでは、前のステップで構築されたClaimsPrincipalを取得して永続化します。最も一般的な方法はもちろんCookieです。

https://github.com/aspnet/Security/ のソースコードに基づくと、これがClaimsPrincipalを永続化する唯一の方法のようです。

SignOutAsync

これは、SignInステップの逆のステップです。永続化されたデータを削除するようにミドルウェアに指示します。

  • クッキーは保存されたクッキーを削除します
  • Azure ADがMicrosoftログアウトページにリダイレクトします
  • 等..

したがって、質問に答えるために、すでにClaimsPrincipalがある場合は、AuthenticateAsyncを呼び出す必要はありません。

実際、ClaimsPrincipalを呼び出す前にAuthentificateAsyncを持っているのは少し奇妙です:)

25
Métoule