使用ACS身份验证进行azure开发中的跨域cookie

时间:2014-07-21 19:52:48

标签: authentication azure cookies cross-domain acs

您好我正在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等工作。提前感谢

1 个答案:

答案 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允许。