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.
We use cookies which are necessary for the proper functioning of our websites. We also use cookies to analyze our traffic, improve your experience and provide social media features. If you continue to use this site, you consent to our use of cookies.