Tag: http authentication

HTTP标头设置授权标头停止加载数据

我正在使用Ember.js,Ember Simple Auth插件和jQuery使用ajax发送Authorization标头跨域。 设置Authorization标头时: jqXHR.setRequestHeader(‘Authorization’, ‘Bearer ‘ + session.get(‘authToken’)); 然后我得到一个飞行前OPTIONS请求到REST URL,然后我返回以下标题: $headers->set(‘Access-Control-Allow-Origin’, ‘http://subdomain2.domain.com’); $headers->set(‘Access-Control-Allow-Methods’, ‘GET,PUT,POST,DELETE,OPTIONS’); $headers->set(‘Access-Control-Allow-Headers’, ‘Content-Type, Authorization, Accept’); $headers->set(‘Access-Control-Max-Age’, 10); $headers->set(‘Content-Length’, 0); 在Chrome网络监视器中,此OPTIONS请求返回成功。 然后当GET请求出现在飞行前OPTIONS请求之后, GET请求就会挂起或至少在网络监视器中说(pending) : 如果我在几秒钟之后刷新页面,页面将显示,但它在OPTIONS调用后不会立即显示。 当我使用Access-Control-Max-Age标头并增加缓存时间时,我可以在再次发送OPTIONS调用之前刷新很多次,这意味着页面将显示正常。 只有当OPTIONS调用在挂起后立即带有GET时才会出现。 当我直接在浏览器中加载url时,它显示JSON数据就好了。 即使我使用Chrome扩展程序Postman并手动设置Authorization标头与jQuery请求相同,它仍然可以正常加载数据(尽管我不认为Postman模拟跨域请求)。 知道为什么GET请求仍然未决并且没有返回任何错误或标题?

JQuery中的跨站点HTTP身份validation

我想看看是否可以登录使用HTTP身份validation的第三个站点。 理想情况下,浏览器将存储凭据。 不幸的是,每次都失败了。 任何帮助将不胜感激,我正在使用base64 Jquery插件,我已经测试过它。 那么,有两个问题: 如何查看HTTP状态代码? 这最终会起作用吗? $(“#login_button”).click(function() { var username = ‘myFunUsername’; var password = ‘myFunPassword’; $.ajax({ url: ‘http://remote-site-with-http-auth.com/member_site’, beforeSend: function(xhr) { xhr.setRequestHeader(“Authorization”, “Basic ” + $.base64.encode(username + “:” + password)); }, success: function(data) { $(“#label”).text(“Logged in, yay!”); } }).fail(function(){ $(“#label”).text(“It didn’t work”); }); }); 谢谢!!

使用HTTP基本身份validation的JQuery Ajax调用

我有一个基于REST的服务器,我试图使用JQuery进行通信。 XML和JSON都可用作响应格式,因此我使用的是JSON。 连接都是SSL,因此HTTP基本身份validation是我们选择的授权方法,我们对其他前端没有任何问题(原始Javascript,Silverlight等…) 现在我试图将一些东西与JQuery放在一起,并使用HTTP基本身份validation遇到无穷无尽的问题。 我已经仔细研究了之前的许多问题,其中大部分都有解决方案似乎没有实际工作或将整个问题归咎于跨源访问,我已经在基本的Javascript测试中克服了这些问题。 响应始终将Request Access-Control-Allow-Origin设置为请求中提供的Origin头,这可以在我的测试的响应中看到。 在基本的javascript中,这个完整的调用非常简单: req.open(‘GET’, ‘https://researchdev-vm:8111/card’, true, ‘test’, ‘testpassword’); JQuery尝试这是相当标准的: $.ajax({ username: ‘test’, password: ‘testpassword’, url: ‘https://researchdev-vm:8111/card’, type: ‘GET’, dataType: ‘json’, crossDomain: true, /*data: { username: ‘test’, password: ‘testpassword’ },*/ beforeSend: function(xhr){ xhr.setRequestHeader(“Authorization”, //”Basic ” + encodeBase64(username + “:” + password)); “Basic AAAAAAAAAAAAAAAAAAA=”); }, sucess: function(result) { out(‘done’); } }); 实际上似乎提供身份validation的唯一方法是在beforeSend()函数中直接插入Base64编码数据。 […]

如何使用JQuery AJAX阻止Firefox使用HTTP Basic Auth提示用户名/密码?

我正在编写一些浏览器端动态function,并使用HTTP Basic Auth来保护一些资源。 用户体验非常重要,并且高度定制。 这是一个简单的测试JQuery方法,最终将测试用户是否在表单中提供了正确的凭据: $(document).ready(function() { $(“#submit”).click(function() { var token = Base64.encode($(‘#username’).val() + ‘:’ + $(‘#password’).val()); $.ajax({ url: ‘/private’, method: ‘GET’, async: false, beforeSend: function(req) { req.setRequestHeader(‘Authorization’, ‘test:password’); }, error: function(request, textStatus, error) { if (request.status == 401) { alert(‘401’); } } }); return false; }); }); 如果他们不被允许访问/private ,他们此刻应该只看到警报框。 但是,在Firefox上,会弹出一个浏览器提供的登录表单(使用新凭据重试)。 Safari不会这样做。 我们希望通过自定义表单,淡入淡出,转换等完全控制体验。如何防止Firefox的默认框显示? (如果我们测试IE时会出现这个问题,我也很乐意在那里听到解决方案。)