PowerShell Concur: Get Access Token using Password Grant Flow

Back to Index

Obtain an OAuth2 access token using credentials that comprise of username, password, client_id, and client_secret.

Documentation: https://developer.concur.com/api-reference/authentication/apidoc.html#password_grant

CURL Command

curl -X POST https://us.api.concursolutions.com/oauth2/v0/token \
  -d "client_id=your-client_id" \
  -d "client_secret=your-client_secret" \
  -d "grant_type=password" \
  -d "username=username" \
  -d "password=password"

PowerShell Example

[Reflection.Assembly]::LoadFile("C:\myAssemblies\ChilkatDotNet2.dll")

$rest = New-Object Chilkat.Rest

#  URL: https://us.api.concursolutions.com/oauth2/v0/token
$bTls = $true
$port = 443
$bAutoReconnect = $true
$success = $rest.Connect("us.api.concursolutions.com",$port,$bTls,$bAutoReconnect)
if ($success -ne $true) {
    $("ConnectFailReason: " + $rest.ConnectFailReason)
    $($rest.LastErrorText)
    exit
}

$rest.AddQueryParam("client_id","your-client_id")
$rest.AddQueryParam("client_secret","your-client_secret")
$rest.AddQueryParam("grant_type","password")
$rest.AddQueryParam("username","username")
$rest.AddQueryParam("password","password")

$strResponseBody = $rest.FullRequestFormUrlEncoded("POST","/oauth2/v0/token")
if ($rest.LastMethodSuccess -ne $true) {
    $($rest.LastErrorText)
    exit
}

$respStatusCode = $rest.ResponseStatusCode
if ($respStatusCode -ge 400) {
    $("Response Status Code = " + $respStatusCode)
    $("Response Header:")
    $($rest.ResponseHeader)
    $("Response Body:")
    $($strResponseBody)
    exit
}

$jsonResponse = New-Object Chilkat.JsonObject
$jsonResponse.Load($strResponseBody)

$expires_in = $jsonResponse.StringOf("expires_in")
$scope = $jsonResponse.StringOf("scope")
$token_type = $jsonResponse.StringOf("token_type")
$access_token = $jsonResponse.StringOf("access_token")
$refresh_token = $jsonResponse.StringOf("refresh_token")
$id_token = $jsonResponse.StringOf("id_token")
$geolocation = $jsonResponse.StringOf("geolocation")

Sample JSON Response Body

{
  "expires_in": "3600",
  "scope": "app-scopes",
  "token_type": "Bearer",
  "access_token": "access_token",
  "refresh_token": "refresh_token",
  "id_token": "ocid_token",
  "geolocation": "https://us.api.concursolutions.com"
}