Partilhar via


Consumindo pacotes de feeds autenticados

Muitas operações do NuGet, como restauração e instalação, exigem comunicação com uma ou mais fontes de pacote, que podem ser configuradas em arquivosnuget.config.

Observação

Utilize repositórios de pacotes em que confia.

Para feeds HTTP, o NuGet fará uma solicitação não autenticada e, se o servidor responder com uma resposta HTTP 401, o NuGet procurará credenciais na seguinte ordem:

  1. Uma variável NuGetPackageSourceCredentials_{name}de ambiente .
  2. Credenciais em ficheirosnuget.config.
  3. Use um provedor de credenciais NuGet, caso a sua fonte de pacotes forneça um.

As credenciais que você precisa usar são determinadas pela origem do pacote. Portanto, a menos que você esteja usando um provedor de credenciais, verifique com a fonte do pacote quais credenciais usar. É muito comum que as fontes de pacotes proíbam você de usar sua senha (com a qual você faz login no site) com o NuGet. Normalmente, você precisa criar um Token de Acesso Pessoal para usar como senha do NuGet, mas deve verificar a documentação do servidor NuGet que está usando. Algumas fontes de pacote, como o Azure DevOps e o GitHub, têm tokens de acesso com escopo, portanto, talvez seja necessário garantir que todos os tokens criados incluam o escopo necessário.

Práticas recomendadas de segurança para gerenciar credenciais

Embora o NuGet procure credenciais na ordem mencionada acima, recomendamos a seguinte sequência para gerenciar credenciais com segurança ao autenticar com feeds privados:

  1. Provedor de credenciais: É altamente recomendável usar um provedor de credenciais sempre que possível. Essa abordagem evita o armazenamento de segredos em texto sem formatação e minimiza o risco de exposição acidental de segredos por meio do controle do código-fonte. Além disso, geralmente reduz o número de locais que você precisa atualizar quando uma credencial expira ou muda. Se o provedor de credenciais oferecer suporte ao logon único, ele poderá diminuir a frequência de logins ou o número de locais onde as credenciais precisam ser salvas. Consulte a seção provedores de credenciais para obter mais informações.

  2. Credenciais criptografadas no nuget.config: Se um provedor de credenciais não estiver disponível, você deve considerar o uso de credenciais criptografadas. Essa abordagem fornece uma camada extra de segurança armazenando as credenciais em um formato criptografado. Para obter mais informações, consulte a seção sobre credenciais em arquivosnuget.config.

    Observação

    Tenha em atenção que as palavras-passe encriptadas só são suportadas no Windows. Além disso, só podem ser desencriptados na mesma máquina e pelo mesmo utilizador que os encriptaram originalmente.

  3. Usando macros variáveis de ambiente em nuget.config: Se o uso de credenciais criptografadas não for possível, considere armazenar as credenciais no arquivo denuget.config com macros de variáveis de ambiente. Essa abordagem permite que você faça referência a variáveis de ambiente que contêm as credenciais reais. Ele aumenta a transparência e ajuda os usuários finais a entender como suas credenciais são configuradas. Para obter mais informações, consulte a seção sobre credenciais em arquivosnuget.config.

  4. Usando variáveis de ambiente diretamente: como uma opção de fallback, você pode armazenar as credenciais diretamente em variáveis de ambiente. No entanto, esteja ciente de que essa abordagem pode oferecer menos visibilidade e controle em comparação com o uso de macros variáveis de ambiente no arquivo nuget.config . Para obter mais informações, consulte a seção sobre credenciais em variáveis de ambiente.

  5. Limpar credenciais de texto no NuGet.Config: É altamente recomendável usar uma das opções mencionadas anteriormente. Se essas opções não forem viáveis, você poderá armazenar as credenciais no arquivo nuget.config . No entanto, esta opção só deve ser utilizada em ambientes onde não esteja disponível qualquer outra opção segura. Para obter mais informações, consulte a seção sobre credenciais em arquivosnuget.config.

    Advertência

    Armazenar credenciais em texto não criptografado no arquivo nuget.config , especialmente ao salvar o arquivo no controle do código-fonte, é arriscado, pois aumenta as chances de vazamentos acidentais de credenciais. Se você precisar armazenar credenciais no arquivo nuget.config , considere usar uma das opções mais seguras mencionadas acima.

Ao aderir a essas práticas recomendadas, você pode autenticar feeds privados com segurança, minimizando o risco de exposição de informações confidenciais.

Credenciais em variáveis de ambiente

O NuGet procurará uma variável de ambiente chamada NuGetPackageSourceCredentials_{name}, onde {name} é o valor de key="name" na origem do pacote do ficheiro nuget.config. O valor da variável de ambiente deve ser Username={username};Password={password}, e pode opcionalmente incluir ;ValidAuthenticationTypes={types}. Se a variável de ambiente não corresponder à convenção do NuGet, ou se o valor não atender ao padrão esperado do NuGet, o NuGet ignorará silenciosamente a variável de ambiente e continuará procurando credenciais para a fonte do pacote em outro lugar. Não há logs para sinalizar que o NuGet usa a credencial da variável de ambiente, o que pode causar dificuldades na depuração de problemas de autenticação se a variável de ambiente contiver um segredo expirado e o novo segredo for adicionado a um arquivo nuget.config , já que o arquivo de configuração tem precedência menor.

