我已经阅读了很多帖子,虽然我收集了所有需要的信息但是我无法使用它。所以我希望有人可以指出我正确的方向。或者如果你有一个更好的工作虚拟项目。我看到的所有例子都没有具体处理我的要求2.
我有一个使用FormsAuthentication的现有WebForms(W1)应用程序。作为将其迁移到MVC的一部分,我们希望创建一个MVC(M1)应用程序"以及#34;它并在那里实现新的功能。 (目前,将整个W1应用程序移植到MVC的范围已超出范围。)现有的FormsAuthentication将被维护并用于两个站点。
两个应用程序都将在同一个IIS上运行,但在不同的子域下运行:
期望
已实施解决方案
登录:
注销:
配置
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" />
登录控制/ account / login
<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("test@mydomain.com", false);
return Redirect("https://w1.mydomain.com/sso/BounceLoginReturn");
}
}
相互作用
因此,当我使用我的测试用户登录时会发生什么:test@mydomain.com。 (我已经省略了传递给M1的用户名来保持代码更简单。)
一个。 w1.mydomain.com/account/login - 执行成功登录并重定向到m1.mydomain.com/sso/login
B中。 m1.mydomain.com/sso/login - 为用户test@mydomain.com设置cookie并重定向到w1.mydomain.com/BounceLoginReturn
问题
当我返回w1.mydomain.com/BounceLoginReturn时,W1仍然认为我没有登录并将我重定向到w1.mydomain.com/account/login。 (如果我在另一个浏览器选项卡中打开M1,它会告诉我我以user@test.com身份登录)
我已经检查过,并且w1.mydomain.com和m1.mydomain.com都为域.mydomain.com设置了相同的Cookie值。
所以我在这里做错了让W1认为我没有登录记住我最初通过asp登录:它包含的登录控件?