REST API由于CSRF检查,同时发布两个具有不同属性的请求失败,并显示403状态代码

时间:2019-06-26 20:09:45

标签: json teamcity teamcity-rest-api

正在使用REST API发送两个发布请求:http://localhost:8111/app/rest/buildQueue,但是我的第二个请求失败,并显示403 Forbidden:由于CSRF检查失败,响应403状态代码:没有“ Origin”标头并且未提供身份验证对于请求,请考虑添加“来源:http://localhost:8111”标头。我想知道为什么会这样,因为如果我在UI中运行构建并更改参数paras的话。 build1具有%version = 2%,build2具有%version = 3%,它将在不同的可用代理上彼此并行运行。

这是我发送的json请求

REST API:http://localhost:8111/app/rest/buildQueue JSON正文:

{“ branchName”:“ master”,“ buildType”:{“ id”:“ DockerBuild”,“ projectId”:“ Test”},“ properties”:{“ property”:[{“ name”:“ DOCKER_IMAGE_NAME“,” value“:” test-3“},{” name“:” SNAPSHOT_DEPENDENCY_VERSION“,” value“:” 0.6“}]}}

我是否缺少能够并行​​运行构建的参数?

403禁止访问:由于CSRF检查失败而响应403状态代码:不存在“ Origin”标头,并且请求不提供身份验证,请考虑添加“ Origin:http://localhost:8111”标头。

3 个答案:

答案 0 :(得分:0)

当您遇到有关TeamCity中CSRF保护的问题时(例如,您从服务器收到“由于CSRF检查失败而响应403状态代码”响应),您可以按照以下步骤操作:

  • 如果使用反向代理,请确保如上所述正确配置Host / Origin标头。同时,您可能需要将服务器的公共URL添加到CORS-enabled origins

  • 通过设置 teamcity.csrf.origin.check.enabled = logOnly内部属性,您可以暂时完全禁用CSRF保护。

  • 有关CSRF尝试失败的信息已记录到 TeamCity / logs / teamcity-auth.log 文件中。有关请求的详细诊断,请启用debug-auth logging preset

尝试传递请求标头-H 'Origin: http://localhost:8111'

答案 1 :(得分:0)

这可能对某人有用,我在使用邮递员的单个POST中遇到了相同的错误:

403 Forbidden: Responding with 403 status code due to failed CSRF check: no "Origin" header is present and no authentication provided with the request, consider adding "Origin: http://teamcity:20011" header.

因此,我按照错误消息的建议进行操作,并在标题中添加了值为“ http://teamcity:20011”的“来源”,从而解决了该问题。顺便说一句,在授权中,我选择了“承载者​​令牌”,然后粘贴了之前通过TeamCity生成的令牌。这是电话:

http://teamcity:20011/app/rest/buildQueue 

我刚刚测试了如何使用API​​触发构建,该构建成功运行。现在,下一步是使用JavaScript实现此调用。

答案 2 :(得分:0)

使用适当的请求来请求CSRF标头: https://teamcity/authenticationTest.html?csrf

并将其设置在POST请求的“ X-TC-CSRF-TOKEN”标题中