4

我正在尝试从我的命令行 Java 应用程序访问https://tfspreview.com SOAP 界面。与本地 TFS 服务不同,此服务使用 Live ID 身份验证,这会导致通信失败,并通过 302 重定向到其身份验证服务。我不知道如何在那里进行身份验证。

任何指针?

4

1 回答 1

8

<tl;博士>

您可以使用基本身份验证Team Foundation Service提供无头体验。此外,如果您没有使用TFS SDK for Java,它可能会对您有所帮助。

< /tl;博士 >

一般来说,您可以使用三种类型的凭据进行身份验证,这决定了您用于身份验证的机制:

  1. 活体身份证。如您所述,这需要您使用 Web 浏览器登录到 Windows Live 并使用生成的 OAuth 令牌进行身份验证。

  2. 映射到您的 Live ID 的附加密码,该密码用于基本身份验证。8 月 27 日有关此功能的公告中提供了有关设置此附加映射的说明。

  3. 服务帐户。除了用户列表(由 Live ID 指定)之外,您的 Team Foundation Service 帐户还有一个特殊的用户帐户,用于构建自动化等。每个 Team Foundation Service 帐户都有一个服务帐户,顾名思义,这是一个管理员帐户。

让我们来看看每个选项:

Live ID:使用 OAuth 使用 Live ID 进行身份验证对于您的命令行应用程序来说会很困难。Visual Studio 在这里所做的是将 Internet Explorer 打开到tfspreview.com,这最终会提示您输入您的 Live ID 凭据。此时,各种 OAuth cookie 将被设置到您的 Web 浏览器中。由于 Visual Studio 和 Internet Explorer 共享相同的底层 HTTP 连接机制,因此它可以使用这些相同的 cookie。使用 Java 命令行客户端,您就没有那么奢侈了(除非您专门为 Windows 编写此程序并且想要编写一些 JNI 来调用系统的 HTTP 库。)

那么你有什么选择呢?我想您有可能遵循给定的重定向-此时您最终将获得一个登录页面,您可以将凭据发布到该页面,并最终将 OAuth cookie 发送回给您,然后您可以将其用于身份验证。但我怀疑这可能不是你想走的路。我强烈怀疑让您登录需要健康剂量的 JavaScript。

基本身份验证:这些需要额外的设置步骤,但简单明了。没有理由不使用这些。

服务帐户:虽然缺少 Web 浏览器,但您可以使用您的服务凭证提供WRAP 令牌。您可以使用非常有用的TFS Service Credential Viewer 查看您帐户的服务凭证。使用您的服务帐户用户名和密码,您可以创建一个 WRAP cookie 进行身份验证。但此时,您作为服务帐户进行身份验证,而不是您的用户帐户之一。

如果您不想自己创建 WRAP 令牌,您还可以使用Team Foundation Server SDK for Java来构建连接。只需像UsernamePasswordCredentials创建TFSTeamProjectCollection. 即使您不想对服务器使用 API 方法,您也可以HTTPClient从该连接中获取原始数据,并且它将具有所有必要的配置集。如果我们将来向 Team Foundation Service 添加新的身份验证机制,那么依赖 SDK 也会使您受益,因为 SDK 的 API 不会发生显着变化。

于 2012-07-19T15:11:20.213 回答