【发布时间】:2015-01-07 13:52:55
【问题描述】:
我正在使用 MVC 5 中的用户管理执行 SSO 应用程序,但例如我无法在应用程序之间共享 cookie
http://SSO
http://app
IIS 中的不同站点,我认为这类似于跨域,所以在 app2 中,当我在 startup.auth 中有类似的东西时
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "sharedcookie",
CookieDomain = "SSO",
CookieHttpOnly = false,
//CookieDomain = "localhost",
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
更新: 感谢 Chris Pratt 回答说没有办法做到这一点,这让我想到了另一个问题 我可以在两者之间共享一个 cookie
name1.domain.com/app1 and
name2.domain.com/app2
使用 OWIN?
【问题讨论】:
-
应用程序是否在完全不同的域中,而不仅仅是同一域中的不同子域?如果您正在处理子域,您可以在域上设置 cookie,然后它将与该域的所有子域共享。但是,如果您拥有完全不同的域,则 100% 不可能共享 cookie。时期。 Cookie 是域绑定的。
-
所以我的单点登录必须在同一个域上,但可以有不同的子域。咳咳!!!
-
我可以共享一个像 name.domain.com/app1 和 name2.domain.com/app2 这样的 cookie 吗?
-
是的。但是,您还需要确保所有站点的机器密钥都相同,否则即使站点接收到 cookie,它仍然无法理解它。更多信息在这里:technet.microsoft.com/en-us/library/cc755177%28v=ws.10%29.aspx。可以对多个不同的域进行 SSO,但它要复杂得多。
-
如果 cookie 设置在 *.domain.com 上,那么所有子域都将获得该 cookie(sub1.domain.com、sub2.domain.com 等)。之后的路径不予考虑。然而,就像我说的,仅仅接收 cookie 并不总是足够的。如果 cookie 中有像加密会话 id 这样的东西,那么站点 A 设置的 cookie 对站点 B 来说基本上就是垃圾,除非它们使用相同的加密方案。这就是机器密钥的用武之地。
标签: asp.net-mvc cookies single-sign-on owin shared