如何通过带有 cookie 身份验证的 Javascript 获取 JSON 数据?

Posted

技术标签:

【中文标题】如何通过带有 cookie 身份验证的 Javascript 获取 JSON 数据?【英文标题】:How to get JSON data via Javascript with cookies authentication? 【发布时间】:2011-10-15 23:58:54 【问题描述】:

我正在使用 Ruby on Rails 构建一个应用程序。该应用程序是一个 javascript 应用程序,它通过来自 api 应用程序的 JSON 调用获取数据。它还为应用程序本身和api 提供跨域身份验证。

我通过使两个应用程序 cookie 具有相同的秘密会话密钥和相同的名称来处理跨域身份验证,例如_app_an_api_session.

现在,我会写下场景,当它失败时我会告诉你。

应用域为domain.local api 域api.domain.local

假设api.domain.local/me 是一个受保护的页面。当我打开它时,我得到了unauthenticated

当我转到应用程序和sign in 并再次转到api.domain.local/me 时,我可以看到其中的数据。 [通过] [它也适用于相反的动作]。

问题是,例如在sign in之后我想在domain.local中加载api.domain.local/me内容[JSON数据],我可以在控制台中看到status(canceled)

另外为了调试。我试图在对api 的每个请求中查看env 变量。因此,当我直接访问api.domain.local/me 时,我可以在控制台中看到 cookie 哈希,否则如果通过真实应用程序,则根本没有 cookie/会话。

那么,如何才能做到这一点呢?

【问题讨论】:

【参考方案1】:

您的问题是阻止不同域和子域之间通信的同源策略。您可以通过使用代理、JSON-P 或 external proxy 来解决此问题。

【讨论】:

跨域的 cookie 工作正常,因为两个应用程序共享一些身份验证 cookie。问题是获取需要通过 Javascript 进行身份验证的 /me 的数据 它不起作用。我可以加载不需要身份验证的/user/2。但我可以加载需要身份验证的/me 我认为这是通过 xhr 请求发送凭据的问题。我猜 Twitter 用 xd 接收器来处理这个问题。你有这方面的经验吗?

以上是关于如何通过带有 cookie 身份验证的 Javascript 获取 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5

使用 Spring Security 和 Redis 对带有 Java 配置的 RESTFul api 进行基于 Cookie 的身份验证

带有 DRF 的 cookie 的 Nuxt 身份验证

使用带有 KONG API 网关的 cookie 进行 JWT 身份验证

如何在身份验证中使用 JWT?

带有内置登录视图和身份验证表单的 Django “记住我”