Sample code for 30+ languages & platforms
Unicode C

AzureWebsites OAuth2 Password Flow

See more OAuth2 Examples

Demonstrates how to do OAuth 2.0 password flow for azurewebsites.net.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkHttpW.h>
#include <C_CkHttpRequestW.h>
#include <C_CkHttpResponseW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkJsonObjectW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkHttpW http;
    HCkHttpRequestW req;
    const wchar_t *tokenEndpoint;
    HCkHttpResponseW resp;
    HCkStringBuilderW sbResponseBody;
    HCkJsonObjectW jResp;
    int respStatusCode;
    HCkStringBuilderW sbXml;
    const wchar_t *destUrl;

    success = FALSE;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http = CkHttpW_Create();

    req = CkHttpRequestW_Create();
    CkHttpRequestW_putHttpVerb(req,L"POST");
    CkHttpRequestW_putPath(req,L"/token");
    CkHttpRequestW_putContentType(req,L"application/x-www-form-urlencoded");
    CkHttpRequestW_AddParam(req,L"grant_type",L"password");
    CkHttpRequestW_AddParam(req,L"username",L"your_username");
    CkHttpRequestW_AddParam(req,L"password",L"your_password");

    tokenEndpoint = L"https://your_api.azurewebsites.net/token";

    resp = CkHttpResponseW_Create();
    success = CkHttpW_HttpReq(http,tokenEndpoint,req,resp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkHttpW_lastErrorText(http));
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        return;
    }

    sbResponseBody = CkStringBuilderW_Create();
    CkHttpResponseW_GetBodySb(resp,sbResponseBody);
    jResp = CkJsonObjectW_Create();
    CkJsonObjectW_LoadSb(jResp,sbResponseBody);
    CkJsonObjectW_putEmitCompact(jResp,FALSE);

    wprintf(L"Response Body:\n");
    wprintf(L"%s\n",CkJsonObjectW_emit(jResp));

    // Sample JSON response:

    // {
    //   "access_token": "NQGHn ... xTS",
    //   "token_type": "bearer",
    //   "expires_in": 1209599,
    //   "userName": "your_username",
    //   ".issued": "Mon, 27 Apr 2020 23:49:35 GMT",
    //   ".expires": "Mon, 11 May 2020 23:49:35 GMT"
    // }

    respStatusCode = CkHttpResponseW_getStatusCode(resp);
    wprintf(L"Response Status Code = %d\n",respStatusCode);
    if (respStatusCode >= 400) {
        wprintf(L"Response Header:\n");
        wprintf(L"%s\n",CkHttpResponseW_header(resp));
        wprintf(L"Failed.\n");
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        CkStringBuilderW_Dispose(sbResponseBody);
        CkJsonObjectW_Dispose(jResp);
        return;
    }

    // ----------------------------------
    // Use the OAuth2 token in a request.
    // For example...

    sbXml = CkStringBuilderW_Create();
    success = CkStringBuilderW_LoadFile(sbXml,L"c:/someDir/someXmlFile.xml",L"utf-8");
    if (success == FALSE) {
        wprintf(L"Failed to load the XML file.\n");
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        CkStringBuilderW_Dispose(sbResponseBody);
        CkJsonObjectW_Dispose(jResp);
        CkStringBuilderW_Dispose(sbXml);
        return;
    }

    // Get the OAuth2 token and use it for authentication
    CkHttpW_putAuthToken(http,CkJsonObjectW_stringOf(jResp,L"token"));

    destUrl = L"https://your_api.azurewebsites.net/destinationUrl";
    success = CkHttpW_HttpSb(http,L"POST",destUrl,sbXml,L"utf-8",L"application/xml",resp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkHttpW_lastErrorText(http));
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        CkStringBuilderW_Dispose(sbResponseBody);
        CkJsonObjectW_Dispose(jResp);
        CkStringBuilderW_Dispose(sbXml);
        return;
    }

    respStatusCode = CkHttpResponseW_getStatusCode(resp);
    wprintf(L"Response Status Code = %d\n",respStatusCode);
    if (respStatusCode >= 400) {
        wprintf(L"Response Header:\n");
        wprintf(L"%s\n",CkHttpResponseW_header(resp));
        wprintf(L"Failed.\n");
        CkHttpW_Dispose(http);
        CkHttpRequestW_Dispose(req);
        CkHttpResponseW_Dispose(resp);
        CkStringBuilderW_Dispose(sbResponseBody);
        CkJsonObjectW_Dispose(jResp);
        CkStringBuilderW_Dispose(sbXml);
        return;
    }

    // Examine the response body
    wprintf(L"%s\n",CkHttpResponseW_bodyStr(resp));


    CkHttpW_Dispose(http);
    CkHttpRequestW_Dispose(req);
    CkHttpResponseW_Dispose(resp);
    CkStringBuilderW_Dispose(sbResponseBody);
    CkJsonObjectW_Dispose(jResp);
    CkStringBuilderW_Dispose(sbXml);

    }