55

多数のオンラインサービスを提供しています。domain1.comあるサービス ( ) から別のサービス ( ) にユーザーが移動した場合に、ユーザーにすばやく簡単なエクスペリエンスを提供するシステムを開発する必要がありますdomain2.com

新しいサービスに移行したユーザーを自動的にログインさせる安全で確実な方法はありますか?

以下の解決策が完全に安全でない/間違っている場合は、私に怒鳴りつけてください。

私たちは、多くのオンライン サービスで提供されているパスワード回復用のシステムと同様のシステムを検討していました。有効期限が切れる一意のハッシュを含むリンクが電子メールで送信され、パスワードを変更できるようになります。

サイトは一意のdomain1.comハッシュを生成し、有効期限フィールドとともにユーザーにリンクされたハッシュとともにデータベースに保存します。

ユーザーはに転送されますdomain2.com/auto/?hash=d41d8cd98f00b204e9800998ecf8427e

domain2.comdomain1.com次に、ハッシュを使用してユーザーに関する情報を取得するように要求します。domain1.com次に、データベースからハッシュを削除します。domain2.comユーザーをログインさせ、Cookie などを設定します。

OpenID または OAuth に基づくもので同じ結果が得られるでしょうか?

4

5 に答える 5

138

シングルサインオン(SSO)は、概念的には非常に単純です。

  • ユーザーヒットdomain1.com
  • domain1.comセッションCookieがないことを確認します。
  • domain1.comにリダイレクトしますsso.com
  • sso.comログインページを表示し、資格情報を取得します
  • sso.comユーザーのセッションCookieを設定します
  • sso.com次に、(のような)domain1特別なURLにリダイレクトしますdomain1.com/ssologin
  • ssologinURLには、基本的に。によって「署名」されたパラメータが含まれていますsso.com。共有秘密鍵を使用してloginidを暗号化するbase64と同じくらい簡単かもしれません。
  • domain1.com暗号化されたトークンを取得して復号化し、新しいログインIDを使用してユーザーにログインします。
  • domain1ユーザーのセッションCookieを設定します。

さて、次のケース。

  • ユーザーがヒットdomain2.comすると、次のようdomain1にリダイレクトされます。sso.com
  • sso.comすでにユーザーのCookieを持っているため、ログインページを表示しません
  • sso.comdomain2.com暗号化された情報でにリダイレクトします
  • domain2.comユーザーにログインします。

これが、これがどのように機能するかの基本です。より堅牢で機能豊富なものにすることができます(たとえば、これはSSOnですが、 SSOffではありません。ユーザーはから「ログアウト」できますがdomain1、ログインはできますdomain2)。クレデンシャルに署名するために公開鍵を使用できます。SSOサーバーからより多くの情報(承認権など)を転送するように要求することもできます。ドメインがユーザーがSSOサーバーからの権限をまだ持っていることを定期的にチェックするなど、より緊密な統合を行うことができます。

ただし、リダイレクトを使用したブラウザを介したCookieハンドシェイクは、これらすべてのSSOソリューションの基盤となる重要な基盤です。

于 2008-12-05T00:08:50.423 に答える
8

誰かが中間者を演じてそのハッシュを取得できた場合、クロスドメイン転送を盗むことができるでしょうか? 明らかに、クライアントが使用する前に、生成してクライアントに送信する必要があります。たとえば、次のように言います。

私はジャックをスパイする中間者を演じています。ジャックがアクセスdomain1.comすると、ハッシュが準備されて彼に送信され、アクセス時にdomain2.comそのハッシュを認証として送信できるようになります。彼が にアクセスするdomain1.comと、彼の要求が私を介して届きます。あなたはページを返します。私はハッシュを取得して、彼に続行させます。私はハッシュを使用してアクセスdomain2.comします。あなたは私を入れてdomain2.com、ハッシュを削除しました。にログインしようとしてdomain2.com、資格情報が無効であると言われるまで、彼は賢明ではありません。

それをどのように克服しますか?

于 2008-12-04T22:57:43.093 に答える
7

セッション全体でSSLを使用しない限り、クロスドメインログインにSSLを使用しても意味がありません。URLでハッシュを使用するのと同じように、セッションCookieを盗むのも簡単です。セッションの残りの部分が安全でない場合にSSLでハッシュを非表示にすることのポイントは何ですか。

一番上にある方法は、ほとんど標準的な方法です。安全なプロトコルを使用するかどうかはまったく別の問題ですが、セッションの一部だけを暗号化することは無意味です。

于 2010-11-30T12:25:34.997 に答える
6

これは良い解決策です。考慮すべき2つのポイントは次のとおりです。

「ハッシュ」という用語を使用しますが、どのデータをハッシュするかは明確ではありません。代わりに、「nonce」を使用します。これは、暗号品質のRNGによって生成された大きな(128ビット)数値です。

また、これを指定していませんが、ユーザーと両方のドメイン間、およびドメイン自体間の通信は安全である必要があります。SSLを使用してサーバーを認証し、ナンスの機密を保持します。

于 2008-12-04T23:53:25.197 に答える
2

SEOについてはどうですか?ログインに成功する前のすべてのリクエストが他のドメインにリダイレクトされて戻ってくるように見えます。これは非常に醜いと言えます。どのヘッダーを送信する必要がありますか? 301 を SSO に送信してから、301 を元のページに戻しますか? 検索ボットは、そのページのインデックスを 2 回変更するように "要求" されますか?

于 2010-09-17T18:14:09.310 に答える