java - 如何使用 Java 命令行应用程序对 https ://tfspreview. com(MIcrosoft 托管的 TFS)进行身份验证?

标签 java soap tfs oauth-2.0 azure-devops

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

有什么建议吗?

最佳答案

< tl;dr >

您可以使用 Basic authenticationTeam Foundation Service 提供 headless 体验.此外,如果您不使用 TFS SDK for Java ,它可能会帮助你。

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

  1. 实时 ID。如您所述,这需要您使用网络浏览器登录 Windows Live 并使用生成的 OAuth token 进行身份验证。

  2. 映射到您的 Live ID 的附加密码,用于基本身份验证。 August 27 announcement about this feature 中提供了设置此附加映射的说明。 .

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

让我们看看每个选项:

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

那么您有哪些选择?我想您可能会按照给定的重定向进行操作 - 此时您最终将获得一个登录页面,您可以将您的凭据发布到该页面,并最终将 OAuth cookie 发回给您,然后您可以将其用于身份验证。但我怀疑这可能不是你想要走的路。我强烈怀疑需要大量的 JavaScript 才能让您登录。<​​/p>

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

服务帐户: 但是,如果没有 Web 浏览器,您 能够显示 WRAP token使用您的服务凭证。您可以使用非常有用的 TFS Service Credential Viewer 查看您帐户的服务凭证.使用您的服务帐户用户名和密码,您可以创建一个 WRAP cookie 来进行身份验证。但此时,您正在以服务帐户而不是您的用户帐户之一进行身份验证。

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

关于java - 如何使用 Java 命令行应用程序对 https ://tfspreview. com(MIcrosoft 托管的 TFS)进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560568/

相关文章:

c# - 获取 "Could not create SSL/TLS secure channel"

javax.xml.ws.WebServiceException : java. io.IOException:写入服务器 Tomcat 8 时出错

PHP 中的 SoapClient 错误回退

git - Visual Studio 是否可以要求将工作项链接到 git 提交?

TFS2015构建服务器: Access to user path denied when enabling the extension with a VSIX

java - 每当在 SWT 中的表中创建新列时,默认情况下都会创建监听器,而不必手动添加它们

Java 矩阵 - 转置和求和

java - 如何从 SQLiteOpenHelper 访问 StartActivityForResult()?

java - 异常或空 checkin ?什么更优雅?

tfs - 防止 TFS 在构建/发布时删除节点模块