サード パーティの Open ID Connect プロバイダー (Google や Microsoft など) を使用して単一ページ アプリケーションのシームレスなログイン フローを作成し、外部プロバイダーから返された既存の jwt トークンから、ページを更新せずに新しい jwt トークンを生成するにはどうすればよいでしょうか?
たとえば、ユーザーが Google にログインできるようにしてから、自分のサイトに戻して、IdentityServer4 を使用してトークン サーバー側を検証し、特定のクレームを抽出して新しい JWT (独自のロジック) を生成できるようにしたいと考えています。
リダイレクト時に Open Id プロバイダーからの JWT トークンを検証する既存の IdentityServer4 エンドポイントはありますか?その後、独自のトークン作成フローを挿入するための最良の方法は何ですか? 最終結果は、理想的には、SPA が行うすべての http 要求で送信される新しい JWT トークンを含む Cookie です。
私の最善の推測は、oidc js クライアントを使用して、Google のユーザー マネージャーをセットアップすることです。たとえば、次のようになります。
var mgr = new Oidc.UserManager({
authority: "https://accounts.google.com/.well-known/openid-configuration",
client_id: "---",
redirect_uri: "http://localhost:60720/account/callback",
response_type: "id_token token",
scope: "openid profile email",
post_logout_redirect_uri: "http://localhost:60720/spa",
});
/*...*/
mgr.signinRedirect();
ただし、リダイレクトでは、Google がコントローラーに Cookie を送信する必要があります。これにより、IdentityServer を使用してトークンが検証され、ユーザー ID などのクレームが抽出され、API の新しいトークンが生成されます。これは、IdentityServer を使用して独自の ID プロバイダーをホストしていることを前提としています。この最後の部分を達成するために IdentityServer4 を使用するにはどうすればよいですか?
リダイレクト コールバックが呼び出された後、ポストバックでトークンが生成されるため、これは MVC パターンで簡単に実行できます。SPA では、最小限のリダイレクトが必要です。理想的には、ユーザーがログインできるようにポップアップが表示され、SPA が引き継ぎます。外部 ID プロバイダーから IdentityServer4 認証サーバーまたは MVC サーバーにリダイレクトし、事実上の構成の中断を最小限に抑えて新しいトークンを生成する方法を理解できませんでした。
Google は、サーバーがトークンを検証する必要があることをお勧めします ( https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token )。考えられる解決策の 1 つは、検証後にリダイレクト コールバックで新しいトークンを生成することです。ただし、IdentityServer4 はトークンを検証することになっていませんか、それともサーバー上で自分でこれを行う必要がありますか? ここで、IdentityServer4 はトークンの検証でどのような役割を果たしますか。このステップを自分でコーディングしたくありません。