Autenticando feeds com provedores de credenciais nuget.exe
Na versão 3.3
, o suporte foi adicionado para provedores de credenciais (v1) específicos nuget.exe
. Desde então, na versão 4.8
(v2) foi adicionado suporte para provedores de credenciais que funcionam em todos os cenários de linha de comando (nuget.exe
, dotnet.exe
, msbuild.exe
).
Consulte Consumindo pacotes de feeds autenticados para obter mais detalhes sobre todas as abordagens de autenticação.
nuget.exe Descoberta de provedor de credenciais
Os provedores de credenciais nuget.exe podem ser usados de 3 maneiras:
Globalmente: para disponibilizar um provedor de credenciais para todas as instâncias de execução
nuget.exe
no perfil do usuário atual, adicione-o ao%LocalAppData%\NuGet\CredentialProviders
. Talvez seja necessário criar a pastaCredentialProviders
. Os provedores de credenciais podem ser instalados na raiz da pastaCredentialProviders
ou em uma subpasta. Se um provedor de credenciais tiver vários arquivos/assemblies, será possível usar subpastas para manter os provedores organizados.A partir de uma variável de ambiente: os provedores de credenciais podem ser armazenados em qualquer lugar e acessíveis a
nuget.exe
definindo a variável de ambiente%NUGET_CREDENTIALPROVIDERS_PATH%
para o local do provedor. Essa variável pode ser uma lista separada por ponto-e-vírgula (por exemplo,path1;path2
) se você tiver vários locais.Juntamente como nuget.exe: os provedores de credenciais nuget.exe podem ser colocados na mesma pasta que o
nuget.exe
.
Ao carregar provedores de credenciais, nuget.exe
pesquisa os locais acima, em ordem, para qualquer arquivo chamado credentialprovider*.exe
e, em seguida, carrega esses arquivos na ordem em que são encontrados. Se existirem vários provedores de credenciais na mesma pasta, eles serão carregados em ordem alfabética.
Criação de um provedor de credenciais nuget.exe
Um provedor de credenciais é um executável de linha de comando, nomeado no formato CredentialProvider*.exe
, que reúne entradas, adquire credenciais conforme apropriado e, em seguida, retorna o código de status de saída apropriado e a saída padrão.
Você deve fornecer o seguinte:
- Determine se ele pode fornecer credenciais para o URI de destino antes de iniciar a aquisição de credenciais. Caso contrário, ele deve retornar o código de status 1 sem credenciais.
- Não modificar
NuGet.Config
(como definir credenciais lá). - Manipule a configuração de proxy HTTP por conta própria, pois o NuGet não fornece informações de proxy para o plugin.
- Retorne credenciais ou detalhes de erro para
nuget.exe
gravando um objeto de resposta JSON (veja abaixo) em stdout, usando codificação UTF-8. - Opcionalmente, emita log de rastreamento adicional para stderr. Nenhum segredo deve ser gravado para stderr, já que em níveis de detalhamento "normais" ou "detalhados" tais traços são ecoados pelo NuGet para o console.
- Parâmetros inesperados devem ser ignorados, fornecendo compatibilidade direta com versões futuras do NuGet.
Parâmetros de entrada
Parâmetro/Comutação | Descrição |
---|---|
Uri {value} | O URI de origem do pacote que requer credenciais. |
NonInteractive | Se presente, o provedor não emite prompts interativos. |
IsRetry | Se presente, indica que essa tentativa é uma nova tentativa de uma tentativa com falha anterior. Os provedores geralmente usam esse sinalizador para garantir que ignorem qualquer cache existente e solicitem novas credenciais, se possível. |
Detalhamento {value} | Se presente, um dos seguintes valores: "normal", "silencioso" ou "detalhado". Se nenhum valor for fornecido, o padrão será "normal". Os provedores devem usar isso como uma indicação do nível de log opcional a ser emitido para o fluxo de erros padrão. |
Códigos de saída
Código | Result | Descrição |
---|---|---|
0 | Êxito | As credenciais foram adquiridas com sucesso e foram gravadas para stdout. |
1 | ProviderNotApplicable | O provedor atual não fornece credenciais para o URI fornecido. |
2 | Falha | O provedor é o provedor correto para o URI fornecido, mas não pode fornecer credenciais. Nesse caso, o nuget.exe não tentará novamente a autenticação e falhará. Um exemplo típico é quando um usuário cancela um login interativo. |
Saída padrão
Propriedade | Observações |
---|---|
Nome de Usuário | Nome de usuário para solicitações autenticadas. |
Senha | Senha para solicitações autenticadas. |
Mensagem | Detalhes opcionais sobre a resposta, usados somente para mostrar detalhes adicionais em casos de falha. |
Exemplo stdout:
{ "Username" : "freddy@example.com",
"Password" : "bwm3bcx6txhprzmxhl2x63mdsul6grctazoomtdb6kfbof7m3a3z",
"Message" : "" }
Solucionar problemas de um provedor de credenciais
No momento, o NuGet não fornece muito suporte direto para depuração de provedores de credenciais personalizadas; o problema 4598 está acompanhando esse trabalho.
Também é possível fazer o seguinte:
Execute nuget.exe com o switch
-verbosity
para inspecionar a saída detalhada.Adicione mensagens de depuração em locais apropriados de
stdout
.Certifique-se de que você está usando nuget.exe 3.3 ou superior.
Anexe o depurador na inicialização com este trecho de código:
while (!Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } Debugger.Break();