Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何认证到https://tfspreview.com (MIcrosoft托管的TFS)是否使用Java命令行应用程序?_Java_Soap_Tfs_Oauth 2.0_Azure Devops - Fatal编程技术网

如何认证到https://tfspreview.com (MIcrosoft托管的TFS)是否使用Java命令行应用程序?

如何认证到https://tfspreview.com (MIcrosoft托管的TFS)是否使用Java命令行应用程序?,java,soap,tfs,oauth-2.0,azure-devops,Java,Soap,Tfs,Oauth 2.0,Azure Devops,我正在尝试从命令行Java应用程序访问SOAP接口。与内部部署的TFS服务不同,此服务使用Live ID身份验证,这会导致通信失败,302重定向到其身份验证服务。我不知道如何在那里进行身份验证 有指针吗? 您可以使用提供无头体验。此外,如果您不使用,它可能会帮助您 一般来说,有三种类型的凭据可用于身份验证,它们决定了用于身份验证的机制: Live ID。如您所述,这要求您使用web浏览器登录到Windows Live,并使用生成的OAuth令牌进行身份验证 映射到Live ID的附加密码,用于

我正在尝试从命令行Java应用程序访问SOAP接口。与内部部署的TFS服务不同,此服务使用Live ID身份验证,这会导致通信失败,302重定向到其身份验证服务。我不知道如何在那里进行身份验证


有指针吗?

您可以使用提供无头体验。此外,如果您不使用,它可能会帮助您

一般来说,有三种类型的凭据可用于身份验证,它们决定了用于身份验证的机制:

  • Live ID。如您所述,这要求您使用web浏览器登录到Windows Live,并使用生成的OAuth令牌进行身份验证

  • 映射到Live ID的附加密码,用于基本身份验证。有关设置此附加映射的说明,请参阅

  • 服务帐户。除了用户列表(由Live ID指定)之外,您的Team Foundation服务帐户也有一个特殊的用户帐户,它用于诸如构建自动化之类的东西。每个Team Foundation服务帐户有一个服务帐户,顾名思义,这是管理员帐户。

  • 让我们看看每个选项:

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

    那么你有什么选择?我想您可能会遵循给定的重定向,在这一点上,您最终将获得一个登录页面,您可以将凭据发布到该页面,并最终获得一个发送回您的OAuth cookie,然后您可以使用该cookie进行身份验证。但我怀疑这可能不是你想走的路。我强烈怀疑,要让您登录,需要大量JavaScript

    基本身份验证: 这些要求在设置中增加一个步骤,但非常简单和明显。没有理由不使用这些

    服务账户: 但是,由于缺少web浏览器,您可以使用您的服务凭据呈现一个。您可以使用非常有用的查看帐户的服务凭据。使用您的服务帐户用户名和密码,您可以创建一个包装cookie进行身份验证。但此时,您正在作为服务帐户而不是用户帐户进行身份验证


    如果您不想自己创建包装令牌,还可以使用来构建连接。创建
    tfstreamprojectcollection
    时,只需将您的服务凭据作为
    UsernamePasswordCredentials
    提交即可。即使您不想对服务器使用API方法,也可以从该连接获取原始的
    HTTPClient
    ,它将设置所有必要的配置。如果SDK的API不应该发生显著的变化,如果我们在Team Foundation服务中添加新的身份验证机制,那么对SDK的依赖也会对您有益。这很有帮助。如果我能够获得HTTPClient并且以后在SOAP调用中重用它,那么我很有可能选择SDK路径。但我担心的是SDK的大小——它有18MB大,比应用程序本身大得多。可再发行部分是否明显更小?另外(愚蠢的Enter键截断了我之前的消息)-在与TFS SOAP通信时,我如何“显示包装令牌”?我不知道该怎么做。URL参数?Cookie?我承认TFS SDK有点大。sdkjar本身是12mb的:其中一小部分是因为TFS有一个大型平台(源代码控制、工作项跟踪、构建等),但大部分是依赖项。考虑到我们支持的Java运行时的广泛范围,我们必须包含许多依赖项。但是,我们支持的每个平台都有本机库,您可以安全地删除不需要支持的任何平台的库。这将节省一些MB。但总的来说,是的,它很大。我将试着看一看如何减少一些。坦率地说,我只需要版本控制部分。更具体地说,我只需要一个部分,我可以通过正确设置的身份验证检索HTTPClient:)您知道WRAP cookie的名称吗?