1. ホーム
  2. authentication

[解決済み] クロスドメイン認証のためのJWTを用いたシングルサインオンフロー

2022-06-15 07:56:59

質問

JWTの使用については、ウェブ上に多くの情報があります( Json Web Token ) を認証に使用することについては、ウェブ上に多くの情報があります。しかし、JWT トークンを マルチドメイン環境でのシングルサインオンソリューション .

私は、異なるホストに多くのサイトを持っている会社で働いています。ここでは example1.com example2.com . シングルサインオンのソリューションが必要です。 example1.com で認証された場合、そのユーザは example2.com にも認証されるようにしたいのです。

を使うことで OpenIdコネクト のフローで、認証したいユーザが example1.com にリダイレクトされます。 認証サーバ (または OP : "OpenId Provider")。ユーザーはそのサーバーで認証され、元の example1.com サイトへリダイレクトします。(私は、この他に 中間トークン を返す別のフローがあることは理解していますが、これは私たちには必要ないと思います)。

これでユーザーは example1.com に戻り、認証されました! 彼はリクエストを行うことができ、JWT トークンを Authentication ヘッダで JWT トークンを渡すと、サーバーは署名された JWT を確認できるため、ユーザーを識別することができます。素晴らしい!

最初の質問:

JWTトークンはどのようにクライアントに保存されるべきですか?これについては多くの情報があり、人々は Web Storage を使うのが良いという意見で一致しているようですが、古き良き cookies . ブラウザを再起動してもJWTが持続するようにしたいので、JWTを生成するために Local Storage ではなく Session Storage ...

これでユーザがブラウザを再起動しても、認証は example1.com で認証されます。

また、もし example1.com が私たちの別のドメインに Ajax リクエストを行う必要がある場合、私は CORS を設定することで、それが可能になることを理解しています。しかし、私たちの主なユースケースはクロスドメインリクエストではありません。 シングル サインオン ソリューション !

したがって、本題の:

さて、もしユーザーが example2.com にアクセスし、すでに持っている JWT トークンを使って認証させたい場合、どのようなフローになるでしょうか? Local Storage はクロスドメインアクセスを許可していないようなので、この時点ではブラウザはJWTトークンを読み込んで example2.com !

べきである。

  • ユーザは 認証サーバ にリダイレクトされますか?ユーザが認証されたとき example1.com と表示されます。 認証サーバ はユーザーにクッキーをセットしているかもしれないので、この新しい認証リクエストは example2.com への新しい認証リクエストは、そのクッキーを使ってユーザがすでに認証されていることを知り、すぐにリダイレクトして example2.com にリダイレクトすることができますか?
  • あるいは、ブラウザは example2.com に行くことなく、JWT トークンにアクセスすることができます。 認証サーバ にアクセスする必要があるのですか?私は、そこに クロスストレージソリューション があるようですが、それらは広く使われているのでしょうか?それらはクロスドメイン SSO 環境への提案されたソリューションですか?

私たちは派手なものは望んでいません。ほとんど使われているソリューションで満足です!

どのように解決するのですか?

ユーザーは再び認証サーバーにリダイレクトされ、example2.comに特化した新しいトークン(JWT)を取得する必要があります。これは、OpenID Connectやその他のクロスドメイン連携SSOプロトコルがどのように機能するかということです。