具有 ACS 身份验证的 azure 开发中的跨域 cookie
Posted
技术标签:
【中文标题】具有 ACS 身份验证的 azure 开发中的跨域 cookie【英文标题】:cross domain cookies in azure development with ACS authentication 【发布时间】:2014-09-12 10:56:30 【问题描述】:您好,我正在 Azure 上开发两个 Web 服务,分别是“domain1.azurewebsite.net”和“domain2.azurewebsite.net”。我已经在同一个 Active Directory 下的两个服务中实现了 ACS 身份验证。现在我需要通过domain1.azurewebsite.net登录,并把cookie(包含auth token)分享给domain2.azurewebsite.net,这样我就可以访问domain1中domain2的数据服务了。
我已按照在线建议设置了 cookie 域 =“.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,并且我已经正确设置了来自“domain2.azurewebsite.net”的响应标头,如下所示:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://domain1.azurewebsites.net
但是,我的问题是登录 domain1.azurewebsite.net 时未附加具有“.azurewebsite.net”域的 cookie。当我检查 cookie 时,我什至看不到它们,当我使用 Chrome、Opera、FF 时。但我确实在 IE11 中看到了 cookie,其中一切正常。我在链接browser security handbook part 2中发现了不同浏览器之间的差异,我怀疑原因是IE不支持host-scope cookie。
无论如何,有人知道我该如何解决这个问题吗?我需要它在 Chrome、FF 等中工作。提前致谢
【问题讨论】:
【参考方案1】:根据这个问题 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 允许这样做。
【讨论】:
看到这个禁止列表确实解决了我的问题。我不知道存在这样的禁止 cookie 域列表。以上是关于具有 ACS 身份验证的 azure 开发中的跨域 cookie的主要内容,如果未能解决你的问题,请参考以下文章
通过 Azure 的 OpenID Connect 进行联合身份验证