Chilkat Online Tools

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

Back to Collection Items

Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoHttp
    Boolean iSuccess
    Variant vReq
    Handle hoReq
    Handle hoJsonParam1
    Handle hoJsonParam2
    Variant vResp
    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
    Integer iAuth_level
    String sAuthGrantId
    String sAuditTrackingId
    Integer iExpires_in
    String sTemp1
    Boolean bTemp1

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

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

    Get pvComObject of hoReq to vReq
    Get ComPostUrlEncoded Of hoHttp "https://<tenant-name>.forgeblocks.com/am/oauth2/realms/root/realms/alpha/introspect" vReq To vResp
    If (IsComObject(vResp)) Begin
        Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
        Set pvComObject Of hoResp To vResp
    End
    Get ComLastMethodSuccess Of hoHttp To bTemp1
    If (bTemp1 = 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."
        Send Destroy of hoResp
        Procedure_Return
    End

    Send Destroy of hoResp

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

    // {
    //   "active": true,
    //   "scope": "write",
    //   "realm": "/",
    //   "client_id": "forgerockDemoPublicClient",
    //   "user_id": "demo",
    //   "token_type": "Bearer",
    //   "exp": 1597324518,
    //   "sub": "demo",
    //   "iss": "http://openam.example.com:8080/openam/oauth2",
    //   "auth_level": 0,
    //   "authGrantId": "6-n-MF-dK0b_Nx6NqEAQBvEXCls",
    //   "auditTrackingId": "037f02f9-d821-4f72-8563-c5050c40fdc3-51399",
    //   "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 ComIntOf Of hoJResp "auth_level" To iAuth_level
    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={{implicitGrantAccessToken}}'
	--data-urlencode 'client_id={{postmanPublicClientId}}'
https://<tenant-name>.forgeblocks.com/am/oauth2/realms/root/realms/alpha/introspect

Postman Collection Item JSON

{
  "name": "Step 3: 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(\"postmanPublicClientId\"));",
          "});",
          ""
        ],
        "type": "text/javascript"
      }
    }
  ],
  "request": {
    "method": "POST",
    "header": [
    ],
    "body": {
      "mode": "urlencoded",
      "urlencoded": [
        {
          "key": "token",
          "value": "{{implicitGrantAccessToken}}",
          "description": "Access token you want to introspect.",
          "type": "text"
        },
        {
          "key": "client_id",
          "value": "{{postmanPublicClientId}}",
          "description": "The ID of the public 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": "{{implicitGrantAccessToken}}",
              "description": "Access token you want to introspect.",
              "type": "text"
            },
            {
              "key": "client_id",
              "value": "{{postmanPublicClientId}}",
              "description": "The ID of the public 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": "345"
        },
        {
          "key": "Date",
          "value": "Thu, 13 Aug 2020 12:16:33 GMT"
        }
      ],
      "cookie": [
      ],
      "body": "{\n    \"active\": true,\n    \"scope\": \"write\",\n    \"realm\": \"/\",\n    \"client_id\": \"forgerockDemoPublicClient\",\n    \"user_id\": \"demo\",\n    \"token_type\": \"Bearer\",\n    \"exp\": 1597324518,\n    \"sub\": \"demo\",\n    \"iss\": \"http://openam.example.com:8080/openam/oauth2\",\n    \"auth_level\": 0,\n    \"authGrantId\": \"6-n-MF-dK0b_Nx6NqEAQBvEXCls\",\n    \"auditTrackingId\": \"037f02f9-d821-4f72-8563-c5050c40fdc3-51399\",\n    \"expires_in\": 3600\n}"
    }
  ]
}