奇怪的角度休息呼叫行为

时间:2016-02-04 11:01:55

标签: angularjs rest jira jira-rest-api

我使用Angular来调用Atlassian JIRA的REST API。 Angular用于设备上的离子框架应用程序环境中。

curl

curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'Content-Type: application/json' --data-binary '{"transition": {"id": "761"}}'

工作并产生所需的结果。

但是,如果我使用常规角度

执行查询
curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'X-Atlassian-Token: nocheck' -H 'User-Agent: Mozilla/5.0 (Linux; Android 5.0; Intellibook Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Safari/537.36' -H 'Content-Type: application/json' --data-binary '{"transition": {"id": "781"}}'

已创建。我已验证此卷曲正常如果User-Agent的标题已删除。 角度有可能进行这样的操作吗?

修改

这里生成请求的JS:

这里是配置部分:

.constant('ApiEndpoint', {
    url: 'someUrl'
  })
.config(['$httpProvider', function ($httpProvider) {

    $httpProvider.defaults.headers.common['X-Atlassian-Token'] = 'nocheck';
  }])

这里是方法内容:

var postData = '{"transition": {"id": "' + transition + '"}}';
      $http({
        url: ApiEndpoint.url + 'issue/' + issueKey + "/transitions",
        method: "POST",
        data: postData,
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(function (response) {
          //some stuff
        },

1 个答案:

答案 0 :(得分:0)

如果要删除User-Agent标题,请执行以下操作:

.config(['$httpProvider', function ($httpProvider) {
    delete $httpProvider.defaults.headers.common['User-Agent'];
}]);

以下是有关$http的{​​{3}}的一些信息(请参阅安全注意事项部分)

  

XSRF是一种攻击技术,攻击者可以通过它攻击技术   经过身份验证的用户无意中在您的网站上执行操作。   Angular提供了一种对抗XSRF的机制。执行XHR时   请求,$ http服务从cookie中读取令牌(默认情况下,   XSRF-TOKEN)并将其设置为HTTP标头(X-XSRF-TOKEN)。仅限   在您的域上运行的JavaScript可以读取cookie,即您的服务器   可以放心,XHR来自运行在你身上的JavaScript   域。不会为跨域请求设置标头。

     

要利用这一点,您的服务器需要在一个令牌中设置一个令牌   在第一个HTTP上称为XSRF-TOKEN的JavaScript可读会话cookie   GET请求。在随后的XHR请求中,服务器可以验证   cookie匹配X-XSRF-TOKEN HTTP标头,因此请确保   只有您域上运行的JavaScript才能发送请求。   对于每个用户,令牌必须是唯一的,并且必须由   服务器(防止JavaScript编写自己的令牌)。我们   建议令牌是您网站身份验证的摘要   带有盐的饼干,以增加安全性。

     

可以使用xsrfHeaderName和指定标题的名称   $ httpProvider.defaults的xsrfCookieName属性   config-time,运行时$ http.defaults或每请求配置   对象

     

为了防止多个Angular环境中的碰撞   应用共享相同的域或子域,我们建议每个   应用程序使用唯一的cookie名称。

xsrfHeaderName - {string} - 用XSRF标记填充的HTTP标头的名称。 xsrfCookieName - {string} - 包含XSRF令牌的cookie的名称。

$http({
        url: ApiEndpoint.url + 'issue/' + issueKey + "/transitions",
        method: "POST",
        data: postData,
        headers: {
          'Content-Type': 'application/json'
        },
        xsrfHeaderName: 'XSRF-Header-Name',
        xsrfCookieName: 'XSRF-Cookie-Name'
      })