您好我正在Azure上开发两个Web服务,并说" domain1.azurewebsite.net"和" domain2.azurewebsite.net"。我在同一个Active Directory下的两个服务中都实现了ACS身份验证。现在我需要通过domain1.azurewebsite.net登录并与domain2.azurewebsite.net共享cookie(其中包含auth令牌),以便我可以访问domain1中domain2的数据服务。
我已经按照在线建议,设置了cookie domain =" .azurewebsite.net"。我期望所有子域共享这样的cookie,即" *。azurewebsite.net",以便可以实现跨域目的。该设置在web.config中完成,如下所示
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false"
domain=".azurewebsites.net"
hideFromScript="false"
persistentSessionLifetime="0:30:0" />
<wsFederation passiveRedirectEnabled="true"
issuer="https://focusns.accesscontrol.windows.net/v2/wsfederation"
realm="urn:Focusns"
requireHttps="false"
persistentCookiesOnPassiveRedirects="true" />
</federationConfiguration>
</system.identityModel.services>
要启用跨域请求,我使用了CORS,并且我已正确设置了来自&#34; domain2.azurewebsite.net&#34;的响应标头。如下:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://domain1.azurewebsites.net
然而,我的问题是使用&#34; .azurewebsite.net&#34;登录domain1.azurewebsite.net时未附加域。当我使用Chrome,Opera,FF时,当我检查饼干时,我甚至看不到它们。但我确实在IE11中看到了cookie,其中一切正常。我发现链接browser security handbook part 2中不同浏览器之间存在差异,我怀疑其原因是IE不支持主机范围cookie。
无论如何,有人知道如何解决这个问题吗?我需要它在Chrome,FF等工作。提前感谢
答案 0 :(得分:5)
根据这个问题 Chrome34 ignores cookies with domain ".cloudapp.net",
拒绝为公共共享域后缀设置Cookie(此处列出:https://publicsuffix.org/list/effective_tld_names.dat)。和 “azurewebsites.net”就是其中之一。
IE没有这个限制,可能是因为MS拥有这两个限制。
解决方案可能是将网站映射到您拥有的自定义域/子域名。您无法在Azure中设置链式子域,例如“a.b.azurewebsites.net”。如果可以,您可以为“b.azurewebsites.net”设置cookie,Chrome允许。