Chilkat Online Tools

ERROR!

------------------- GenerateCode ----------------------
ImpliedContentType: application/x-www-form-urlencoded
---- begin chilkat script ----
// This example assumes the Chilkat API to have been previously unlocked.
// See {{-global_unlock:::Global Unlock Sample-}} for sample code.

new Http http;
ckbool success;

new HttpRequest req;

new JsonObject jsonParam1;
call req.AddParam("token",jsonParam1.Emit());

new JsonObject jsonParam2;
call req.AddParam("client_id",jsonParam2.Emit());

new JsonObject jsonParam3;
call req.AddParam("client_secret",jsonParam3.Emit());

call req.AddHeader("Authorization","Bearer <access_token>");

new HttpResponse resp;
req.HttpVerb = "POST";
req.ContentType = "application/x-www-form-urlencoded";
success = http.PostUrlEncoded("https://<tenant-name>.forgeblocks.com/am/oauth2/realms/root/realms/alpha/introspect", req,resp);
if (success == ckfalse) {
println http.LastErrorText;
return;
}

new StringBuilder sbResponseBody;
ignore = resp.GetBodySb(sbResponseBody);

new JsonObject jResp;
call jResp.LoadSb(sbResponseBody);
jResp.EmitCompact = ckfalse;

println "Response Body:";
println jResp.Emit();

int respStatusCode = resp.StatusCode;
println "Response Status Code = ",respStatusCode;
if (respStatusCode >= 400) {
    println "Response Header:";
    println resp.Header;
    println "Failed.";
    return;
}

// Sample JSON response:
// (Sample code for parsing the JSON response is shown below)

// {
//   "active": true,
//   "scope": "print",
//   "realm": "/",
//   "client_id": "forgerockDemoConfidentialClient",
//   "user_id": "forgerockDemoConfidentialClient",
//   "token_type": "Bearer",
//   "exp": 1597324633,
//   "sub": "forgerockDemoConfidentialClient",
//   "iss": "http://openam.example.com:8080/openam/oauth2",
//   "authGrantId": "5tq7oSZ62txPaK80X3Mdex4zzew",
//   "auditTrackingId": "037f02f9-d821-4f72-8563-c5050c40fdc3-52181",
//   "expires_in": 3600
// }

// Sample code for parsing the JSON response...
// Use this online tool to generate parsing code from sample JSON: {{.https://tools.chilkat.io/jsonParse|||Generate JSON Parsing Code.}}

#ifdef IS_C_CPP
// Chilkat functions returning "const char *" return a pointer to temporary internal memory owned and managed by Chilkat.
#undef IS_C_CPP


ckbool active = jResp.BoolOf("active");
string scope = jResp.StringOf("scope");
string realm = jResp.StringOf("realm");
string client_id = jResp.StringOf("client_id");
string user_id = jResp.StringOf("user_id");
string token_type = jResp.StringOf("token_type");
int exp = jResp.IntOf("exp");
string v_sub = jResp.StringOf("sub");
string iss = jResp.StringOf("iss");
string authGrantId = jResp.StringOf("authGrantId");
string auditTrackingId = jResp.StringOf("auditTrackingId");
int expires_in = jResp.IntOf("expires_in");



---- end chilkat script ----

DataFlex / ForgeRock Identity Cloud Collection / Step 2: Introspect the Access Token

