web-dev-qa-db-ja.com

NodeJSでシングルサインオンを行う方法

複数のドメインで複数のWebアプリを実行しています。ユーザーが一度サインインしてすべてのアプリにアクセスできるように、シングルサインオンを実装したい。

これをどのように実装すればよいですか?すべてのアプリはNodeJSバックエンドを使用します。

正しい方向への一般的なポインタは大歓迎です。

11
danday74

アプリは異なるドメインで実行されているため、クライアントマシンで実行されているAPPS間でCookieを共有してユーザーを検証することはできません。そのため、どういうわけかサーバー側で情報を共有する必要があります。

私の頭に浮かぶ最も簡単なソリューションは

  1. すべてのサーバーで共有セッションを使用します。

  2. Hava固有の認証ドメイン。認証が必要な場合はいつでもそこにユーザーをリダイレクトします。そこでユーザーを認証し、必要なセッションCookieまたはトークンを設定します。

  3. あなたのアプリが認証を必要とするときはいつでも、認証ドメインにリダイレクトしてください。認証Cookieは、認証ドメインと参照元ドメインに提供されます。すでに検証されていることを確認すると、認証サーバーは、適切なセッションIDで元のアプリにリダイレクトできます。これは、そのドメインのCookieとして設定されます。

  4. 認証されていない場合、ユーザーは認証サーバーでの認証を求められ、リダイレクトが行われます。

  5. ほとんど変更することなく、トークンを使用して、共有セッションを必要とせずにこれを実現できます。

実装する前に状態を適切に検証します。メカニズムの状態が多いほど、バグや攻撃の可能性が高くなります。

同じサブドメインでアプリを移動することを検討してください。認証メカニズムが同じであれば、すべてのアプリが同じ会社に属していることを誰もが知っています。また、すべての異なるドメインを覚えるよりも、同じドメイン上のさまざまなサブドメインを覚える方が簡単です。

21
Krrish Raj

最も使用されるプロジェクトは http://passportjs.org/ です。これは私が使用する唯一のものであり、ADFSなどのオンプレミスのソリューションや、google、facebookなどのサードパーティのソリューションへの優れたコネクタを備えています。

2
Peter Grainger