jquery - 使用 jQuery 进行跨域基本身份验证

标签 jquery grails jsonp basic-authentication

这是我的问题:我正在开发一个可以轮询以检索动态数据的系统。它在 Grails 中,当我对某个 Controller 操作发出请求(例如“http://localhost:8080/foo/bar”)时,会返回一个包含最新数据的 JSON 列表。

为了增加安全性和功能,我使用 Spring Security(Grails Acegi 插件)保护我的页面,并启用了基本身份验证。当您登录时,系统会自动加载有关您的用户配置文件的信息,并更改返回的数据。因此,身份验证是强制性的。

这有效:我可以从任何浏览器轮询我的操作,并且数据将被返回。我的 Grails 应用程序中有一个调用此 URL 的 JavaScript 脚本。

问题是我想将我的 JavaScript 脚本外部化以将其分发给客户,以便他们可以构建自己的 HTML 文件,插入我的 JavaScript 文件,并能够访问我的数据(有点像 API)使用 AJAX。就像这样:

$.ajax(url: urlWithParams, 
       method: 'GET', 
       beforeLoad: function(xhr) { 
           xhr.setRequestHeader('Authorization', authString);
       },
       success: myFunction
});

但是,它不起作用。首先,我知道跨域 GET 请求很棘手。但就我而言,我使用基本身份验证,这比较棘手,因为我需要将凭据直接放入 XmlHttpRequest 中,这会在 Firefox 中生成预检请求(用 OPTIONS 替换 GET),而我的 Grails 应用程序不处理它.

我的问题非常具体。我使用基本身份验证来防止恶意访问,但是由于一些跨域限制,我无法使用正确的凭据访问我的应用程序!

我该怎么办!我尝试使用 IFrame,但无法获取页面内容(我收到“访问被拒绝”错误 - 再次出现跨域限制)。

此外,ajax() 函数中的 jQuery 用户名和密码字段不起作用。

我可以在未 protected 页面上执行简单的 AJAX GET 请求,发送凭据作为参数,然后该页面将使用凭据重定向到 protected 页面吗?浏览器不会破坏请求,但我可以使用基本身份验证凭据进行重定向吗?

我有一种感觉,它不会工作(与重定向有关,它会生成一个新请求,等等......)。我是对的,还是应该有效?

JSONP 可以解决这个问题吗?但是,我不知道如何使用 JSONP 集成基本身份验证...

非常感谢!

最佳答案

我使用 JSONP 解决了我的问题。我修改了我的应用程序,以便 AJAX 调用不需要基本身份验证。 jQuery 中的 $.getJSON() 方法成功了。

关于jquery - 使用 jQuery 进行跨域基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393489/

相关文章:

javascript - 展开/折叠切换不会随着内容展开而向下 float

grails - 从Groovy服务类中的应用程序读取XML文件

java - 在 Java 之前编译 Groovy 后,Grails 应用程序(配置文件rest-api)陷入困惑

.net - 带有加扰的非 ASCII 字符的 JSONP 字符串

javascript - 将 jQuery/AJAX 与 JSONP 结合使用时无响应

json - 差异 : JSONP vs GET

javascript - 如何与数据库检查用户名和密码以显示错误消息?

javascript - 想要内联列表左右消失

javascript - 单击时将 div 附加到文档不起作用,为什么会这样?

hibernate - GORM查询过滤器不是类的直接属性