0
Votes
Undo
  1. Andrew Davis
  2. PowerBuilder
  3. Monday, 21 August 2023 16:22 PM UTC

Hi

What veraion of powerwbuilder do i need to do an oauth 2 request to get a token from a web api

I am currently using pb2019 

Also is there any example code for getting such a token please

 

thanks in advance 

 

Andrew

 

 

Andrew Davis Accepted Answer Pending Moderation
  1. Monday, 21 August 2023 17:33 PM UTC
  2. PowerBuilder
  3. # 1

I solved this using the post by Problems retrieving an Oauth Token from the server from april 2022

this was the code ! worked first time !

OAuthClient loac_Client
TokenRequest ltr_Request
TokenResponse ltr_Response
OAuthRequest loar_Request
ResourceResponse lrr_Response
String ls_AccessToken
String ls_Body, ls_type, ls_description, ls_state, ls_uri
Long ll_return

String ls_ClientID, ls_Secret, ls_Url

// Setup the arguments for your token request
ls_Url = "https://login.microsoftonline.com - - -TOKEN URL";
ls_ClientID = "Can't Post My Client Id but its here"
ls_Secret = "This is where my SECREt goes"


// Now do your token request
loac_Client = Create OAuthClient

//Step 1: Get the RESTful server access token.
ltr_Request.ClearParams()
ltr_Request.tokenlocation = ls_Url
ltr_Request.granttype = "client_credentials"

ltr_Request.clientid = ls_ClientID
ltr_Request.clientsecret = ls_Secret

ltr_Request.Method = "POST"
ltr_Request.secureprotocol = 0

ltr_Request.scope = "api://gms-d-reckon-claims-api/.default"
ltr_Request.granttype = "client_credentials"


ll_Return = loac_Client.AccessToken( ltr_Request, ltr_Response )

If ll_Return = 1 then
// The Actual Http Call was successful
long ll_ResponseStatusCode
string ls_ResponseStatusText
ll_ResponseStatusCode = ltr_Response.GetStatusCode()
ls_ResponseStatusText = ltr_Response.GetStatusText()
ltr_Response.GetBody(ls_Body)

if ll_ResponseStatusCode = 200 Then
// The Token Request was successful
ls_AccessToken = ltr_Response.GetAccessToken()
MessageBox('Token', ls_AccessToken)
else
// The Token Request returned an error. This displays the actual html returned
MessageBox('Token Error', string(ll_ResponseStatusCode) + ' ' + ls_ResponseStatusText + '~r~n' + ls_Body)

// You can have a look at this function. When the secret is wrong ls_type returns "invalid_client"
ll_Return = ltr_Response.GetTokenError(ls_type, ls_description, ls_uri, ls_state)
MessageBox( "AccessToken Failed", "Return :" + String ( ll_return ) + "~r~n" + ls_type )
end if
Else
// The Actual Http Call was unsuccessful
MessageBox( "AccessToken Call Failed", "Return :" + String ( ll_return ))

// From help file the error will be one of the following:
// -1 -- A general error occurred
// -2 -- Invalid URL
// -3 -- Cannot connect to the Internet
// -4 -- Timeout
End If

If IsValid ( loac_Client ) Then DesTroy ( loac_Client )

 

Comment
  1. Armeen Mazda @Appeon
  2. Wednesday, 23 August 2023 19:27 PM UTC
Thanks for sharing the solution!
  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.