Skip to main content
Solved

502 Bad Gateway when calling JWT Auth API

  • 21 February 2023
  • 3 replies
  • 783 views

I keep getting a 502 Bad Gateway error when attempting to obtain an access token using JWT, but am not sure why this is happening.


Powershell code:

$RC_SERVER_URL="https://platform.devtest.ringcentral.com"
$RC_CLIENT_ID="T2......" # Copied from the app I created
$RC_CLIENT_SECRET="v8d......" # Copied from the app I created
$RC_JWT_TOKEN = "eyJra....." # Created under My Account > Credentials and given specific authorization to the app Client ID above

# as per https://developers.ringcentral.com/guide/authentication/jwt-flow#technical-discussion
$splat = @{
    Method  = "POST"
    Uri     = $RC_SERVER_URL + "/restapi/oauth/token"
    ContentType = 'application/x-www-form-urlencoded'
    headers = @{   
        Accept = 'application/json'
        Authorization = 'Basic ' +  Convert]::ToBase64String( Text.Encoding]::Unicode.GetBytes("${RC_CLIENT_ID}:${RC_CLIENT_SECRET}"))
    }
    body    = @{
        grant_type = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
        assertion = $RC_JWT_TOKEN
    }
}

$Response = Invoke-RestMethod @splat


The object looks good and isn't missing anything:

$splat
Name                           Value
----                           -----
ContentType                    application/x-www-form-urlencoded
Method                         POST
body                           {assertion, grant_type}
headers                        {Accept, Authorization}
Uri                            https://platform.devtest.ringcentral.com/restapi/oauth/token

PS C:scriptsGet-RingCentralData> $splat.headers
Name                           Value
----                           -----
Accept application/json
Authorization                  Basic VAAyAF...

PS C:scriptsGet-RingCentralData> $splat.body
Name                           Value
----                           -----
assertion                      eyJra...
grant_type                     urn:ietf:params:oauth:grant-type:jwt-bearer


The response I get when executing this is:

$Response = Invoke-RestMethod @splat
Invoke-RestMethod : The remote server returned an error: (502) Bad Gateway.
At line:1 char:13
+ $Response = Invoke-RestMethod @splat
+             ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) eInvoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand


Any ideas why this might be happening?

3 replies

Userlevel 2
Badge

I am not an expert in Powershell. But, why the content-type is not in the headers?

ContentType = 'application/x-www-form-urlencoded'
    headers = @{   
        Accept = 'application/json'
        Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes("${RC_CLIENT_ID}:${RC_CLIENT_SECRET}"))
    }

Should it be like this?

headers = @{   
        ContentType = 'application/x-www-form-urlencoded'
        Accept = 'application/json'
        Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes("${RC_CLIENT_ID}:${RC_CLIENT_SECRET}"))
    }

Powershell's Invoke-RestMethod cmdlet has a -ContentType argument. It effectively puts it into the headers for you.

I just tried inserting it directly into the headers instead of using the -ContentType argument, but the result is the same (502 Bad Gateway)

It’s [Text.Encoding]::Unicode.GetBytesit needs to be 
[Text.Encoding]::UTF8.GetBytes
 

Reply