401 unauthotized error eventhough token is correct

  • ALM used ( Azure DevOps)
  • CI system used (Azure DevOps)
  • Scanner command used when applicable (private details masked)
  • C#.net
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $projectKey = "projectKey"
      $organization = "organization"
      $sonarToken = "$(Sonar_Token)"
      $qualityGateStatusUrl = "https://sonarcloud.io/api/qualitygates/project_status?projectKey=$projectKey&organization=$organization"
      $encodedToken = "[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($sonarToken))"
      $headers = @{
        Authorization = "Basic $encodedToken"
      }
      
      Write-Host "Using SonarCloud API URL: $qualityGateStatusUrl"
      Write-Host "Encoded Token: $encodedToken"
      
      try {
        $response = Invoke-RestMethod -Uri $qualityGateStatusUrl -Headers $headers -Method Get
        $status = $response.projectStatus.status
        Write-Host "Quality Gate Status: $status"

        if ($status -ne "OK") {
          Write-Error "Quality Gate failed"
          Write-Host "##vso[task.complete result=Failed;]Quality gate failed"
        } else {
          Write-Host "Quality Gate passed"
        }
      } catch {
        Write-Error "Failed to get quality gate status: $_"
        Write-Host "##vso[task.complete result=Failed;]Failed to get quality gate status"
      } 

it says 401 unathorized to get quality gate status. Please help me with this.

Thanks in advance.

We want to get an email upon quality gate status is failed so build fails. but usually sonarcloudprepare, analyze, publish everything works fine and could see code smells in sonarcloud, but when I run comand to get quality gate status, it gives 401 unathorized error.

also added sonar.qualitygate.wait=true under sonarcloudprepare task, analyze fails saying quality gate status is failed not sure it analyses full code or part of the code because of this line. Please suggest us what to do in this scenario.

Isn’t this what you want?

However, you can also take a look at these docs for how to pass the token.

Authorization: Bearer MY_TOKEN

Not