如何通过带有 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 的身份验证