1

OpenIdWebRingSso サンプル (PR (プロバイダー) および RP (証明書利用者) - 3.5.0.10357) で、PR でログアウトすると、RP でログアウトされず (次のページ要求で)、RP でログアウトされます。 PR でログアウトをトリガーしません。

また、ユーザーが認証されていない場合、PR は常にログインにリダイレクトします (ユーザー名とパスワードを要求します)。認証を必要としない RP 上のページを参照するときに必要なのは、ユーザーが認証されているかどうかを確認するためだけの要求です。その場合は、RP にユーザーをログインします (その部分は問題ありません)。そうでない場合は、ログインを要求せずに、ユーザーが認証されていないという応答を返すだけです (ログイン ボタンをクリックするか、[承認] ページ)。更新:「request.Mode = 0;」でその部分を解決しました。

したがって、RP で必要なのは、PR に対して認証されているかどうかをすべてのページ要求の天気で確認し、必要な場合にのみパスワードを要求することです。質問は次のとおりです。

1) このコードは、サンプルまたはその他の参照で見つけることができますか?

2) そうでない場合、MVC3 アプリに配置するのに最適な場所はどこですか: - httpModule? - ベース コントローラ上でオーバーライド void Initialize? - OnActionExecuting (ActionFilterAttribute)? - 何処か別の場所?

3) このアプローチは SSO に適していますか (1 つの会社に 5 つの異なるサイト/ドメインがあります)。

前もって感謝します!

4

1 に答える 1

0

すべてのサイトが同じ会社に属しており、userRepository(データベース)へのアクセスを共有しているため、私は別のアプローチを決定しました。はるかに単純で、リダイレクトが多すぎないようにします。

  • 信頼できるサイト(ホワイトリストの証明書利用者(RP))は、リターンURLを使用してメインサイト(プロバイダー)に要求(リダイレクト)します。
  • メインサイトは、リクエスト(returnURL)がドメインのホワイトリストからのものであることを確認します
  • ユーザーをログに記録し(ログに記録されていない場合は、ログインフォームを表示)、ユーザーをログイン済みデータベースとしてマークし、ユーザーデータベースに一時トークンを追加します。
  • メインサイトはトークンを使用してRPに戻ります(リダイレクトします)。
  • RPはトークンを使用してデータベースを調べ、ユーザーをログに記録し、トークンを削除します。

SSOffも簡単です。ユーザーデータベースからboolレコード(userLogged)へのすべてのリクエストをチェックするだけです。リダイレクトはありません。ログアウト時に、レコード(userLogged)をfalseに変更するだけで、すべてのサイトが認識します。

ユーザーがログイン(リダイレクト)してSERPにペナルティが課せられるかどうか、RPが常にプロバイダーをチェックするのを避けるために、ユーザーがログインした後/場合にのみ、クエリ文字列(?checklog = yes)をホワイトリストサイトのリンクURLに動的に追加します。したがって、ログに記録した後にサイトAからサイトBに移動すると、siteB.com?checklog = yesに移動します。これにより、サイトはプロバイダーとリダイレクトしてユーザーを取得してログに記録するように求められます...Googleはリダイレクトを認識しません。

于 2012-05-04T16:27:38.110 に答える