私は多くの投稿を読んでいますが、私が必要とするすべての情報を集めていますが、これを動作させることはできません。だから私は誰かが正しい方向に私を指すことができることを願っています。または、ダミープロジェクトがうまく機能している場合は、私が見ているすべての例は、私の要件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
期待
- ユーザーはW1にログインし、認証されたアクセスM1のURLはW1のURL
- 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:ログインコントロールにログインしていました。
"AutoGenerate"の代わりに有効な "decryptionKey"& "validationKey"を使用すると、アプリケーション全体で同じである必要があります。 検証アルゴリズムと復号アルゴリズムも同じでなければなりません。 –