Sample code for 30+ languages & platforms
DataFlex

GitHub OAuth2 Access Token

See more OAuth2 Examples

Demonstrates how to get a GitHub OAuth2 access token from a desktop application or script.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoOauth2
    String sUrl
    Integer iNumMsWaited
    String sTemp1
    Integer iTemp1
    Boolean bTemp1

    Move False To iSuccess

    // To further clarify, see OAuth 2.0 Authorization Flow

    Get Create (RefClass(cComChilkatOAuth2)) To hoOauth2
    If (Not(IsComObjectCreated(hoOauth2))) Begin
        Send CreateComObject of hoOauth2
    End

    // This should be the port in the localhost callback URL for your app.  
    // The callback URL would look like "http://localhost:3017/" if the port number is 3017.
    Set ComListenPort Of hoOauth2 To 3017

    Set ComAuthorizationEndpoint Of hoOauth2 To "https://github.com/login/oauth/authorize"
    Set ComTokenEndpoint Of hoOauth2 To "https://github.com/login/oauth/access_token"

    // Replace with your actual Client ID
    Set ComClientId Of hoOauth2 To "CLIENT_ID"

    // This is for Require Proof Key for Code Exchange (PKCE)
    // See OAuth2 PKCE Explained
    Set ComCodeChallenge Of hoOauth2 To True
    Set ComCodeChallengeMethod Of hoOauth2 To "S256"

    // To force the OAuth consent screen to reappear (even if previously granted)
    Get ComAddAuthQueryParam Of hoOauth2 "prompt" "consent" To iSuccess

    // Begin the OAuth2 Authorization code flow.  This returns a URL that should be loaded in a browser.
    Get ComStartAuth Of hoOauth2 To sUrl
    Get ComLastMethodSuccess Of hoOauth2 To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoOauth2 To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Launch the default browser on the system and navigate to the url.
    // The LaunchBrowser method was added in Chilkat v10.1.2.
    Get ComLaunchBrowser Of hoOauth2 sUrl To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoOauth2 To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Wait for the user to approve or deny authorization in the browser.
    Move 0 To iNumMsWaited
    While ((iNumMsWaited < 90000) And ((ComAuthFlowState(hoOauth2)) < 3))
        Send ComSleepMs To hoOauth2 100
        Move (iNumMsWaited + 100) To iNumMsWaited
    Loop

    // 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.

    Get ComAuthFlowState Of hoOauth2 To iTemp1
    If (iTemp1 < 3) Begin
        Get ComCancel Of hoOauth2 To iSuccess
        Showln "No response from the browser!"
        Procedure_Return
    End

    // 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.

    Get ComAuthFlowState Of hoOauth2 To iTemp1
    If (iTemp1 = 5) Begin
        Showln "OAuth2 failed to complete."
        Get ComFailureInfo Of hoOauth2 To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComAuthFlowState Of hoOauth2 To iTemp1
    If (iTemp1 = 4) Begin
        Showln "OAuth2 authorization was denied."
        Get ComAccessTokenResponse Of hoOauth2 To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComAuthFlowState Of hoOauth2 To iTemp1
    If (iTemp1 <> 3) Begin
        Get ComAuthFlowState Of hoOauth2 To iTemp1
        Showln "Unexpected AuthFlowState:" iTemp1
        Procedure_Return
    End

    Showln "OAuth2 authorization granted!"
    Get ComAccessToken Of hoOauth2 To sTemp1
    Showln "Access Token = " sTemp1


End_Procedure