我使用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
},
答案 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'
})