Angularjs 奇怪的有角休息叫声行为
我使用Angular调用Atlassian JIRA的REST API。Angular用于设备上的ionic framework应用程序 AAngularjs 奇怪的有角休息叫声行为,angularjs,rest,jira,jira-rest-api,Angularjs,Rest,Jira,Jira Rest Api,我使用Angular调用Atlassian JIRA的REST API。Angular用于设备上的ionic framework应用程序 Acurlas curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'Content-Type: application/json' --data-binary '{"tra
curl
as
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"}}'
是创建的。我已验证,如果删除了用户代理的头,则此curl可以正常工作。
是否有可能进行这样的操作
编辑
这里是生成请求的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
},
如果要删除用户代理
标题,请执行以下操作:
.config(['$httpProvider', function ($httpProvider) {
delete $httpProvider.defaults.headers.common['User-Agent'];
}]);
以下是有关angular$http
的一些信息(请参阅安全注意事项部分)
XSRF是一种攻击技术,攻击者可以通过它欺骗攻击者
通过身份验证的用户在不知不觉中在您的网站上执行操作。
Angular提供了一种对抗XSRF的机制。执行XHR时
请求时,$http服务从cookie中读取令牌(默认情况下,
XSRF-TOKEN),并将其设置为HTTP头(X-XSRF-TOKEN)。只因为
在您的域上运行的JavaScript可以读取cookie,即您的服务器
可以肯定的是,XHR来自于在您的计算机上运行的JavaScript
域名。不会为跨域请求设置标头
要利用这一点,服务器需要在
JavaScript可读会话cookie,称为第一个HTTP上的XSRF-TOKEN
获取请求。在后续的XHR请求中,服务器可以验证
cookie与X-XSRF-TOKEN HTTP头匹配,因此请确保
只有在您的域上运行的JavaScript才能发送请求。
令牌对于每个用户都必须是唯一的,并且必须可由
服务器(防止JavaScript生成自己的令牌)。我们
建议令牌是站点身份验证的摘要
为了增加安全性,饼干中加入了盐
可以使用xsrfHeaderName和
$httpProvider.defaults的xsrfCookieName属性位于
配置时间,$http.defaults在运行时,或每请求配置
反对
为了防止在多个角度
应用程序共享同一个域或子域,我们建议每个应用程序
应用程序使用唯一的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'
})
能否提供angular http请求的javascript?请查看编辑。是否可以删除'X-Atlassian-Token:nocheck'
标题?在你的问题中,curl
中没有这个选项,不幸的是,这不起作用。在我的浏览器(Chrome)中,无论是在设备上还是在PC上,我仍然收到以下错误:XSRF检查失败根据我将代码更新为:标题:{'Content Type':'application/json','X-Atlassian-Token':'nocheck','xsrfHeaderName':'X-Atlassian-Token','xsrfCookieName':'Atlassian.xsrf.Token'}
但是这不起作用。请尝试:'xsrfCookieName':'nocheck'
甚至尝试'X-Atlassian-Token':'no check'
而不是nocheck
谢谢。这在浏览器(PC)中仍然不起作用。在设备(android/ios)上返回了不同的错误消息。我不确定是否仍然是XSRF问题:消息:“索引7处的预期权限:文件:/”堆栈跟踪:“java.lang.IllegalArgumentException:索引7处的预期权限:文件://↵在java.net.URI.create(URI.java:859)↵位于com.atlassian.applinks.core.auth.cors.DefaultCorsService.getApplicationLinksByOrigin(DefaultCorsService.java:56)↵在com.atlassian.applinks.core.auth.cors.AppLinksCorsDefaults.allowsOrigin(AppLinksCorsDefaults.java:40)上↵位于com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter$1.apply(XsrfResourceFilter.java:226)↵位于com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter。状态代码:500