web-dev-qa-db-ja.com

2つのWebアプリケーション間で認証を共有する

Ieの下で実行されているベースWebサイト(Asp.net WebFormsアプリケーション)があります。

http://localhost:90/

次に、新しい(今回はAsp.net MVC)アプリケーションを作成し、その下に追加しました

http://localhost:90/mvc/

ただし、単純な仮想フォルダーとしてだけでなく、と比較して、実行するために別のアプリケーションプールを定義することによりアプリケーションフォルダーとして親アプリケーション。

ブラウザは、基本的に同じドメインに2つの異なるアプリケーションがあることを認識できないため、次のように機能します。

  1. ユーザーアクセスhttp://localhost:90/
  2. 親アプリはユーザーをフォーム認証画面にリダイレクトします
  3. ユーザーは正常にログインします
  4. 親ウェブは認証クッキーを追加します
  5. ユーザーがhttp://localhost:90/mvcにアクセスします
  6. ブラウザは親アプリから同じCookieを添付します

この同じCookieに基づいてユーザーを認証することは可能ですか?共有認証画面を持つように、親アプリにログインリダイレクトするようにMVCアプリケーションを構成します。しかし、その時点から誰が認証して作業するのか知りたいのですが。

この種の機能を提供するために同じsystem.web/machineKey値を共有することについて何か読んだことがありますが、実際の例をいくつか示したいと思います。

これらの2つのアプリケーションはセッション状態を共有できず、共有したくないので問題にはならないことは承知しています。私が欲しいのは一種のシングルログイン(SSO/SSS)です

これは可能ですか?どのように?

重要

これに関する他の質問/回答を読みましたが、クロスドメイン/クロスサーバーなどについて質問しています。これは同じIIS Webサイトにあります。

32
Robert Koritnik

自分で見つけました。

これは、このシナリオについて正確に説明しているMSDNの記事です。とにかく、同じ情報を後で追跡する人のために、この質問を続けることにしました。

MSDN:アプリケーション間のフォーム認証

簡単に言えば

両方のアプリケーションのweb.configでマシンキーを構成して、それらが一致するようにする必要があります。これにより、相手が生成したデータをデコードできるようになります。そして、それが全体のトリックです。 MSDNの記事では、これらのキーの生成方法を含め、これについて詳しく説明しています。

37
Robert Koritnik

それでも誰かがキーを共有できない場合は、compatibilityMode="Framework20SP1"

<machineKey validationKey="same key all over" 
            decryptionKey="same key all over" 
            validation="SHA1" decryption="AES"
            compatibilityMode="Framework20SP1"/>
7
Syed Umar Ahmed