身份验证不适用于VersionOne REST API

时间:2014-04-03 21:23:39

标签: rest authentication cookies versionone

好的,我有一个技术问题。我们在XStudio中开发了一个集成组件,以便我们可以选择VersionOne" Stories" ("要求"在XStudio中)和"缺陷" (作为" Bugs"在XStudio中)。通过这种方式,您可以执行测试并管理XStudio中的结果,指标等,还可以使用VersionOne&#39管理XStudio中的完整可跟踪性矩阵(产品 - >要求 - >测试 - >测试广告系列 - >错误) ; s项目。我们处理我们这边的链接。

为此,我们使用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");

弹出窗口要求进行身份验证(顺便说一下&#34; www6.v1host.com/192.33.31.50"虽然更期待&#34; 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管理方面存在特定的内容...... < / p>

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

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

1 个答案:

答案 0 :(得分:0)

听起来你适合XQual的开发人员XStudio。如果是这样,请联系我。我们总是很高兴list another integration

假设这不仅仅适用于1位客户,我还有一些建议:

  • 提供有意义的user agent header。这有助于我们积极主动地进行整合。该标题即使对于定制的一次性产品也很有用,但在其他供应商参与时更为重要。
  • 使用OAuth2进行身份验证。 Java中有很多适用于OAuth2的好库。我们即将发布blog post,其中展示了如何使用Apache Oltu

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

  • 您可能对如何部署VersionOne抱有太多期待。 VersionOne提供内部部署和按需部署。您的客户可能正在使用&#34; 192.33.31.50&#34;进入配置以表示内部部署,而您期望按需实例名称。还要注意并非所有按需实例都在&#34; www6&#34;。
  • 如果是内部部署,VersionOne还提供Windows集成身份验证的安装选项。在这种情况下,您可能无法获得您期望的标题。这是我推荐OAuth2的原因之一。无论用户身份验证机制如何,OAuth2始终可用于API调用。

为了更好地进行诊断,您能否共享一些显示构建请求URL的代码?