0

好的,我有一个技术问题。我们在 XStudio 中开发了一个集成组件,以便我们可以选择 VersionOne 的“Stories”(作为 XStudio 中的“Requirements”)和“Defects”(作为 XStudio 中的“Bugs”)。这样,您可以从 XStudio 执行测试并管理结果、指标等,还可以使用 VersionOne 的项目在 XStudio 中管理完整的可追溯性矩阵(产品 -> 需求 -> 测试 -> 测试活动 -> 错误)。我们处理我们这边的链接。

为此,我们使用 VersionOne 的 REST API 实现了连接器。一切都很好!非常快等

我们使用 VersionOne 的免费服务器对其进行了测试,没有任何问题。我们的 Java 代码管理 cookie 以便它使用“基本身份验证”协议进行身份验证,我们从 VersionOne 检索 cookie,将其存储在本地 CookieStore 并在下一个请求中提供该 cookie,这样我们就不必一次又一次地进行身份验证。从我们这边来看,这一切都很好。

The content looks like this:
{X-Instart-Request-ID=[7405870175418545839:SEN01-NPPRY09:1396448658:44], 
null=[HTTP/1.1 200 OK], 
Date=[Wed, 02 Apr 2014 14:24:17 GMT], 
Content-Length=[16063], 
Expires=[-1], 
VersionOne=[Ultimate/14.0.7.6706; Scrum], 
Set-Cookie=[.V1.Ticket.ncnuaaa=HFZlcnNpb25PbmUuV2ViLkF1dGhlbnRpY2F0b3LqgwAAB1hTdHVkaW+CjqLWdBzRCP8/N/R1KMorEByFu31RuGY+eqVCi1FHvTE=; path=/; HttpOnly], 
Connection=[keep-alive], 
Content-Type=[text/xml; charset=utf-8], 
Server=[Microsoft-IIS/8.0], 
Pragma=[no-cache], 
Cache-Control=[no-cache]}

但是...当我们在客户端环境中运行代码时,出于任何原因,我们都没有得到原始 cookie!?

{cache-control=[no-cache], 
content-type=[text/xml; charset=utf-8], 
null=[HTTP/1.1 200 OK], expires=[-1], 
content-length=[16063], 
server=[Microsoft-IIS/8.0], 
date=[Wed, 02 Apr 2014 12:34:08 GMT], 
pragma=[no-cache]}

当我们的代码从连接中获取标题字段并且我们尝试获取“Set-Cookie”字段时它找不到它并且会自动显示一个弹出窗口。

Map<String, List<String>> headerFields = connection.getHeaderFields();
List<String> cookiesHeader = headerFields.get("Set-Cookie");

弹出窗口要求进行身份验证(顺便说一下“www6.v1host.com/192.33.31.50”,而更预期的是“www6.v1host.com/abcded” - 也许这里有线索?)。

如果我们在您的服务器上进行身份验证,一切都会正常进行,一切正常。但是我们不应该像之前在连接中那样再次进行身份验证:

String plainAuth = username + ":" + password;
encodedAuth = ("Basic " + new String(Base64.encode(plainAuth.getBytes()))).replaceAll("\n", "");
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", encodedAuth);
connection.setRequestProperty("Connection", "keep-alive");

所以,不确定这是否是因为身份验证不起作用(它会解释为什么不返回 cookie 并且弹出窗口要求用户明确地进行身份验证)或者在 cookie 管理方面有一些特定的东西......

你知道这里会发生什么吗?

此代码在使用 Basic Auth 的许多其他 REST API 上运行良好。和饼干。提前致谢,

4

1 回答 1

0

听起来您为XQual工作, XStudio的开发人员。如果是这样,请与我联系。我们总是乐于列出另一个集成

假设这不仅适用于 1 个客户,我有几条建议:

  • 提供有意义的用户代理标头。这有助于我们积极参与您的集成。标题即使对于定制的一次性产品也很有用,但在涉及其他供应商时更为重要。
  • 使用OAuth2进行身份验证。Java中有很多好的OAuth2库。我们即将发布一篇博文,其中将展示如何使用Apache Oltu来完成。

对于你的具体问题,我有一些预感:

  • 您可能对 VersionOne 的部署方式期望过高。VersionOne 提供内部部署和按需提供。您的客户可能将“192.33.31.50”放入配置中以表示内部部署,而您期望实例名称用于按需。另请注意,并非所有按需实例都在“www6”上。
  • 如果在本地,VersionOne 还提供 Windows 集成身份验证的安装选项。在这种情况下,您可能没有得到您期望的标题。这是我在上面推荐 OAuth2 的原因之一。无论用户身份验证机制如何,OAuth2 始终可用于 API 调用。

为了更好地诊断,您能否分享一些代码来显示您如何构建请求 URL?

于 2014-04-07T17:03:02.900 回答