Back to Collection Items

Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoHttp
    Boolean iSuccess
    Handle hoReq
    Handle hoJsonParam1
    Handle hoJsonParam2
    Handle hoJsonParam3
    Handle hoResp
    Variant vSbResponseBody
    Handle hoSbResponseBody
    Handle hoJResp
    Integer iRespStatusCode
    Boolean iActive
    String sScope
    String sRealm
    String sClient_id
    String sUser_id
    String sToken_type
    Integer iExp
    String sV_sub
    String sIss
    String sAuthGrantId
    String sAuditTrackingId
    Integer iExpires_in
    String sTemp1

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

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
    If (Not(IsComObjectCreated(hoReq))) Begin
        Send CreateComObject of hoReq
    End

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonParam1
    If (Not(IsComObjectCreated(hoJsonParam1))) Begin
        Send CreateComObject of hoJsonParam1
    End
    Get ComEmit Of hoJsonParam1 To sTemp1
    Send ComAddParam To hoReq "token" sTemp1

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonParam2
    If (Not(IsComObjectCreated(hoJsonParam2))) Begin
        Send CreateComObject of hoJsonParam2
    End
    Get ComEmit Of hoJsonParam2 To sTemp1
    Send ComAddParam To hoReq "client_id" sTemp1

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonParam3
    If (Not(IsComObjectCreated(hoJsonParam3))) Begin
        Send CreateComObject of hoJsonParam3
    End
    Get ComEmit Of hoJsonParam3 To sTemp1
    Send ComAddParam To hoReq "client_secret" sTemp1

    Send ComAddHeader To hoReq "Authorization" "Bearer <access_token>"

    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Set ComHttpVerb Of hoReq To "POST"
    Set ComContentType Of hoReq To "application/x-www-form-urlencoded"
ERROR: Assignment type mismatch.  ExpressionType=HttpResponse, atgType=ckbool

    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponseBody
    If (Not(IsComObjectCreated(hoSbResponseBody))) Begin
        Send CreateComObject of hoSbResponseBody
    End
    Get pvComObject of hoSbResponseBody to vSbResponseBody
    Get ComGetBodySb Of hoResp vSbResponseBody To iSuccess

    Get Create (RefClass(cComChilkatJsonObject)) To hoJResp
    If (Not(IsComObjectCreated(hoJResp))) Begin
        Send CreateComObject of hoJResp
    End
    Get pvComObject of hoSbResponseBody to vSbResponseBody
    Get ComLoadSb Of hoJResp vSbResponseBody To iSuccess
    Set ComEmitCompact Of hoJResp To False

    Showln "Response Body:"
    Get ComEmit Of hoJResp To sTemp1
    Showln sTemp1

    Get ComStatusCode Of hoResp To iRespStatusCode
    Showln "Response Status Code = " iRespStatusCode
    If (iRespStatusCode >= 400) Begin
        Showln "Response Header:"
        Get ComHeader Of hoResp To sTemp1
        Showln sTemp1
        Showln "Failed."
        Procedure_Return
    End

    // Sample JSON response:
    // (Sample code for parsing the JSON response is shown below)

    // {
    //   "active": true,
    //   "scope": "print",
    //   "realm": "/",
    //   "client_id": "forgerockDemoConfidentialClient",
    //   "user_id": "forgerockDemoConfidentialClient",
    //   "token_type": "Bearer",
    //   "exp": 1597324633,
    //   "sub": "forgerockDemoConfidentialClient",
    //   "iss": "http://openam.example.com:8080/openam/oauth2",
    //   "authGrantId": "5tq7oSZ62txPaK80X3Mdex4zzew",
    //   "auditTrackingId": "037f02f9-d821-4f72-8563-c5050c40fdc3-52181",
    //   "expires_in": 3600
    // }

    // Sample code for parsing the JSON response...
    // Use this online tool to generate parsing code from sample JSON: Generate JSON Parsing Code

    Get ComBoolOf Of hoJResp "active" To iActive
    Get ComStringOf Of hoJResp "scope" To sScope
    Get ComStringOf Of hoJResp "realm" To sRealm
    Get ComStringOf Of hoJResp "client_id" To sClient_id
    Get ComStringOf Of hoJResp "user_id" To sUser_id
    Get ComStringOf Of hoJResp "token_type" To sToken_type
    Get ComIntOf Of hoJResp "exp" To iExp
    Get ComStringOf Of hoJResp "sub" To sV_sub
    Get ComStringOf Of hoJResp "iss" To sIss
    Get ComStringOf Of hoJResp "authGrantId" To sAuthGrantId
    Get ComStringOf Of hoJResp "auditTrackingId" To sAuditTrackingId
    Get ComIntOf Of hoJResp "expires_in" To iExpires_in


End_Procedure

Curl Command

curl -X POST
	-H "Authorization: Bearer <access_token>"
	--data-urlencode 'token={{access_token}}'
	--data-urlencode 'client_id={{postmanConfidentialClientId}}'
	--data-urlencode 'client_secret={{postmanClientSecret}}'
