Share via


Autenticando feeds no Visual Studio com provedores de credenciais NuGet

O NuGet Visual Studio Extension 3.6+ oferece suporte a provedores de credenciais, que permitem que o NuGet funcione com feeds autenticados. Depois de instalar um provedor de credenciais NuGet para Visual Studio, a extensão NuGet Visual Studio adquirirá e atualizará automaticamente as credenciais para feeds autenticados, conforme necessário.

Um exemplo de implementação pode ser encontrada no exemplo VsCredentialProvider.

No Visual Studio, o NuGet usa um VsCredentialProviderImporter interno que também verifica provedores de credenciais de plugin. Esses provedores de credenciais de plugin devem ser detectáveis como uma Exportação MEF do tipo IVsCredentialProvider.

A partir do 4.8+ NuGet no Visual Studio também oferece suporte aos novos plugins de autenticação entre plataformas, mas eles não são a abordagem recomendada por motivos de desempenho.

Observação

Os provedores de credenciais NuGet para Visual Studio devem ser instalados como uma extensão regular do Visual Studio e exigirão o Visual Studio 2017 ou superior.

Os provedores de credenciais NuGet para Visual Studio funcionam somente no Visual Studio (não na restauração dotnet ou nuget.exe). Para provedores de credenciais com nuget.exe, consulte Provedores de credenciais nuget.exe. Para provedores de credenciais em dotnet e msbuild, consulte Plug-ins de plataforma cruzada do NuGet

Criação de provedores de credenciais NuGet para Visual Studio

O NuGet Visual Studio Extension 3.6+ implementa um CredentialService interno que é usado para adquirir credenciais. O CredentialService tem uma lista de provedores de credenciais internos e de plugin. Cada provedor é testado sequencialmente até que as credenciais sejam adquiridas.

Durante a aquisição de credenciais, o serviço de credenciais tentará provedores de credenciais na seguinte ordem, parando assim que as credenciais forem adquiridas:

  1. As credenciais serão obtidas dos arquivos de configuração do NuGet (usando o SettingsCredentialProvider interno).
  2. Se a origem do pacote estiver no Visual Studio Team Services, o VisualStudioAccountProvider será usado.
  3. Todos os outros provedores de credenciais do Visual Studio de plug-in serão testados sequencialmente.
  4. Tente usar todos os provedores de credenciais de plataforma cruzada do NuGet sequencialmente.
  5. Se nenhuma credencial tiver sido adquirida ainda, o usuário será solicitado a fornecer credenciais usando uma caixa de diálogo de autenticação básica padrão.

Implementação de IVsCredentialProvider.GetCredentialsAsync

Para criar um provedor de credenciais NuGet para Visual Studio, crie uma extensão do Visual Studio que exponha uma exportação MEF pública implementando o tipo IVsCredentialProvider e siga os princípios descritos abaixo.

public interface IVsCredentialProvider
{
    Task<ICredentials> GetCredentialsAsync(
        Uri uri,
        IWebProxy proxy,
        bool isProxyRequest,
        bool isRetry,
        bool nonInteractive,
        CancellationToken cancellationToken);
}

Um exemplo de implementação pode ser encontrada no exemplo VsCredentialProvider.

Cada provedor de credenciais NuGet para Visual Studio deve:

  1. Determine se ele pode fornecer credenciais para o URI de destino antes de iniciar a aquisição de credenciais. Se o provedor não puder fornecer credenciais para a origem de destino, ele deverá retornar null.
  2. Se o provedor manipular solicitações para o URI de destino, mas não puder fornecer credenciais, uma exceção deverá ser lançada.

Um provedor de credenciais NuGet personalizado para Visual Studio deve implementar a interface IVsCredentialProvider disponível no pacote NuGet.VisualStudio.

GetCredentialAsync

Parâmetro de Entrada Descrição
Uri uri O Uri de origem do pacote para o qual as credenciais estão sendo solicitadas.
IWebProxy proxy Proxy da Web para usar ao se comunicar na rede. Nulo se não houver nenhuma autenticação de proxy configurada.
bool isProxyRequest True se essa solicitação for para obter credenciais de autenticação de proxy. Se a implementação não for válida para adquirir credenciais de proxy, nulo deverá ser retornado.
bool isRetry True se as credenciais foram solicitadas anteriormente para esse Uri, mas as credenciais fornecidas não permitiram acesso autorizado.
bool nonInteractive Se true, o provedor de credenciais deve suprimir todos os prompts do usuário e usar valores padrão.
CancellationToken cancellationToken Esse token de cancelamento deve ser verificado para determinar se a operação que solicita credenciais foi cancelada.

Valor de retorno: um objeto de credenciais que implementa a System.Net.ICredentials interface.