다음을 통해 공유


NuGet 플랫폼 간 인증 플러그 인

버전 4.8 이상에서 모든 NuGet 클라이언트(NuGet.exe, Visual Studio, dotnet.exe 및 MSBuild.exe)는 NuGet 플랫폼 간 플러그 인 모델 위에 빌드된 인증 플러그 인을 사용할 수 있습니다.

dotnet.exe에서의 인증

Visual Studio 및 NuGet.exe 기본적으로 대화형입니다. NuGet.exe에는 비대화형으로 설정할 수 있는 스위치가 포함되어 있습니다. 또한 NuGet.exe 및 Visual Studio 플러그 인은 사용자에게 입력하라는 메시지를 표시합니다. dotnet.exe 프롬프트가 없으며 기본값은 비대화형입니다.

dotnet.exe 인증 메커니즘은 디바이스 흐름입니다. 복원 또는 패키지 추가 작업이 대화형으로 실행되면 사용자에게 인증을 완료하는 방법에 대한 작업 블록 및 지침이 명령줄에 제공됩니다. 사용자가 인증을 완료하면 작업이 계속됩니다.

작업을 대화형으로 만들려면 --interactive를 통과해야 합니다. 현재 명시적 dotnet restoredotnet add package 명령만 대화형 스위치를 지원합니다. dotnet builddotnet publish에는 대화형 스위치가 없습니다.

MSBuild의 인증

dotnet.exe마찬가지로 MSBuild.exe 기본적으로 비대화형으로 MSBuild.exe 인증 메커니즘은 디바이스 흐름입니다. 복원이 일시 중지되고 인증을 기다리도록 하려면 .를 사용하여 복원 msbuild -t:restore -p:NuGetInteractive="true"을 호출합니다.

플랫폼 간 인증 플러그 인 만들기

샘플 구현은 Microsoft 자격 증명 공급자 플러그 인에서 찾을 수 있습니다.

플러그 인이 NuGet 클라이언트 도구에서 설정한 보안 요구 사항을 준수하는 것이 매우 중요합니다. 플러그 인이 인증 플러그 인이 되는 데 필요한 최소 버전은 2.0.0입니다. NuGet은 플러그 인을 사용하여 핸드셰이크를 수행하고 지원되는 작업 클레임에 대한 쿼리를 수행합니다. 특정 메시지에 대한 자세한 내용은 NuGet 플랫폼 간 플러그 인 프로토콜 메시지를 참조하세요.

NuGet은 로그 수준을 설정하고 해당하는 경우 플러그 인에 프록시 정보를 제공합니다. NuGet 콘솔에 대한 로깅은 NuGet이 로그 수준을 플러그 인으로 설정한 후에만 허용됩니다.

  • .NET Framework 플러그 인 인증 동작

.NET Framework에서 플러그 인은 사용자에게 대화 상자의 형태로 입력하라는 메시지를 표시할 수 있습니다.

  • .NET Core 플러그 인 인증 동작

.NET Core에서는 대화 상자를 표시할 수 없습니다. 플러그 인은 디바이스 흐름을 사용하여 인증해야 합니다. 플러그 인은 사용자에게 지침과 함께 NuGet에 로그 메시지를 보낼 수 있습니다. 로그 수준이 플러그 인으로 설정된 후에 로깅을 사용할 수 있습니다. NuGet은 명령줄에서 대화형 입력을 사용하지 않습니다.

클라이언트가 인증 자격 증명 가져오기를 사용하여 플러그 인을 호출하는 경우 플러그 인은 대화형 스위치를 준수하고 대화 상자 스위치를 준수해야 합니다.

다음 표에서는 모든 조합에 대해 플러그 인이 작동하는 방식을 요약합니다.

IsNonInteractive CanShowDialog 플러그 인 동작
true true IsNonInteractive 스위치가 대화 상자 스위치보다 우선합니다. 플러그 인을 차단할 수 없습니다.
true false IsNonInteractive 스위치가 대화 상자 스위치보다 우선합니다. 플러그 인을 차단할 수 없습니다.
false true 필요한 경우 플러그 인에서 대화 상자를 표시할 수 있습니다. 예를 들어 대화형 로그인 또는 계정 선택입니다.
false false 플러그인은 대화 상자를 표시하지 않아야 하며 표시할 수도 없습니다. 플러그 인은 로거를 통해 명령 메시지를 로깅하여 인증하기 위해 디바이스 흐름을 사용해야 합니다.

NuGet 7.0 이전에는 NuGet이 dotnet CLI에서는 항상 false로 설정하고, MSBuild 복원에서는 true로 설정했습니다. 7.0부터 NuGet은 항상 CanShowDialog를 true로 설정하지만, 그래픽 인터페이스를 사용할 수 없는 경우에도 플러그인은 여전히 이를 감지해야 합니다. 예를 들어 X 전달 없이 SSH 연결을 통해 Linux에서 실행하는 경우 또는 PowerShell 원격 세션입니다.

플러그 인을 작성하기 전에 다음 사양을 참조하세요.