artifacts-credprovider: Basic Authentication - Response status code does not indicate success: 401 (Unauthorized)

Hello,

We use the following systems:

  • Azure DevOps Pipelines

  • external Feed (ProGet from Inedo https://inedo.com/proget)

  • self hosted build agents (Windows Server 2022)

We have the following issue:

I can’t get the credential provider running with the external feed. It does not work in the pipeline and it does not work manually.

I try the following:

dotnet new classlib --name proget_experimental
cd proget_experimental
dotnet new nugetconfig
dotnet nuget disable source nuget
dotnet nuget add source "https://internalproget.server.com/nuget/Experimental/v3/index.json" --name "ProGet Experimental (Basic Auth)"
dotnet add package MsgPack.Cli

And I’m getting:

Response status code does not indicate success: 401 (Unauthorized).

I prepared the system with the following:

$env:VSS_NUGET_EXTERNAL_FEED_ENDPOINTS = '{"endpointCredentials": [{"endpoint":"https://internalproget.server.com/nuget/Experimental/v3/index.json", "username":"username", "password":"password"}]}'
$env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=30
$env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=30
iex "& { $(irm https://aka.ms/install-artifacts-credprovider.ps1) }"

When I manually add the dependcy to the *.csproj file

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="MsgPack.Cli" Version="1.0.1" />
    </ItemGroup>
</Project>

and run dotnet restore -v d, I get the following output:

Task "RestoreTask"
  (in) RestoreGraphItems Count '5'
  (in) RestoreDisableParallel 'False'
  (in) RestoreNoCache 'False'
  (in) RestoreIgnoreFailedSources 'False'
  (in) RestoreRecursive 'True'
  (in) RestoreForce 'False'
  (in) HideWarningsAndErrors 'False'
  (in) RestoreForceEvaluate 'False'
  (in) RestorePackagesConfig 'False'
  X.509 certificate chain validation will use the default trust store selected by .NET.
  Running non-parallel restore.
  Reading project file C:\Users\<USER>\proget_experimental\proget_experimental.csproj.
  The restore inputs for 'proget_experimental' have changed. Continuing restore.
  Restoring packages for C:\Users\<USER>\proget_experimental\proget_experimental.csproj...
  Restoring packages for .NETCoreApp,Version=v6.0...
  Using C:\Users\<USER>\.nuget\plugins\netcore\CredentialProvider.Microsoft\CredentialProvider.Microsoft.dll as a credential provider plugin.
      [CredentialProvider.073911]Running in plug-in mode
      [CredentialProvider.073911]Command-line v1.0.2+c2bc059db245a21f09d4e9afa92bba813c567488: C:\Users\<USER>\.nuget\plugins\netcore\CredentialProvider.Microsoft\CredentialProvider.Microsoft.dll -Plugin
      [CredentialProvider.073911]Handling 'Request' 'Initialize'. Time elapsed in ms: 4 - Payload: {"ClientVersion":"6.3.2","Culture":"en-US","RequestTimeout":"00:00:30"}
      [CredentialProvider.073911]Sending response: 'Request' 'Initialize'. Time elapsed in ms: 4
      [CredentialProvider.073911]Time elapsed in milliseconds after sending response 'Request' 'Initialize': 6
      [CredentialProvider.073911]Handling 'Request' 'GetOperationClaims'. Time elapsed in ms: 0 - Payload: {}
      [CredentialProvider.073911]Sending response: 'Request' 'GetOperationClaims'. Time elapsed in ms: 6
      [CredentialProvider.073911]Time elapsed in milliseconds after sending response 'Request' 'GetOperationClaims': 20
      [CredentialProvider.073911]Handling 'Request' 'SetLogLevel'. Time elapsed in ms: 5 - Payload: {"LogLevel":"Debug"}
      [CredentialProvider]Sending response: 'Request' 'SetLogLevel'. Time elapsed in ms: 6
      [CredentialProvider]Time elapsed in milliseconds after sending response 'Request' 'SetLogLevel': 18
      [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 - Payload: {"Uri":"https://internalproget.server.com/nuget/Experimental/v3/index.json","IsRetry":false,"IsNonInteractive":true,"CanShowDialog":false}
      [CredentialProvider]Creating a progress reporter with interval: 00:00:02
      [CredentialProvider]Handling auth request, Uri: https://internalproget.server.com/nuget/Experimental/v3/index.json, IsRetry: False, IsNonInteractive: True, CanShowDialog: False
      [CredentialProvider]URI: https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Using NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider to try to get credentials for https://internalproget.server.com/nuget/Experimental/v3/index.json.
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - IsRetry: False
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Parsing json
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Found credentials for endpoint https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Sending response: 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 40
      [CredentialProvider]Time elapsed in milliseconds after sending response 'Request' 'GetAuthenticationCredentials': 43
      [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 0 - Payload: {"Uri":"https://internalproget.server.com/nuget/Experimental/v3/index.json","IsRetry":true,"IsNonInteractive":true,"CanShowDialog":false}
      [CredentialProvider]Creating a progress reporter with interval: 00:00:02
      [CredentialProvider]Handling auth request, Uri: https://internalproget.server.com/nuget/Experimental/v3/index.json, IsRetry: True, IsNonInteractive: True, CanShowDialog: False
      [CredentialProvider]URI: https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Using NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider to try to get credentials for https://internalproget.server.com/nuget/Experimental/v3/index.json.
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - IsRetry: True
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Found credentials for endpoint https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Sending response: 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 1
      [CredentialProvider]Time elapsed in milliseconds after sending response 'Request' 'GetAuthenticationCredentials': 2
      [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 0 - Payload: {"Uri":"https://internalproget.server.com/nuget/Experimental/v3/index.json","IsRetry":true,"IsNonInteractive":true,"CanShowDialog":false}
      [CredentialProvider]Creating a progress reporter with interval: 00:00:02
      [CredentialProvider]Handling auth request, Uri: https://internalproget.server.com/nuget/Experimental/v3/index.json, IsRetry: True, IsNonInteractive: True, CanShowDialog: False
      [CredentialProvider]URI: https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Using NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider to try to get credentials for https://internalproget.server.com/nuget/Experimental/v3/index.json.
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - IsRetry: True
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Found credentials for endpoint https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Sending response: 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 1
      [CredentialProvider]Time elapsed in milliseconds after sending response 'Request' 'GetAuthenticationCredentials': 1
      [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 0 - Payload: {"Uri":"https://internalproget.server.com/nuget/Experimental/v3/index.json","IsRetry":true,"IsNonInteractive":true,"CanShowDialog":false}
      [CredentialProvider]Creating a progress reporter with interval: 00:00:02
      [CredentialProvider]Handling auth request, Uri: https://internalproget.server.com/nuget/Experimental/v3/index.json, IsRetry: True, IsNonInteractive: True, CanShowDialog: False
      [CredentialProvider]URI: https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Using NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider to try to get credentials for https://internalproget.server.com/nuget/Experimental/v3/index.json.
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - IsRetry: True
      [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Found credentials for endpoint https://internalproget.server.com/nuget/Experimental/v3/index.json
      [CredentialProvider]Sending response: 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 1
      [CredentialProvider]Time elapsed in milliseconds after sending response 'Request' 'GetAuthenticationCredentials': 1
C:\Users\<USER>\proget_experimental\proget_experimental.csproj : error NU1301: Unable to load the service index for source https://internalproget.server.com/nuget/Experimental/v3/index.json.

When I add username and password everything is working:

dotnet new classlib --name proget_experimental
cd proget_experimental
dotnet new nugetconfig
dotnet nuget disable source nuget
dotnet nuget add source "https://internalproget.server.com/nuget/Experimental/v3/index.json" --name "ProGet Experimental (Basic Auth)" --username "username" --password "password"
dotnet add package MsgPack.Cli

When I execute the following, I also have a positive response:

C:\Users\<USER>\.nuget\plugins\netcore\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe  -I -V Verbose -U "https://internalproget.server.com/nuget/Experimental/v3/index.json"
[Verbose] [CredentialProvider]Running in stand-alone mode
[Verbose] [CredentialProvider]Command-line v1.0.2+c2bc059db245a21f09d4e9afa92bba813c567488: C:\Users\<USER>\.nuget\plugins\netcore\CredentialProvider.Microsoft\CredentialProvider.Microsoft.dll -I -V Verbose -U https://internalproget.server.com/nuget/Experimental/v3/index.json
[Verbose] [CredentialProvider]Handling auth request, Uri: https://internalproget.server.com/nuget/Experimental/v3/index.json, IsRetry: True, IsNonInteractive: False, CanShowDialog: False
[Verbose] [CredentialProvider]URI: https://internalproget.server.com/nuget/Experimental/v3/index.json
[Verbose] [CredentialProvider]Using NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider to try to get credentials for https://internalproget.server.com/nuget/Experimental/v3/index.json.
[Verbose] [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - IsRetry: True
[Verbose] [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Parsing json
[Verbose] [CredentialProvider]VstsBuildTaskServiceEndpointCredentialProvider - Found credentials for endpoint https://internalproget.server.com/nuget/Experimental/v3/index.json
[Information] [CredentialProvider]Username: username
[Information] [CredentialProvider]Password: password

Maybe I’m doing something wrong or maybe it’s not possible to use basic authentication. Can you maybe help me 😄 ?

Thank you

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 16 (8 by maintainers)

Most upvoted comments

@JohnSchmeichel should i still create an issue? we just added ENV USE_NET6_ARTIFACTS_CREDENTIAL_PROVIDER false so it fallbacks to older version and works for us.

If you think that it’s good to create a defect - i can create it, but it’s a question what should be default version - older .NET so it won’t require any changes for older project, or new one and then older project need to force to use older version. And if the answer is newer should be default, then i guess we don’t need a ticket

Glad it’s working for you (will still look at the script error though). Newer should be the default, the .NET Core 3.1 is out of support and we’ll be removing it from the code base in the coming weeks.

@sergey-litvinov-work I think your issue is different as it’s failing to successfully install the credential provider, can you open a new issue on this?