4

クロスドメインMVC4Webアプリケーションにシングルサインオン(SSO)を実装する方法

4

2 に答える 2

13

domainフォーム認証Cookieのプロパティをルートドメインに設定し、両方のアプリケーションに同じマシンキーを構成することで、同じドメインSSOを簡単に実現できます。

クロスドメインSSOはより困難です。それを実装するためのさまざまな手法があります。たとえば、StackExchangeはHTML5ローカルストレージを使用します。それらのメカニズムについては、で説明していthis blog postます。

基本的な手順は次のとおりです。

  1. ユーザーがログオンするためのマスタードメインを設定します。たとえば、logon.com
  2. 認証されていないユーザーが2つのアプリケーションの一部で保護されたリソースにアクセスしようとすると、認証のためにログオンドメインにリダイレクトされます。
  3. ユーザーが認証すると、ログオンドメインは、ログインしたユーザーのユーザー名を含むセッション識別子を生成します。このセッションIDは、3つのドメイン間で共有秘密を持つ対称アルゴリズムを使用して暗号化されます。ログオンドメインは、ユーザーがすでにそこで認証されていることを示すために、フォーム認証Cookieも設定します。
  4. ログオンドメインは、セッション識別子を渡して保護されたリソースにリダイレクトします。
  5. 保護されたリソースを保持しているアプリケーションは、セッションIDを復号化してユーザー名を抽出し、そのドメインにフォーム認証Cookieを設定します。
  6. ユーザーは、2番目のドメインで保護されたリソースを要求します。
  7. 彼はまだ認証されていないため、ログオンドメインにリダイレクトされます。
  8. ユーザーはログオンドメインですでに認証されており、同じ手法を使用してセッションIDが生成され、返されます。
  9. 2番目のドメインは、セッションIDを復号化してユーザー名を抽出し、2番目のドメインのフォーム認証Cookieを発行します。

ユーザー名をセッション識別子に暗号化する代わりに、ログオンドメインはこの情報を共有(3つのドメイン間)データストアに保存するだけで、セッション識別子はこのレコードの識別子になり、他のドメインが取得できるようになります。この共有データストアのユーザー名。

于 2013-02-28T06:41:45.347 に答える
1

最後に、実装することができます。以下は私が行った手順です

  • App1にログイン
  • App2でログインするオプションを取得する
  • 「App2でログイン」をクリックします</li>
  • App2のログイン画面にリダイレクトします
  • SSOInMVCWcfServiceにリダイレクトするApp2のログインボタンをクリックします。ここで、メソッドLoginは、App1のサービス(つまりSSOAuthService)のメソッドAuthenticateを呼び出します。認証された場合、このユーザー名のトークンを生成し、App1のサービスからユーザーIDを取得します。
  • この認証されたユーザーのトークンが生成され、ユーザーIDが取得されると、これらの値がデータベースの「SessionDetails」というテーブルに入力されます。
  • 次に、現在のユーザーのユーザーIDとトークンをApp2に送信します。
  • これで、App2はreturnurl、つまりapp1の認証済みページURLを、ユーザーIDとトークンとともに、応答オブジェクトにCookieとして追加することにより、App1のログインページに送信します。
  • これで、App1ログインページでこれらのCookieが取得され、ユーザーIDに基づいて、現在のユーザー名が「SessionDetails」テーブルから取得されます。
于 2013-03-13T11:15:08.643 に答える