【问题标题】:How do I get credential providers set up with NuGet.core?如何使用 NuGet.core 设置凭据提供程序?
【发布时间】:2016-06-14 17:55:18
【问题描述】:

我正在尝试使用 Nuget.Core 访问 nuget 提要,并且我确实有凭据提供程序,但我仍然收到 401 未授权。我需要采取哪些步骤才能让 nuget.core 使用凭据提供程序并以编程方式获取访问权限。谢谢你。

【问题讨论】:

    标签: c# nuget


    【解决方案1】:

    我为此苦苦挣扎了好几天——issue on the Nuget/Home GitHub 让我处于领先地位,并允许我创建一个 API 来获取凭据提供程序,就像 NuGet.Client 所做的一样(我主要是从中复制和粘贴)

    我创建了一个gist

    但基本上

    • 创建一个CredentialService 并用您计算机上的凭据提供程序填充它
      • 这是最难的部分,所以就照着Nuget.Client 做的吧
    • 为您的服务设置HttpHandlerResourceV3.CredentialService

    【讨论】:

      【解决方案2】:

      如果您使用的是 NuGet.Core 程序集,则需要创建或使用实现 NuGet.ICredentialProvider 接口的类。

      using System;
      using System.Net;
      using NuGet;
      
      namespace Test
      {
          class MyCredentialProvider : ICredentialProvider
          {
              public ICredentials GetCredentials(Uri uri, IWebProxy proxy, CredentialType credentialType, bool retrying)
              {
                  // TODO return the credentials...
                  throw new NotImplementedException ();
              }
          }
      }
      

      然后创建该类的实例并将其分配给 NuGet.HttpClient

      NuGet.HttpClient.DefaultCredentialProvider = new MyCredentialProvider ();
      

      NuGet 还提供了一个 SettingsCredentialProvider 类,如果您将凭据存储在 NuGet.Config 文件中,您可以使用该类。 SettingsCredentialProvider 在其构造函数中采用 ICredentialProvider 实例,因此如果在 NuGet.Config 文件中未找到任何凭据,您可以传递自己的实现。或者,如果您只想使用存储在 NuGet.Config 文件中的信息以供使用,则将 NullCredentialProvider 传递给 SettingsCredentialProvider 类。

      【讨论】:

      • 感谢您的回答。那么对于那个类,我用什么从 getCredentials() 方法返回?我拥有的凭据提供程序在“https://{account}.pkgs.visualstudio.com/_apis/public/nuget/client/CredentialProviderBundle.zip”中给出。我下载了它,它有一个 .VSS 文件和 NuGet.exe。我不确定从那里去哪里,或者如何使用它来创建你提到的类。
      • 那是不同的。从您最初的问题中,我认为您正在尝试从您的应用程序中使用 NuGet.Core,而不是使用 Microsoft 提供的凭据提供程序。这些凭据提供程序与 NuGet 3 一起使用,并由 NuGet 3 自动获取和使用。using these credential providers 上有文档,基本上是 NuGet.exe 将调用以查找用户名和密码的可执行文件。
      • 谢谢!这帮助我能够从包管理器控制台做到这一点。还有一个问题,有没有办法以编程方式执行“Get-Package -Source”nuget-feed“-ListAvailable”之类的命令?我能找到的唯一东西是 powershell 和 cmd 命令,例如 echo。
      • 您可以使用 NuGet.Core.dll 以编程方式查找 NuGet 包。 NuGet blog 上有一个简单的例子。 PackageRepository 类还具有一些扩展方法(例如 Search),您可以使用它们来搜索所有包,而不是示例中所示的特定包。
      猜你喜欢
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2023-01-12
      • 2013-04-12
      • 2021-09-16
      相关资源
      最近更新 更多