正在使用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”标头。
答案 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”标题中