https://<tenant-name>.forgeblocks.com/am/oauth2/realms/root/realms/alpha/introspect

Postman Collection Item JSON

{
  "name": "Step 2: Introspect the Access Token ",
  "event": [
    {
      "listen": "test",
      "script": {
        "exec": [
          "// Tests",
          "",
          "const jsonData = JSON.parse(responseBody);",
          "",
          "pm.test(\"Status code is 200\", () => {",
          "  pm.expect(pm.response.code).to.eql(200);",
          "});",
          "",
          "pm.test(\"Response contains correct `client_id`.\", function () {",
          "    pm.expect(jsonData.client_id).to.eql(pm.collectionVariables.get(\"postmanConfidentialClientId\"));",
          "});",
          "",
          "",
          ""
        ],
        "type": "text/javascript"
      }
    }
  ],
  "request": {
    "method": "POST",
    "header": [
    ],
    "body": {
      "mode": "urlencoded",
      "urlencoded": [
        {
          "key": "token",
          "value": "{{access_token}}",
          "description": "Access token you want to introspect.",
          "type": "text"
        },
        {
          "key": "client_id",
          "value": "{{postmanConfidentialClientId}}",
          "description": "The ID of the Confidential OAuth Client.",
          "type": "text"
        },
        {
          "key": "client_secret",
          "value": "{{postmanClientSecret}}",
          "description": "The secret of the Confidential OAuth Client.",
          "type": "text"
        }
      ]
    },
    "url": {
      "raw": "{{amUrl}}/oauth2{{realm}}/introspect",
      "host": [
        "{{amUrl}}"
      ],
      "path": [
        "oauth2{{realm}}",
        "introspect"
      ]
    },
    "description": "Retrieve metadata about the active access token, such as, approved scopes, the user that authorized the token, and the expiry time."
  },
  "response": [
    {
      "name": "Example",
      "originalRequest": {
        "method": "POST",
        "header": [
        ],
        "body": {
          "mode": "urlencoded",
          "urlencoded": [
            {
              "key": "token",
              "value": "{{access_token}}",
              "description": "Access token you want to introspect.",
              "type": "text"
            },
            {
              "key": "client_id",
              "value": "{{postmanConfidentialClientId}}",
              "description": "The ID of the Confidential OAuth Client.",
              "type": "text"
            },
            {
              "key": "client_secret",
              "value": "{{postmanClientSecret}}",
              "description": "The secret of the Confidential OAuth Client.",
              "type": "text"
            }
          ]
        },
        "url": {
          "raw": "{{amUrl}}/oauth2{{realm}}/introspect",
          "host": [
            "{{amUrl}}"
          ],
          "path": [
            "oauth2{{realm}}",
            "introspect"
          ]
        }
      },
      "status": "OK",
      "code": 200,
      "_postman_previewlanguage": "json",
      "header": [
        {
          "key": "X-Frame-Options",
          "value": "SAMEORIGIN"
        },
        {
          "key": "X-Content-Type-Options",
          "value": "nosniff"
        },
        {
          "key": "Content-Type",
          "value": "application/json;charset=UTF-8"
        },
        {
          "key": "Content-Length",
          "value": "390"
        },
        {
          "key": "Date",
          "value": "Thu, 13 Aug 2020 12:17:22 GMT"
        }
      ],
      "cookie": [
      ],
      "body": "{\n    \"active\": true,\n    \"scope\": \"print\",\n    \"realm\": \"/\",\n    \"client_id\": \"forgerockDemoConfidentialClient\",\n    \"user_id\": \"forgerockDemoConfidentialClient\",\n    \"token_type\": \"Bearer\",\n    \"exp\": 1597324633,\n    \"sub\": \"forgerockDemoConfidentialClient\",\n    \"iss\": \"http://openam.example.com:8080/openam/oauth2\",\n    \"authGrantId\": \"5tq7oSZ62txPaK80X3Mdex4zzew\",\n    \"auditTrackingId\": \"037f02f9-d821-4f72-8563-c5050c40fdc3-52181\",\n    \"expires_in\": 3600\n}"
    }
  ]
}