gpt4 book ai didi

jenkins - 泽西客户端 : Authentication fails at redirect by Jenkins

转载 作者:行者123 更新时间:2023-12-04 15:33:40 24 4
gpt4 key购买 nike

我正在尝试使用 Jenkins 的 REST api。 Jenkins 需要一个 POST 请求到一个 URL 来删除一个作业。结果如下:

  1. 我告诉我选择的客户向适当的 URL 发送 POST。
    客户端发送 POST 并使用用户名和密码对自己进行授权。
  2. Jenkins 删除作业。
  3. Jenkins 返回“302 - Found”,其中包含包含已删除作业的文件夹位置。
  4. 客户端自动向该位置发送 POST。
  5. Jenkins 回答“200 - OK”和文件夹页面的完整 HTML。

这对 Postman 来说工作得很好(当然,除非我禁用“自动跟随重定向”)。然而,Jersey 在第 5 步一直遇到“404”,因为我阻止了匿名用户查看有问题的文件夹。 (如果我完全阻止匿名用户,则为“403”。)请注意,身份验证在步骤 1 中有效,因为作业已成功删除!

我的印象是 Jersey 应该对与客户端有关的所有请求使用给定的身份验证。有没有办法真正做到这一点?我真的不想为了自己做每一个重定向而禁止重定向。

澄清一下:问题在于,虽然 Jersey 遵循重定向,但未能再次验证自身,导致服务器拒绝第二个请求。

有问题的代码:

HttpAuthenticationFeature auth = HttpAuthenticationFeature.basicBuilder()
.credentials(username, token)
.build();
Client client = ClientBuilder.newBuilder()
.register(auth)
.build();
WebTarget deleteTarget = client.target("http://[Jenkins-IP]/job/RestTestingArea/job/testJob/doDelete")
Response response = deleteTarget.request()
.post(null);

编辑:根据 Postman,“302-Found”只有 5 个 header :日期、X-Content-Type-Options(“nosniff”)、位置、Content-Length (0) 和服务器。因此,Postman 可能会使用而 Jersey 无视的任何 cookie 或任何 token 。

this one 松散相关的问题- 如果我能够记录第二个请求,我或许能够了解幕后发生的事情。

EDIT2:我还确定问题显然与身份验证有关。如果我允许匿名用户查看有问题的文件夹,错误就会消失,服务器会回复 200。

最佳答案

我在 Paul Samsotha 的帮助下找到了答案和 Gautham .

TL;DR:这是预期的行为,您必须设置系统属性 http.strictPostRedirect=true 以使其工作自己执行第二个请求。


同样描述了here , HttpURLConnection 决定不实现重定向,因为它在 HTTP 标准中定义,而是因为许多浏览器实现了它(所以用外行的话来说,“像其他人一样做,而不是它应该如何工作”)。这会导致以下行为:

  1. 将 POST 发送到 URL_1。
  2. 服务器以“302 - 已找到”应答并包含 URL_2。
  3. 将 GET 发送到 URL_2,丢弃所有 header
  4. 服务器以“404 - 未找到”作为响应,因为第二个请求未包含正确的身份验证 header 。
  5. “404”响应是代码收到的响应,因为第 2 步和第 3 步被底层代码“隐藏”了。

通过丢弃所有 header ,身份验证失败。由于 Jersey 默认使用此类,这导致了我遇到的行为。

关于jenkins - 泽西客户端 : Authentication fails at redirect by Jenkins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60506900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com