【问题标题】:Cookie Auth: Making requests from localhost to live servicesCookie Auth:从本地主机向实时服务发出请求
【发布时间】:2018-01-28 23:10:05
【问题描述】:

在我正在开发的平台上,我们在 Express.js 服务器上运行 React 前端,当在 localhost 上开发时,我们在设置的暂存环境(从 localhost)中调用我们的 API在云中拥有自己的域。

我们最近在暂存环境中的 API 网关级别 (Zuul) 设置了 cookie 身份验证。由于我们在开发时直接在 localhost 上运行我们的 React 应用程序(没有 Zuul 网关),因此该应用程序在没有首先进行身份验证的情况下调用暂存 API(没有 auth cookie)。这导致我们的 localhost 设置在对 API 的所有请求上都失败。我尝试了一些将令牌注入浏览器或强制它们在应用程序中设置的解决方案,但是 x-origin 请求(从 localhost 到 staging)仍然存在问题。

我开始质疑我们的前端开发设置。由于我们的 API 在我们的多个实时环境中设置的方式,我们很难在本地运行我们的 API 并连接到实时数据库和中间层服务。所以,我更愿意找到一种方法来使这些请求从 localhost 到 staging 工作。

我们有需要访问这些服务的服务器端和客户端请求 (ajax),我们正在使用 Axios 来处理这些请求。我在想可能有办法通过设置/etc/hosts 和代理请求来做到这一点,但我不确定如何做到这一点。

在有身份验证的微服务环境中开发时,是否有推荐的方法来解决前端应用程序的本地开发设置?在本地开发时,我们不应该尝试使用实时 API 吗?建议表示赞赏。

【问题讨论】:

    标签: javascript authentication localhost frontend netflix-zuul


    【解决方案1】:

    想到一个问题和一条建议。

    1. 您可能遇到了跨域资源共享 (CORS) 问题。基本上,如果浏览器阻止您访问不同的域以避免恶意攻击,除非服务明确允许这样做。例如,如果您的前端应用程序在 www.mydomain.com/app 中运行,而您的 api 在 www.mydomain.com/api 中,则不会有问题。但是,如果您的前端应用程序在 www.mydomain.com 上运行并且您的 api 在 api.mydomain.com 上,那么您的 api 必须明确允许来自 www.mydomain.com 的请求。 localhost 也是如此,因为它被视为不同的域。配置取决于您拥有的服务器类型,您应该在其文档中查找它。

    2. 现在大多数 API 都遵循 Rest 架构,这使得这些 API 无状态。这意味着 API 不关心任何客户端的状态。不幸的是,cookie 不是这种情况,因为它们必须同时保存在服务器端和客户端,因此它们是有状态的。如果您想改进 API 的设计,我建议您使用令牌,更具体地说是 JSON Web 令牌 (JWT)。 JWT 是无状态的,而且对于服务器来说处理起来也更便宜,因为不需要跟踪它。它基于最初使用编码算法生成的数字签名工作,并使用解码算法完成验证。 Here 一个很好的完整比较。

    【讨论】:

    • 我很欣赏这个答案,但我们知道这两条建议。 1 - 启用 CORS,2 - 您可以将 JWT 存储在 cookie 中。
    • 2 - 是的,如果需要服务器端渲染,这是必要的。此外,如果您从客户端设置 cookie,请确保您正在设置路径。否则,你会遇到麻烦。
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多