AngularJS使用基本身份验证获取跨域

时间:2015-09-23 21:33:35

标签: angularjs

我试图询问休息服务。如果我使用CURL,我可以毫无问题地获取数据。

    curl -k -X GET -H "Accept: application/json" -u username:password "https://example.com/v1/apps"

但是,我尝试了几种使用Angular的$ http和$ resource服务提取数据的方法,似乎没什么用。

有没有人有一个很好的例子来说明如何使用Angular 1.4.6?

它既是跨域验证又是基本身份验证呼叫。

有很多"喜欢"那里有例子,但似乎没什么用。

1 个答案:

答案 0 :(得分:0)

希望这会让别人感到沮丧。一些事情导致了这个问题。

  • 目标网站上的证书无效。他们使用example.com的自签名证书作为域名。
  • 我正在使用的电话有一个资本' GET'在它里面,它应该都是小写的。

要解决问题1,我必须使用别名example.com将服务器的IP添加到我的主机。这是一个重大的黑客攻击,但有必要解决无效的域名问题。我正在与服务器所有者合作,准备好正确的证书。

对于呼叫本身,这里有一个有效的例子。我正在为auth标头使用其他服务。它只是基于用户名和密码的64位。用您最喜欢的base64(用户名:密码)工具替换AuthorizationService.getCredentials()。那里有几个。

    .factory( 
        'ApplicationDetailService',
        [
            '$resource', 'AuthorizationService',
            function($resource, AuthorizationService) {                    
                return $resource('https://example.com/v1/apps/:id', { id: '@id' },
                    { 
                        'get' : {
                            headers: {
                                Authorization: AuthorizationService.getCredentials()
                            }
                        }                            
                    }
                );
            }
        ]
    )

最后,因为目标服务器在其响应中没有传回Access-Control-Allow-Origin:*头。所有现代浏览器都要拒绝AJAX回归。

我假设它是一个Angular的东西,我错了。有一个名为Access-Control-Allow-Origin的Chrome插件:*我试过,它失败了,因为CORS在标题中需要您的域名。

我找到了Chrome - 禁用网络安全的标记,告诉Chrome忽略所有安全性。 公平警告:这会使您的会话非常不安全。仅对测试环境执行此操作。只需修改快捷方式,将标志作为参数传递给chrome.exe。

通过所有这些,我能够解决我的问题并继续开发,直到服务器团队修复了他们的事情。

祝你好运!