2017-06-27 1 views
0

私は多くの投稿を読んでいますが、私が必要とするすべての情報を集めていますが、これを動作させることはできません。だから私は誰かが正しい方向に私を指すことができることを願っています。または、ダミープロジェクトがうまく機能している場合は、私が見ているすべての例は、私の要件2を特に扱っていません。SSO FormsAuthentication - 2アプリケーション - 1 x WebFormsと1 x MVC

FormsAuthenticationを使用する既存のWebForms(W1)アプリケーションがあります。これをMVCに移行する際に、MVC(M1)アプリケーションを「横並び」に作成し、そこに新しい機能を実装したいと考えています。 (現在、W1アプリケーション全体をMVCに移植することはできません)。既存のFormsAuthenticationは、両方のサイトで維持され、使用されます。

両方のアプリケーションが同じIIS上で異なるサブドメインで実行されます:

  • w1.mydomain.com
  • m1.mydomain.com

期待

  1. ユーザーはW1にログインし、認証されたアクセスM1のURLはW1のURL
  2. M1のアプリケーションは、ユーザが

が ソリューション

実装、他のアプリケーションのためのユーザをログアウトするかW1またはM1を介してログに記録された「知る」必要があるだけでなくとして

ログイン:

  • 共有ドメインレベルすなわちmydomain.com
  • で認証Cookie W1からW1に成功したログインに
  • ユーザ認証クッキーを設定するM1にリダイレクトバックM1からリダイレクト

ログアウト:

  • W1/M1コールFormsAuthentication.SignOut()。その後、同じ

構成

/アカウントで

W1

web.configファイル

<machineKey decryption="AES" validation="HMACSHA256" decryptionKey="AutoGenerate" validationKey="AutoGenerate" /> 
<authentication mode="Forms"> 
    <forms loginUrl="~/account/login" timeout="120" defaultUrl="~/" domain=".mydomain.com" /> 
</authentication> 
<compilation targetFramework="4.6.1"></compilation> 
<!-- requestValidationMode needs to remain --> 
<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" 
      maxRequestLength="20480" executionTimeout="300" /> 

ログイン制御を行うために、他の側にリダイレクト/ログイン

<asp:Login ID="idLogin" runat="server" ViewStateMode="Disabled" DestinationPageUrl="~/sso/BounceLogin.aspx" > 

BounceLoginのコードビハインド。ASPX:

public partial class BounceLogin : Page 
{ 
    protected void Page_Load(object aSender, EventArgs aArgs) 
    { 
     Response.Redirect("https://m1.mydomain.com/sso/login"); 
    } 
} 

M1

のweb.config

<machineKey decryption="AES" validation="HMACSHA256" decryptionKey="AutoGenerate" validationKey="AutoGenerate" /> 
<compilation debug="true" targetFramework="4.6.1" /> 
<httpRuntime targetFramework="4.6.1" /> 
<authentication mode="Forms"> 
    <forms loginUrl="https://w1.mydomain.com/account/login" timeout="120" domain=".mydomain.com" /> 
</authentication> 

SSOコントローラー:

public class SsoController : Controller 
{ 
    [Authorize] 
    // GET: Secure 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Status() 
    { 
      return View(new ViewModel 
      { 
       TheUser = User 
      }); 
    } 

    public ActionResult Logout() 
    { 
     FormsAuthentication.SignOut(); 
     return Redirect("https://w1.mydomain.com/"); 
    } 

    public ActionResult Login() 
    { 
     FormsAuthentication.SetAuthCookie("[email protected]", false); 
     return Redirect("https://w1.mydomain.com/sso/BounceLoginReturn"); 
    } 
} 

相互作用

テストユーザーと一緒にログインすると、[email protected]となります。 (コードを簡単にするために、私はM1に渡すユーザー名を省略しました)。

A.のw1.mydomain.com/account/login - 成功したログインを実行し、

B.のm1.mydomain.com/sso/login m1.mydomain.com/sso/loginへのリダイレクト - セットユーザー[email protected]のためのクッキーとはw1.mydomain.com/BounceLoginReturnにリダイレクト

私はw1.mydomain.com/BounceLoginReturn W1に戻ったときまだ私がログインしていないです考えて

問題私をリダイレクトしますo w1.mydomain.com/account/login。 (別のブラウザのタブでM1を開くと、私は[email protected]としてログインしています)

私はw1.mydomain.comとm1.mydomain.comの両方に同じクッキー値が設定されていることを確認しましたドメイン.mydomain.com。

ここで間違ってW1にログインしていないと思うのですが、最初はasp:ログインコントロールにログインしていました。

+0

"AutoGenerate"の代わりに有効な "decryptionKey"& "validationKey"を使用すると、アプリケーション全体で同じである必要があります。 検証アルゴリズムと復号アルゴリズムも同じでなければなりません。 –

答えて

0

誰かがこの問題を抱えている場合、解決策は簡単だと分かります。上の私のコードは機能的に正しい。しかし私は、ハードコーディングされたキーを使用する必要がありました:

<machineKey decryption="AES" validation="HMACSHA256" decryptionKey="{Hard Coded Key Here}" validationKey="{Hard Coded Key Here}" /> 

は、サイトのヒープは、これらを生成するためにそこにありますが、最も簡単な方法は、それ自体IISを使用している:

enter image description here

をしてから使用します」右側に「Generate Keys」と表示されます。

関連する問題