2012-04-28 6 views
1

OpenIdWebRingSsoサンプル(PR(プロバイダー)とRP(依存パーティー) - 3.5.0.10357)でログアウトすると、RP上でログアウトしない(次のページ要求時に) RP上のログアウトはPR上のログアウトを引き起こさない。DotNetOpenAuth SSOサンプル動作

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

私がRPで必要とするのは、認証されているか否かにかかわらず、すべてのページ要求を確認することです。必要に応じてパスワードを尋ねます。したがって、質問は次のとおりです。

1)このコードは、サンプルまたは他のリファレンスで見つけることができますか?

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

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

ありがとうございます!すべてのサイト以来

答えて

0

は同じ会社に所属し、userRepository(データベース)へのアクセスを共有私は、別のアプローチに決めはるかに簡単かつ非常に多くのリダイレクトを回避:

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

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

ユーザーがログオン(リダイレクト)してSERPにペナルティを科された場合、RPが常にプロバイダをチェックするのを避けるために、クエリーストリング(?checklog = yes)をホワイトリストサイトのリンクURLに動的に追加します。だから私がサイトAからサイトBにログした後、それはsiteB.com?checklog =yesに行くでしょう。これはサイトをプロンプトしてプロバイダとのリダイレクトを行い、ユーザーを取得しログすることです...そして、Googleは決してリダイレクトを見ません。

関連する問題