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.