Javascript 保护CORS:是否有使用cookie的安全方案?

Javascript 保护CORS:是否有使用cookie的安全方案?,javascript,jquery,ajax,cookies,cross-domain,Javascript,Jquery,Ajax,Cookies,Cross Domain,我有两个web服务器在两个不同的端口上响应。我有一个主web服务器,它为一个网站提供大量javascript支持HTTP摘要身份验证,辅助web服务器只执行可以直接访问(始终使用HTTP摘要)的CGI,或者可以通过与主web服务器相关的ajax请求通过CORS访问的CGI。两台服务器共享相同的用户凭据 我的问题是,当javascript向辅助Web服务器发出请求时,我不希望浏览器提示输入凭据 我的想法是,我可以在ajax请求中向辅助web服务器添加一些特殊的头,如果存在这个头,我可以忽略HTTP

我有两个web服务器在两个不同的端口上响应。我有一个主web服务器,它为一个网站提供大量javascript支持HTTP摘要身份验证,辅助web服务器只执行可以直接访问(始终使用HTTP摘要)的CGI,或者可以通过与主web服务器相关的ajax请求通过CORS访问的CGI。两台服务器共享相同的用户凭据

我的问题是,当javascript向辅助Web服务器发出请求时,我不希望浏览器提示输入凭据

我的想法是,我可以在ajax请求中向辅助web服务器添加一些特殊的头,如果存在这个头,我可以忽略HTTP身份验证。由于服务器共享用户凭据,如果用户能够登录到主web服务器,那么他也可以登录到第二个web服务器


使用固定的标题当然是无用的。所以问题是:CORS中是否有一种机制来告诉辅助Web服务器用户已经在第一个Web服务器中进行了身份验证?类似于在cookies中交换代币的安全方式吗?

我不确定这与CORS有什么关系。您需要的是针对两个不同服务器的单一登录解决方案。您可以实现一个全面的OAuth解决方案,或者自己编写一个简单的解决方案

对于简单的基于令牌的身份验证,您需要执行以下操作:

  • 当用户登录到您的网站时,发送一个即将到期的令牌(通过SSL),该令牌授予用户访问web服务的权限
  • 获取令牌并对web服务中未经身份验证的端点执行GET请求。如果令牌有效且未过期,请将身份验证令牌发送回浏览器

  • 只要您的web服务正确实现HTTP身份验证,就会设置cookie,并且服务调用不会提示您输入凭据。

    如果只是不同的端口,则会在这些来源之间共享cookie。因此,如果您确信用户访问源代码1时设置了cookie,则只要(假设您使用的是
    XMLHttpRequest
    with credentials
    设置为true,cookie将包含在对源代码2的请求中

    现在,当然这些cookie应该包含一些身份验证数据,在您让它们绕过HTTP身份验证之前,您需要验证这些数据


    希望您使用的是HTTPS,这样凭据就不会受到网络攻击者的攻击。

    通过AJAX请求,您还可以将令牌发送到第二台服务器,在那里您可以查询第一台服务器以检查令牌是否有效?必须启用第二台服务器上的CORS。在服务器1上设置cookie不会有帮助,因为在第二台服务器上无法访问该cookie。为了在浏览第一台服务器时向第二台服务器发出(2)GET请求,必须启用CORS,否则我不明白您的意思?抱歉,我认为我的措辞有点混乱。是的,CORS是你需要处理的事情,但听起来你已经解决了CORS问题。即使您不想使用CORS,也可以在JSONP、hidden image和其他一些解决方法中交换令牌。我的意思是,您实际上是在寻找一个SSO解决方案,无论CORS与否,它都是一样的。这就是说,由于您在同一个域上,您的站点可以共享cookie,这是事实。如果这不是一个选项,让我知道,我可以扩展的答案。