Skip to main content

 

Generate an Access- and Bearer Token for Aria Automation API Authentication



For automating things in Aria Automation, my preferred method is PowerShell calling the API’s.

I’ve been using this method for quite some time as you may have seen in my previous blogposts. Although VMware KB89129 describes the process to retrieve the Access Token, I noticed some people are still struggling to get started, hence I’ll share and explain this specific piece of code.

The first part of the script defines the variables:

# vRA VARIABLES
$vraName = "vra"
$domain = "infrajedi.local"
$vraHostname = $vraname+"."+$domain
$vraUsername = "configadmin"
$vraPassword = "VMware1!" #note use ` as escape character for special chars like $
$vraUserDomain = "System Domain" #Use "System Domain" for local users", otherwise use the AD domain.
  • Note: The $vraHostname variable. You may also use static values here. In my example the $vraHostname variable will result in vra.infrajedi.local and will be used later to connect.
  • Note: the $vraUserDomain variable and the comments I placed behind it.

The second part generates the initial header we need to make a REST call:

# Create Header
$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.Add("Accept", 'application/json')
$header.Add("Content-Type", 'application/json')

The third part generates the Refresh Token by calling out the Identity Service API:

# Generate Refresh Token
$uri = "https://$vraHostname/csp/gateway/am/api/login?access_token" #Identity Service API
$data=@"
{
  "username" : "$vraUsername",
  "password" : "$vraPassword",
  "domain" : "$vraUserDomain"
}
"@

try {
    $response = Invoke-RestMethod -Method Post -Uri $uri -Headers $header -Body $data 
} catch {
    write-host "Failed to Connect to host: $vraHostname" -ForegroundColor red
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
    Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
    break
}
  • Note: For PowerShell JSON data, I prefer to use plain JSON. For PowerShell you have to pay special attention to the @” opening and “@ closing, as well as the correct use of curly brackets {}.
  • A great way to validate and correct your JSON data is the [jsonlint] website (beware you don’t copy passwords, just in case…)

The output of $response is:

refresh_token
-------------
s9qZqQ6BhKKU0lESywT6Af3ledtmHRaE

Since we only need the value for the refresh token, a new variable $vraRefreshToken is created:

$vraRefreshToken = $response.refresh_token #vraRefreshtoken used to obtain Access (Bearer) token.

The $vraRefreshToken will be used in the body of the REST call to the IAAS API”

# Generate Access Token
$data =@"
{
    "refreshToken" : $vraRefreshToken
}
"@

$uri = "https://$vraHostname/iaas/api/login"
try {
    $response = Invoke-RestMethod -Method Post -Uri $uri -Headers $header -Body $data 
} catch {
    write-host "Failed to Connect to host: $vraHostname" -ForegroundColor red
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
    Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
    break
}

The (shortened) output of $response looks like this:

tokenType token
--------- -----
Bearer    eyJ0eXAiOiJKV1QiLCJhbydml......jZS5wCJpYXQiOjE3MDAxNTAyNjEsI

Finally I have created a $vraBearerToken variable containing the value of the token and added an “Authorization” entry to the existing header:

$vraBearerToken = $response.token

#Add Bearer Authentication to Header
$header.add("Authorization", "Bearer $vraBearerToken")

From here you can just include the header in any follow up API call. For example retrieving the Cloud Accounts:

#Get vSphere Cloud Accounts
$uri = "https://$vraHostname/iaas/api/cloud-accounts-vsphere"
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers $header
  • -> Examine the $response variable
  • -> Examine $response.content to lookup the id for the Cloud Account (for example)

Have a look at my github page for additional examples.


Bonus add-on:

The $vraBearerToken can also be used directly in the Swagger UI which can be found here https://<vrahostname>/automation-ui/api-docs/

Click on any of the

Swagger Authorize

Click Authorize, Type Bearer followed by the $vraBearerToken value (just like it is in the header from the PowerShell script), Click Authorize and Close. Note that you will not get an error message if the token is incorrect (until you run an api call from the Swagger UI resulting in 401)

Swagger Token

Now you can open any API call, click “Try it out” and clik “Execute” to run your request. Depending on the request you may have to enter values for required parameters.

Comments

Popular posts from this blog

Quick Guide to VCF Automation for VCD Administrators

  Quick Guide to VCF Automation for VCD Administrators VMware Cloud Foundation 9 (VCF 9) has been  released  and with it comes brand new Cloud Management Platform –  VCF Automation (VCFA)  which supercedes both Aria Automation and VMware Cloud Director (VCD). This blog post is intended for those people that know VCD quite well and want to understand how is VCFA similar or different to help them quickly orient in the new direction. It should be emphasized that VCFA is a new solution and not just rebranding of an old one. However it reuses a lot of components from its predecessors. The provider part of VCFA called Tenenat Manager is based on VCD code and the UI and APIs will be familiar to VCD admins, while the tenant part inherist a lot from Aria Automation and especially for VCD end-users will look brand new. Deployment and Architecture VCFA is generaly deployed from VCF Operations Fleet Management (former Aria Suite LCM embeded in VCF Ops. Fleet Management...
  Issue with Aria Automation Custom form Multi Value Picker and Data Grid https://knowledge.broadcom.com/external/article?articleNumber=345960 Products VMware Aria Suite Issue/Introduction Symptoms: Getting  error " Expected Type String but was Object ", w hen trying to use Complex Types in MultiValue Picker on the Aria for Automation Custom Form. Environment VMware vRealize Automation 8.x Cause This issue has been identified where the problem appears when a single column Multi Value Picker or Data Grid is used. Resolution This is a known issue. There is a workaround.  Workaround: As a workaround, try adding one empty column in the Multivalue picker without filling the options. So we can add one more column without filling the value which will be hidden(there is a button in the designer page that will hide the column). This way the end user will receive the same view.  
  "Cloud zone insights not available yet, please check after some time" message on Aria Automation https://knowledge.broadcom.com/external/article?articleNumber=314894 Products VMware Aria Suite Issue/Introduction Symptoms: The certificate for Aria operations has been replaced since it was initially added to Aria Automation as an integration. When accessing the Insights pane under  Cloud Assembly  ->  Infrastructure  ->  Cloud Zone  ->  Insights  the following message is displayed:   "Cloud zone insights not available yet, please check after some time." The  /var/log/services-logs/prelude/hcmp-service-app/file-logs/hcmp-service-app.log  file contains ssl errors similar to:   2022-08-25T20:06:43.989Z ERROR hcmp-service [host='hcmp-service-app-xxxxxxx-xxxx' thread='Thread-56' user='' org='<org_id>' trace='<trace_id>' parent='<parent_id>' span='<span_id>'] c.v.a.h.a.common.AlertEnu...