【问题标题】:Authentication across across multiple domains (CORS) with NextAuth使用 NextAuth 跨多个域 (CORS) 进行身份验证
【发布时间】:2021-01-13 09:53:08
【问题描述】:

我想做一个从 domain1.com 到 domain2.com 的 XHR。 domain2.com 是一个使用 NextAuth 的 NextJS 应用。

问题是当我提出这个请求时,没有包含 domain2 的 cookie。我的代码是:

var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function(){
  if (httpRequest.readyState === XMLHttpRequest.DONE) {
    if (httpRequest.status === 200) {
      alert('send successful')
    } else {
      alert('Error:' + httpRequest.responseText)
    }
  }
};
httpRequest.withCredentials = true;
httpRequest.open('GET', url, true);
httpRequest.send();

服务器代码:

  const session = await getSession({ req })
  if(session == undefined || session.accessToken == undefined) { 
    res.statusCode = 500;
    res.send(JSON.stringify({'error': 'Not logged in'}));
    return;
  }

我该怎么做?

【问题讨论】:

    标签: cookies cross-domain next.js next-auth


    【解决方案1】:

    很遗憾,目前 NextAuth.js 并未明确支持这一点。

    您可以set custom cookie policies to support subdomains(例如 auth.example.com、www.example.com、cdn.example.com),但目前对于完全唯一的域,您需要为每个域设置不同的站点。

    某些平台(例如 Auth0)支持“静默登录”,通常涉及跨域 iframe 在不同域的站点之间传递消息(一个域是“规范”)。这是一个计划中的功能,可能不会在今年年底之前放弃。

    注意:对于某些 OAuth 提供者,您可以使用具有相同 OAuth 客户端/秘密的不同域,但并非所有提供者都是如此,但是如果您仅使用支持此功能的提供者,则可以将所有实例指向相同数据库。

    PS:如果您对如何执行此操作感兴趣,从技术上讲,您可以使用 postMessage API 从屏幕外 iframe 返回一个令牌(使用或不使用 NextAuth.js),该令牌指向“您选择用于登录的规范 URL;然后您可以读取该令牌以确定用户是否有会话。

    这不是太棘手。它变得复杂的地方是安全地执行此操作,因为这意味着取决于场景(例如,它是一个具有多个有效域和可能不同内容的 Web 应用程序,还是不同域上的多个完全独立的站点,您是否只对客户端感到满意饼干)。提供一个适用于所有人的单一解决方案是一个棘手的问题,我实际上还不确定在 NextAuth.js 中这会是什么样子。

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 2020-02-28
      • 2016-01-05
      • 2011-11-15
      • 2019-02-25
      • 2011-01-02
      • 2014-08-02
      • 2013-11-16
      • 2015-05-24
      相关资源
      最近更新 更多