0

我们在 azure 上托管了一个通配符域。我已经设置了 subdomain.domain.com 以重写到 domain.com/subdomain。一切正常。

但是,当我登录到我们的身份服务器时,一旦登录过程完成并且我被重定向回 subdomain.domain.com,身份验证令牌似乎丢失了。

我看不出这怎么可能。我们所有的身份提供商(谷歌、Facebook、Microsoft live)都会出现这个问题

如果我将设置更改为使用 domain.com/subdomain 那么一切都按预期工作

4

1 回答 1

0

主要问题是您的身份服务器放置什么类型的 cookie,它看起来像您的服务器放置和特定于域的 cookie,而不是通配符。

Cookie 域

用于身份验证的 cookie 的常见问题是 cookie 的域。与 cookie 的路径类似,如果 cookie 是在两个不同的子域上创建的,那么 cookie 只能在创建它的域上访问。例如,您的主应用程序可能在 www.domain.com 上,但您在 cs.domain.com 上运行了 Telligent Evolution。如果您在 www.domain.com 上创建 cookie,浏览器只会将其发送到该域,并且在导航到 cs.domain.com 时不会传递。

可以通过将域设置为“.domain.com”来保留 cookie。Cookie 不使用常见的“*”通配符。只需使用“.domain.com”。使用此条目,浏览器在转到 cs.domain.com 时也不会传递 cookie。

与路径一样,域可以在 web.config 中或通过代码指定。在设置 web.config 文件时,它只会检查授权 cookie。您必须进行此设置,站点才能正确识别新的域级别 cookie:


<authentication mode="Forms">
  <forms name=".CommunityServer" ... domain=".domain.com" />
</authentication>

FormsAuthentication.SetAuthCookie 方法会忽略“域”名称,因此您必须在创建 AuthCookie 时在登录页面上手动设置它。例如:

HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true);
cookie.Domain = ".domain.com";
Response.Cookies.Add(cookie); 
于 2015-06-24T07:45:34.540 回答