OAUTH2如何跨多个域使用会话

问题描述 投票:0回答:1

背景

我有一个 Azure 静态 Web 应用程序,为 React SPA 提供服务,并在自定义域(我们称之为 mysite.com)上连接了 Azure Functions 后端。它使用 Azure 基本身份验证(又名 EasyAuth)。现在我有一个为 Postgres 和 pg_tileserv 提供服务的虚拟机。在该虚拟机上,我在子域 (tiles.mysite.com) 上的 pg_tileserv 前面有 oauth2_proxy。如果我在浏览器中打开tiles.mysite.com,那么我可以很好地进行身份验证,并且在独立的基础上,它可以工作。

我的问题

我希望能够从 Web 应用程序的虚拟机中获取图块,但我无法从主站点上的会话对tileserv 进行身份验证。

我尝试过的事情

我尝试在 mysite.com 上添加一个转到tiles.mysite.com 的 iframe。 iframe 将从现有 cookie 登录,无需用户干预,但当我获取图块时,它不会将这些 cookie 带到获取请求中,因此这些请求会失败(获取 302)。

努力避免

我知道我可以将 nginx 和 uvicorn 放在我的虚拟机上,并在那里托管 webapp 和 api,以便所有身份验证都集中在一个地方,但我有点喜欢资源分离。

所需的解决方案

我对几乎任何其他方法都持开放态度。不过,我宁愿不必订阅更多 Azure 服务(例如 Front Door)。如果可以以某种方式解决我的问题,我不介意从 oauth2_proxy 切换或添加 nginx。

javascript azure authentication oauth-2.0 session-cookies
1个回答
0
投票

从逻辑上讲,您的 Web 应用程序应该能够调用 API 来获取数据。您当前的架构似乎阻止了这种情况:

  • API 将放置在您的 VM / Postgres 组件前面,并且需要访问令牌。

  • 但是使用 OAuth 代理可以防止这种情况,因为它会拒绝任何 API 请求。

所以我会关注这种方法:

  • 客户端始终负责触发用户登录。

  • API 提供数据并且只需要访问令牌。他们可以返回 HTTP 401 状态代码来指示客户端何时需要触发登录。

一个好的第一步可能是引入像 NGINX 这样的 API 网关,正如您所建议的:

  • 路由 1 的工作方式与现在一样,并使用 OAuth 代理
  • 路由 2 提供了一个 API 路由,您可以使用 Azure 颁发的访问令牌来保护该路由
© www.soinside.com 2019 - 2024. All rights reserved.