Autenticando feeds no Visual Studio com provedores de credenciais do NuGet
O NuGet Visual Studio Extension 3.6+ dá suporte a provedores de credenciais, que permitem que o NuGet trabalhe com feeds autenticados. Depois de instalar um provedor de credenciais do NuGet para Visual Studio, a extensão do Visual Studio NuGet adquirirá e atualizará automaticamente as credenciais para feeds autenticados, conforme necessário.
Uma implementação de exemplo pode ser encontrada em o exemplo vsCredentialProvider.
No Visual Studio, o NuGet usa uma VsCredentialProviderImporter
interna que também verifica provedores de credenciais de plug-in. Esses provedores de credenciais de plug-in devem ser detectáveis como uma exportação MEF do tipo IVsCredentialProvider
.
A partir do 4.8+ o NuGet no Visual Studio também dá suporte aos novos plug-ins de autenticação entre plataformas, mas eles não são a abordagem recomendada por motivos de desempenho.
Nota
Os provedores de credenciais do NuGet para Visual Studio devem ser instalados como uma extensão regular do Visual Studio e exigirão Visual Studio 2017 ou superior.
Os provedores de credenciais do NuGet para Visual Studio funcionam apenas no Visual Studio (não no dotnet restore ou nuget.exe). Para provedores de credenciais com nuget.exe, consulte nuget.exe Provedores de Credenciais. Para provedores de credenciais no dotnet e msbuild, consulte plug-ins multiplataforma do NuGet
Criando um provedor de credenciais do 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 internas e plug-in. Cada provedor é testado sequencialmente até que as credenciais sejam adquiridas.
Durante a aquisição de credenciais, o serviço de credencial tentará os provedores de credenciais na seguinte ordem, parando logo que as credenciais forem adquiridas.
- As credenciais serão buscadas nos arquivos de configuração do NuGet (usando o
SettingsCredentialProvider
interno). - Os provedores de credenciais do Visual Studio serão testados sequencialmente.
- Tente usar todos os provedores de credenciais de plataforma cruzada do NuGet sequencialmente.
- Se nenhuma credenciais 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.
Implementando IVsCredentialProvider.GetCredentialsAsync
Para criar um provedor de credenciais do NuGet para o Visual Studio, crie uma Extensão do Visual Studio que expõe uma MEF Export pública implementando o tipo IVsCredentialProvider
e adere aos princípios descritos abaixo.
public interface IVsCredentialProvider
{
Task<ICredentials> GetCredentialsAsync(
Uri uri,
IWebProxy proxy,
bool isProxyRequest,
bool isRetry,
bool nonInteractive,
CancellationToken cancellationToken);
}
Uma implementação de exemplo pode ser encontrada em o exemplo vsCredentialProvider.
Cada provedor de credenciais do NuGet para Visual Studio deve:
- 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
. - Se o provedor lidar com solicitações para o URI de destino, mas não puder fornecer credenciais, uma exceção deve ser lançada.
Um provedor de credenciais do 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 | A URI da fonte do pacote para a qual as credenciais estão sendo solicitadas. |
IWebProxy Proxy | Proxy Web a ser usado 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 a aquisição de credenciais de proxy, será necessário retornar nulo. |
bool isRetry | True indica que as credenciais foram solicitadas anteriormente para este Uri, mas as credenciais fornecidas não habilitaram acesso autorizado. |
bool nãoInterativo | Se for true, o provedor de credenciais deverá suprimir todos os prompts do usuário e usar valores padrão. |
Token de Cancelamento cancellationToken | Esse token de cancelamento deve ser verificado para determinar se as credenciais de solicitação da operação foram canceladas. |
Valor retornado: um objeto de credenciais implementando a interface System.Net.ICredentials
.