为不同的域设置或获取cookie(不在子域上)

时间:2018-04-15 20:28:38

标签: asp.net-core asp.net-core-2.0

我有一个文件服务器,或者更多的个人CDN,我希望防止未经授权的访问。假设可以通过https://www.personalCDN.com访问此个人CDN,并且对此文件服务器的请求来自以下域:

1- https://www.Application1.com
2- https://www.Application2.com
3- https://www.WebSite1.com

如果我希望身份验证层基于cookie,当用户登录到这三个域中的任何一个域时,https://www.personalCDN.com的cookie将被添加到浏览器中,然后它将是主文件服务器使用,如何处理ASP.Net Core 2.x中的这种情况?我已经读过,在JavaScript中不允许为其他域编写cookie,它是否也适用于Asp.Net?

1 个答案:

答案 0 :(得分:0)

这不是JavaScript的限制,一般来说它是一个功能限制。 Cookie受域限制。它们只能写在响应源自的域上。同样,cookie只能由设置它的域读取。这是出于安全原因,并且绝对没有办法解决它。

您需要的是SSO(单点登录)解决方案,这不是一件容易的事情。您基本上有一台服务器充当auth网关。您的其他网站将用户重定向到该服务器以进行登录,用户登录auth网关,其中为该域设置了cookie(即auth.domain.com)。这使用户可以登录网关。然后,用户将用户重定向回原始站点。然后,该令牌通过API反向信道验证到auth网关。如果令牌有效,则原始网站“登录”用户,同时为其域设置cookie。冲洗并重复所有其他网站。

对于类似CDN的内容,您可能需要在同一域的子域上托管的站点(因为CDN本身无法协调身份验证过程)。然后,该站点将设置一个通配符域cookie,CDN也可以使用它。

您可以自己设置所有这些基础架构(不推荐),也可以使用IdentityServer这样的第三方库来简化实施。此外,您可以将整个shebang外包给第三方提供商,例如Auth0,它实际上已成为您的网关。