Sugestão

O uso de variáveis de ambiente em pipelines de CI/CD é uma excelente opção para minimizar o risco de segredos serem capturados em logs.

Por exemplo, considere o seguinte arquivonuget.config :

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

Nesse caso, o nome da fonte é Contoso e o NuGet procurará o nome NuGetPackageSourceCredentials_Contosoda variável de ambiente. Algumas plataformas diferenciam maiúsculas de minúsculas, portanto, tome cuidado ao usar os caracteres maiúsculos e minúsculos corretos para o nome do ambiente e o nome da fonte, conforme definido em seu arquivo nuget.config .

Se o nome de usuário for nugetUser e a senha for secret123, o valor da variável de ambiente deverá ser definido como Username=nugetUser;Password=secret123. Se o NuGet só deve usar essa credencial para autenticação HTTP Básica, mas não outros esquemas de autenticação, você pode definir o valor da variável de ambiente como Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic. Para obter mais informações sobre tipos de autenticação válidos, consulte os documentos sobre credenciais de pacote em arquivosnuget.config.

Observação

As variáveis de ambiente têm restrições sobre caracteres permitidos, e sistemas operacionais diferentes podem ter restrições diferentes. Por exemplo, não são permitidos espaços. Portanto, você usa esse recurso de variável de ambiente para especificar credenciais NuGet para fontes de pacote que usam caracteres inválidos para as variáveis de ambiente da plataforma. Nesses casos, você deve renomear a fonte do pacote em seu arquivo nuget.config .

Credenciais em arquivos nuget.config

nuget.config arquivos podem conter credenciais de origem do pacote. Consulte a seção nuget.config documento de referência de arquivo sobre credenciais de origem do pacote para obter mais informações, incluindo sintaxe. No entanto, é mais fácil usar dotnet nuget update source na linha de comando para definir as credenciais.

Advertência

Tenha cuidado ao definir credenciais em arquivosnuget.config , especialmente ao salvar a credencial como texto sem formatação. Se a credencial for gravada em um arquivo nuget.config que esteja sob controle do código-fonte, haverá um risco maior de vazar acidentalmente o segredo.

Como o NuGet acumula configurações de vários arquivos, é recomendável salvar as credenciais no arquivo nuget.config usuário. Também recomendamos guardar fontes dos pacotes no arquivo de solução (repositório de código-fonte) nuget.config, incluindo um elemento <clear />, para garantir a confiabilidade da compilação.

O nome de usuário e a senha de texto sem formatação em um arquivo nuget.config podem usar uma variável de ambiente adicionando % ao início e ao fim do nome da variável de ambiente que você gostaria de usar. Para obter mais informações, consulte os nuget.config documentos de referência sobre o uso de variáveis de ambiente.

Fornecedores de credenciais

O NuGet tem um modelo de extensibilidade, permitindo que plug-ins forneçam credenciais NuGet. O caminho onde os provedores de credenciais devem ser colocados, para que o NuGet os encontre, é diferente para o .NET Framework (NuGet.exe, MSBuild e Visual Studio) e o SDK do .NET (executando no ambiente de execução do .NET 5+).

O NuGet tem o conceito de ser executado no modo interativo ou no modo não interativo. Quando no modo não interativo, os provedores de credenciais são solicitados a não bloquear o NuGet. Enquanto estiver no modo interativo, o provedor de credenciais pode solicitar que você faça login. Ferramentas diferentes têm padrões diferentes, portanto, o modo interativo pode precisar ser configurado como aderido ou desistido, dependendo da sua situação.

Ferramenta Predefinido Botão de ativar/desativar
dotnet Interface de Linha de Comandos (CLI) não-interativo --interactive argumento. Por exemplo, dotnet restore --interactive.
MSBuild não-interativo NuGetInteractive Propriedade MSBuild. Por exemplo, msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe interativo -NonInteractive argumento. Por exemplo, nuget.exe restore -NonInteractive.
Visual Studio interativo Não é possível executar no modo não interativo.

NuGet.exe suporta provedores de credenciais V1 e V2, enquanto o MSBuild e o SDK do .NET suportam apenas os plug-ins multiplataforma (V2).

No Visual Studio, o NuGet tem uma interface do Provedor de Credenciais do Visual Studio, que os provedores de credenciais podem usar para fornecer uma experiência de logon gráfico ou chamar APIs do Visual Studio, se necessário. O NuGet no Visual Studio recorrerá aos provedores de credenciais da linha de comando se não conseguir encontrar um provedor de credenciais do Visual Studio que gerencie a fonte.

O Visual Studio 2017 versão 15.9 e superior inclui um provedor de credenciais para Artefatos do Azure, que funciona no Visual Studio, MSBuild e NuGet.exe. No entanto, o provedor de credenciais para o SDK do .NET não está incluído pelo Visual Studio, portanto, deve ser instalado separadamente para trabalhar com a dotnet CLI.

Lista de fornecedores de credenciais

Aqui está uma lista de provedores de credenciais que conhecemos: