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

use*_*794 4 java tfs soap oauth-2.0 azure-devops

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

有什么指针吗?

Edw*_*son 8

<tl; dr>

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

</ tl; dr>

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

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

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

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

我们来看看每个选项:

实时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才能登录.

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

服务帐户:由于缺少一个网页浏览器,不过,你能够呈现WRAP令牌与您的服务凭据.您可以使用非常有用的TFS服务凭据查看器查看您帐户的服务凭据.使用您的服务帐户用户名和密码,您可以创建一个WRAP cookie来进行身份验证.但此时,您将作为服务帐户进行身份验证,而不是您的某个用户帐户.

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