![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Dropbox: OAuth2 Authorization to Obtain an Access TokenSee more Dropbox ExamplesDemonstrates how to get a Dropbox OAuth2 access token from a desktop application or script.This example runs the OAuth 2.0 authorization flow that lets the user sign in to Dropbox and authorize your app. Note: This example requires Chilkat v10.1.2 or greater.
IncludeFile "CkOAuth2.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; For more information about the OAuth2, see OAuth 2.0 Authorization Flow oauth2.i = CkOAuth2::ckCreate() If oauth2.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; The port should match the Authorized Redirect URL in your Dropbox app, ; which would look like "http://localhost:3017/" CkOAuth2::setCkListenPort(oauth2, 3017) ; IMPORTANT: One of the OAuth2 redirect URIs for your Dropbox app must be ; exactly this string: http://localhost:3017/ CkOAuth2::setCkAuthorizationEndpoint(oauth2, "https://www.dropbox.com/oauth2/authorize") CkOAuth2::setCkTokenEndpoint(oauth2, "https://api.dropboxapi.com/oauth2/token") ; Replace this with your actual Dropbox App Key CkOAuth2::setCkClientId(oauth2, "DROPBOX_APP_KEY") ; This is for Require Proof Key for Code Exchange (PKCE) ; See OAuth2 PKCE Explained CkOAuth2::setCkCodeChallenge(oauth2, 1) CkOAuth2::setCkCodeChallengeMethod(oauth2, "S256") ; Add token_access_type=offline to also get a refresh token in the response CkOAuth2::ckAddAuthQueryParam(oauth2,"token_access_type","offline") ; Begin the OAuth2 Authorization code flow. This returns a URL that should be loaded in a browser. url.s = CkOAuth2::ckStartAuth(oauth2) If CkOAuth2::ckLastMethodSuccess(oauth2) <> 1 Debug CkOAuth2::ckLastErrorText(oauth2) CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf Debug "url = " + url ; Launch the default browser on the system and navigate to the url. ; The LaunchBrowser method was added in Chilkat v10.1.2. success.i = CkOAuth2::ckLaunchBrowser(oauth2,url) If success = 0 Debug CkOAuth2::ckLastErrorText(oauth2) CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf ; Wait for the user to approve or deny authorization in the browser. numMsWaited.i = 0 While (numMsWaited < 90000) AND (CkOAuth2::ckAuthFlowState(oauth2) < 3) CkOAuth2::ckSleepMs(oauth2,100) numMsWaited = numMsWaited + 100 Wend ; If the browser does not respond within the specified time, AuthFlowState will be: ; ; 1: Waiting for Redirect - The OAuth2 background thread is waiting for the browser's redirect request. ; 2: Waiting for Final Response - The thread is awaiting the final access token response. ; In either case, cancel the background task initiated by StartAuth. If CkOAuth2::ckAuthFlowState(oauth2) < 3 CkOAuth2::ckCancel(oauth2) Debug "No response from the browser!" CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf ; Check AuthFlowState to determine if authorization was granted, denied, or failed: ; ; 3: Success - OAuth2 flow completed, the background thread exited, and the successful response is in AccessTokenResponse. ; 4: Access Denied - OAuth2 flow completed, the background thread exited, and the error response is in AccessTokenResponse. ; 5: Failure - OAuth2 flow failed before completion, the background thread exited, and error details are in FailureInfo. If CkOAuth2::ckAuthFlowState(oauth2) = 5 Debug "OAuth2 failed to complete." Debug CkOAuth2::ckFailureInfo(oauth2) CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf If CkOAuth2::ckAuthFlowState(oauth2) = 4 Debug "OAuth2 authorization was denied." Debug CkOAuth2::ckAccessTokenResponse(oauth2) CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf If CkOAuth2::ckAuthFlowState(oauth2) <> 3 Debug "Unexpected AuthFlowState:" + Str(CkOAuth2::ckAuthFlowState(oauth2)) CkOAuth2::ckDispose(oauth2) ProcedureReturn EndIf Debug "OAuth2 authorization granted!" json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckLoad(json,CkOAuth2::ckAccessTokenResponse(oauth2)) CkJsonObject::setCkEmitCompact(json, 0) Debug "Access Token Response = " + CkJsonObject::ckEmit(json) ; A sample access token response: ; { ; "access_token": "...", ; "token_type": "bearer", ; "expires_in": 14399, ; "refresh_token": "...", ; "scope": "account_info.read", ; "uid": "562542581", ; "account_id": "dbid:AACQhDS0E3_Vb72Ynd0F-GxGWdTI2qcTHzA" ; } Debug "Access Token = " + CkOAuth2::ckAccessToken(oauth2) ; Save the JSON access token response to a file for subsequent use.. CkJsonObject::ckWriteFile(json,"qa_data/tokens/dropbox.json") CkOAuth2::ckDispose(oauth2) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.