1

私は自分のサイト「A」を持っています。サイト 'B' とビジネス契約を結び、サイト 'B' (そのようなサイトはたくさんあります) のユーザーが、ユーザーが 'B' で多くの 'A' 関連アクションのいずれかを実行したときに、ユーザーを私のサイトにリダイレクトできるようにします。 . 「B」から「A」に直接、または「B」のユーザーのブラウザを介して、あらゆる情報を渡すことを義務付けることができますが、私 (つまり、サイト A) は、それらが実際に「B」からのものであることを検証し、自動的にログに記録する必要があります。サイト「A」に。

OAuthがこれをうまく行うことは知っていますが、「ユーザー」レベルでのみです。ここで起こっているのは、サイト A とサイト B の間のビジネス契約です。「B」のすべてのユーザーが OAuth フープジャンプ全体を行うのに不便を感じる必要はありません...

また、サイト 'B' のユーザーにはフォームが表示され、それらのアクションを私のサイト 'A' に送信するためにクリックする必要があることにも注意してください。「B」ユーザーに通信されているシークレット/認証データ (存在する場合) は、それらによって表示 (および改ざん) される可能性があります。私のサイト「A」はそれから保護する必要があります。

これは近いです: Web サイト間でユーザーを安全に転送する。

そこにリストされているオプション:

  1. ユーザーの詳細を取得するために、両端で HTTPS を介した Web サービス呼び出しを作成します。これは、特定のログイン ペアに対してのみ機能します。
  2. 「パススルー認証」を見てみましょう。これは、ユーザーの ID をあるシステムから別のシステムに渡すことを可能にする概念です。
  3. 今考えられる最善の方法は、ユーザー ID の HASH を渡すことです。それが心配な場合は、他のユーザー データのハッシュを渡すことです。
  4. サイト B は、サイト A がユーザーのセッションを作成できるようにする Web サービスを持つことができます。

しかし、質問が1年半前に尋ねられて以来、人々が異なる意見を持っているかどうか疑問に思っています.

私の質問:

  1. これをどのように実装すればよいですか?
  2. これを可能にする既製のphp実装はありますか?

[私はすでにこのようなものを実装しましたが、これは欠陥のあるメカニズムであることが判明したので、正しいメカニズムがどうなるか興味があります。]

4

2 に答える 2

0

これらのサイト (つまり、銀行とブログ) のセキュリティ レベルは? 非常に単純なケースでは、サイト B は FORM データ CHECKSUM をキャッシュできます。また、ユーザーが A にリダイレクトされると、A は B に直接クエリを実行してチェックサムを取得し、データを検証できます。セキュリティを強化するために、サイト間の IP またはキーベースの認証を設定できます。

より多くのセキュリティが必要な場合でも、おそらく OAuth が最適なオプションです。ユーザーすでに B にログインしているため、何も入力する必要がないことに注意してください。そして、彼らが送信するフォームは、実際に同時に OAuth を設定できるため、ユーザーが A にリダイレクトされると、A は実際にトークンを取得し、OAuth を介して B からデータを取得できます (したがって、そのデータが B から来たことを検証します)。

すでに述べたShibbolethに加えて、互換性のある標準SAML 2.0があり、これらのプロトコルの両方の非常に優れた PHP 実装であるSimpleSAMLphpは、既製の Web サービスとカスタム アプリケーションに使用されるライブラリとして提供されます。このような SSO フェデレーションを設定するための学習曲線はそれほど急ではなく、SimpleSAMLphp は十分に文書化されています。

しかし、そのような SSO にはすべての B による SAML/Shibboleth と、当事者間のフェデレーション メタデータの設定と維持が必要であるため、OAuth の方が適している可能性があります。

于 2011-05-05T06:45:27.520 に答える
0

Shibbolethのようなシングル サインオン システムを使用できます。

Shibboleth System は、組織の境界を越えて、または組織の境界内で Web シングル サインオンを行うための標準ベースのオープン ソース ソフトウェア パッケージです。これにより、サイトは、保護されたオンライン リソースへの個々のアクセスについて、プライバシーを保護しながら、十分な情報に基づいた承認の決定を下すことができます。

それがやり過ぎの場合は、「ボタン」をクリックしたときに単純に渡される各ユーザーに固有のランダムハッシュを介して、HTTPS API を介して、両方のサイトに他の各サイトのユーザーデータへのアクセスを許可するだけです。

于 2011-05-05T06:18:44.197 に答える