PowerBuilder
PowerBuilder
PRODA Get OAuth2 Access Token using JWT
See more PRODA Examples
Demonstrates how to get an OAuth2 access token for the PRODA Australian Government Online Services using a JWT.Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_PrivKey
oleobject loo_Jwt
oleobject loo_Jose
oleobject loo_Claims
integer li_CurDateTime
string ls_JwtToken
oleobject loo_Http
oleobject loo_Req
oleobject loo_Resp
li_Success = 0
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First create a JWT to be sent in the POST to https://vnd.proda.humanservices.gov.au/mga/sps/oauth/oauth20/token
loo_PrivKey = create oleobject
li_rc = loo_PrivKey.ConnectToNewObject("Chilkat.PrivateKey")
if li_rc < 0 then
destroy loo_PrivKey
MessageBox("Error","Connecting to COM object failed")
return
end if
// Load an RSA private key from a PEM file.
// Chilkat provides alternative methods to load from other formats, or to load from a string or binary data.
li_Success = loo_PrivKey.LoadEncryptedPemFile("qa_data/pem/rsa_passwd.pem","passwd")
if li_Success = 0 then
Write-Debug loo_PrivKey.LastErrorText
destroy loo_PrivKey
return
end if
loo_Jwt = create oleobject
li_rc = loo_Jwt.ConnectToNewObject("Chilkat.Jwt")
// Build the JOSE header
loo_Jose = create oleobject
li_rc = loo_Jose.ConnectToNewObject("Chilkat.JsonObject")
// Use RS256. Pass the string "RS384" or "RS512" to use RSA with SHA-384 or SHA-512.
li_Success = loo_Jose.AppendString("alg","RS256")
li_Success = loo_Jose.AppendString("typ","JWT")
li_Success = loo_Jose.AppendString("kid","test-device")
// Now build the JWT claims (also known as the payload)
loo_Claims = create oleobject
li_rc = loo_Claims.ConnectToNewObject("Chilkat.JsonObject")
li_Success = loo_Claims.AppendString("iss","9646844092")
li_Success = loo_Claims.AppendString("sub","test-device")
li_Success = loo_Claims.AppendString("aud","https://proda.humanservices.gov.au")
// Set the timestamp of when the JWT was created to now.
li_CurDateTime = loo_Jwt.GenNumericDate(0)
li_Success = loo_Claims.AddIntAt(-1,"iat",li_CurDateTime)
// Set the timestamp defining an expiration time (end time) for the token
// to be now + 1 hour (3600 seconds)
li_Success = loo_Claims.AddIntAt(-1,"exp",li_CurDateTime + 3600)
// Produce the smallest possible JWT:
loo_Jwt.AutoCompact = 1
// Create the JWT token. This is where the RSA signature is created.
ls_JwtToken = loo_Jwt.CreateJwtPk(loo_Jose.Emit(),loo_Claims.Emit(),loo_PrivKey)
// ---------------------------------------------------------------------
// Build and send the POST, which should look something like this:
// POST https://vnd.proda.humanservices.gov.au/mga/sps/oauth/oauth20/token HTTP/1.1
// Content-Type: application/x-www-form-urlencoded
// Content-Length: 666
// Host: vnd.proda.humanservices.gov.au
//
// grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=<jwt>&client_id=VendorClient03
loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")
loo_Req = create oleobject
li_rc = loo_Req.ConnectToNewObject("Chilkat.HttpRequest")
loo_Req.HttpVerb = "POST"
loo_Req.ContentType = "application/x-www-form-urlencoded"
// Add the request params.
loo_Req.AddParam("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer")
loo_Req.AddParam("assertion",ls_JwtToken)
loo_Req.AddParam("client_id","VendorClient03")
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")
li_Success = loo_Http.HttpReq("https://vnd.proda.humanservices.gov.au/mga/sps/oauth/oauth20/token",loo_Req,loo_Resp)
if li_Success = 0 then
Write-Debug loo_Http.LastErrorText
destroy loo_PrivKey
destroy loo_Jwt
destroy loo_Jose
destroy loo_Claims
destroy loo_Http
destroy loo_Req
destroy loo_Resp
return
end if
Write-Debug "Response status code = " + string(loo_Resp.StatusCode)
Write-Debug "Response body:"
Write-Debug loo_Resp.BodyStr
destroy loo_PrivKey
destroy loo_Jwt
destroy loo_Jose
destroy loo_Claims
destroy loo_Http
destroy loo_Req
destroy loo_Resp