ASP.NET Core Security Github repoを見ると、Google middlewareの実装が見つかります。本質的には、コードをトレースするとGoogleHandler
がOAuthHandler<T>
から継承し、RemoteAuthenticationHandler<T>
を継承していることがわかります。 RemoteAuthenticationHandler<T>
には(here)というメソッドがあります。このメソッドは、Options
オブジェクトのCallbackPath
プロパティにあるURLと現在のURLを比較します。これは認証ミドルウェアが、認証プロバイダからリダイレクトされた後にトリガされる方法です(ミドルウェアによって処理されます)。コントローラではありません。ミドルウェアがトリガされると、認証プロセスが再開されます。
すべての外部認証プロバイダのミドルウェアがこの方法で動作します。ミドルウェアがトリガーされると、OAuthHandler内のHandleRemoteAuthentication
というメソッドがトリガーされます。 hereを参照してください。これは、OAuth 2.0 authorization code flow processの2番目の脚をトリガーし、プロセスの最初の脚で得られた1回限りの使用コードがアクセストークンと交換されます。このプロセスは、ExternalLoginCallbackがトリガーされる前に行われます。具体的には、コードがアクセストークンと交換され、いくつかのユーザー情報がGoogleから入手されると、ClaimsPrincipal
が作成され、一時的なクッキーが発行されます。デフォルトでは、クッキーの名前はidsrv.external
です。その後、IdentityServer4 Quickstartプロジェクトに表示されるように、ExternalLoginCallbackエンドポイントがトリガーされ、idsrv.external
クッキーが削除され、ClaimsPrincipal
に対して新しい認証クッキーが発行されます。
Googleミドルウェアは、Googleに固有の基本クラスの機能をオーバーライドしますが、本質的にすべてのOAuth 2.0/OpenID Connectミドルウェアがこのように機能します。