【问题标题】:Authentication not working with VersionOne REST API身份验证不适用于 VersionOne REST API
【发布时间】:2014-04-08 01:03:02
【问题描述】:

好的,我有一个技术问题。我们在 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 管理方面存在特定的问题......

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

此代码在使用基本身份验证的许多其他 REST API 上运行良好。和饼干。 提前致谢,

【问题讨论】:

    标签: rest authentication cookies versionone


    【解决方案1】:

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

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

    • 提供有意义的user agent header。这有助于我们积极参与您的集成。标题即使对于定制的一次性产品也很有用,但在涉及其他供应商时更为重要。
    • 使用OAuth2 进行身份验证。 Java中有很多好的OAuth2库。我们即将推出blog post,我们将在其中展示如何使用Apache Oltu 完成它。

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

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

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

    【讨论】:

    • 嗨伊恩。我们今天实际上找到了解决方法。看起来问题来自应用程序通过 JNLP/JavaWebStart 运行的事实。使用胖 java 客户端,它工作正常,但不能通过 JNLP(虽然最后运行的是完全相同的代码)。我们发现是由于缓存:stackoverflow.com/questions/17278303/…我们刚刚在我们的代码中添加了connection.setRequestProperty("Cache-Control", "no-cache");和 connection.setRequestProperty("Cache-Control", "no-store");就是这样。
    • 顺便说一句,您能告诉我们可以联系谁来讨论 XStudio 在您的列表中的列表,反之亦然吗?谢谢!
    • 戴夫,我就是那个人。通过我的 SO 用户名@versionone.com 向我发送电子邮件。
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2017-04-15
    • 2022-01-05
    • 2016-08-04
    • 1970-01-01
    • 2017-12-15
    • 2019-03-31
    • 2018-07-26
    相关资源
    最近更新 更多