Compartilhar via


Plug-in de autenticação multiplataforma do NuGet

Na versão 4.8+, todos os clientes NuGet (NuGet.exe, Visual Studio, dotnet.exe e MSBuild.exe) podem usar um plug-in de autenticação criado sobre o modelo de plugins de plataforma cruzada do NuGet.

Autenticação no dotnet.exe

O Visual Studio e o NuGet.exe são interativos por padrão. O NuGet.exe contém uma opção para torná-lo não interativo. Além disso, os plug-ins NuGet.exe e do Visual Studio solicitam entrada ao usuário. No dotnet.exe não há aviso e o padrão não é interativo.

O mecanismo de autenticação em dotnet.exe é o fluxo de dispositivos. Quando a operação de restauração ou adição de pacote é executada interativamente, os blocos de operação e instruções para o usuário como concluir as autenticações serão fornecidos na linha de comando. Quando o usuário concluir a autenticação, a operação continuará.

Para tornar a operação interativa, deve-se passar --interactive. Atualmente, somente os comandos explícito dotnet restore e dotnet add package são compatíveis com uma opção interativa. Não há nenhum interruptor interativo ligado em dotnet build e dotnet publish.

Autenticação no MSBuild

Semelhante ao dotnet.exe, o MSBuild.exe é por padrão não interativo o mecanismo de autenticação do MSBuild.exe é o fluxo de dispositivo. Para permitir que a restauração pause e aguarde a autenticação, chame a restauração com msbuild -t:restore -p:NuGetInteractive="true".

Criação de um plug-in de autenticação entre plataformas

Um exemplo de implementação pode ser encontrado no plugin do Provedor de Credenciais da Microsoft.

É muito importante que os plugins estejam em conformidade com os requisitos de segurança estabelecidos pelas ferramentas do cliente NuGet. A versão mínima necessária para que um plugin seja um plugin de autenticação é 2.0.0. O NuGet executará o handshake com o plug-in e a consulta para as declarações de operação compatíveis. Consulte as mensagens do protocolo de plugin de plataforma cruzada do NuGet para obter mais detalhes sobre as mensagens específicas.

O NuGet definirá o nível de log e fornecerá informações de proxy para o plugin quando aplicável. O registro no console do NuGet só é aceitável depois que o NuGet definir o nível de log para o plugin.

  • Comportamento de autenticação de plugin do .NET Framework

No .NET Framework, os plugins têm permissão para solicitar entrada a um usuário, na forma de uma caixa de diálogo.

  • Comportamento de autenticação de plug-in do .NET Core

No .NET Core, uma caixa de diálogo não pode ser mostrada. Os plugins devem usar o fluxo de dispositivos para autenticar. O plugin pode enviar mensagens de log para o NuGet com instruções para o usuário. Observe que o registro em log está disponível depois que o nível de log foi definido para o plugin. O NuGet não receberá nenhuma entrada interativa da linha de comando.

Quando o cliente chama o plug-in com um Get Authentication Credentials, os plugins precisam estar em conformidade com a opção de interatividade e respeitar a opção de diálogo.

A tabela a seguir resume como o plugin deve se comportar para todas as combinações.

IsNonInteractive CanShowDialog Comportamento do plugin
true true O parâmetro IsNonInteractive tem precedência sobre a opção de diálogo. O plugin não tem permissão para abrir uma caixa de diálogo. Essa combinação só é válida para plugins do .NET Framework
true false O parâmetro IsNonInteractive tem precedência sobre a opção de diálogo. O plugin não tem permissão para bloquear. Essa combinação só é válida para plugins do .NET Core
false true O plugin deve mostrar uma caixa de diálogo. Essa combinação só é válida para plugins do .NET Framework
false false O plugin não deve/não pode mostrar uma caixa de diálogo. O plugin deve usar o fluxo do dispositivo para autenticar registrando uma mensagem de instrução usando o registrador. Essa combinação só é válida para plugins do .NET Core

Consulte as seguintes especificações antes de gravar um plugin.