Sample code for 30+ languages & platforms
Visual FoxPro

Decode Microsoft Graph ID Token

See more Microsoft Graph Examples

Demonstrates how to decode a Microsoft Graph ID token.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loJsonToken
LOCAL loJwt
LOCAL lcIdToken
LOCAL lcJose
LOCAL loJsonHeader
LOCAL lcClaims
LOCAL loJsonClaims
LOCAL lcVer
LOCAL lcIss
LOCAL lcS_sub
LOCAL lcAud
LOCAL lnExp
LOCAL lnIat
LOCAL lnNbf
LOCAL lcName
LOCAL lcPreferred_username
LOCAL lcOid
LOCAL lcTid
LOCAL lcAio

lnSuccess = 0

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

* In a previous example, we obtained a Microsoft Graph OAuth2 access token.
* This example loads the JSON saved from the previous example and decodes the id_token.

* Our Microsoft Graph OAuth2 token looks like this:

* {
*   "token_type": "Bearer",
*   "scope": "openid profile User.ReadWrite Mail.ReadWrite Mail.Send Files.ReadWrite User.Read Calendars.ReadWrite Group.ReadWrite.All",
*   "expires_in": 3600,
*   "ext_expires_in": 3600,
*   "access_token": "EwCQA8l6...0HhMKYwC",
*   "refresh_token": "MCWulIvzi2yD0S...igEFn51mqcByhZtAJg",
*   "id_token": "eyJ0eXAiOiJKV1...Q7lRDaR-7A",
*   "expires_on": "1562862714"
* }

loJsonToken = CreateObject('Chilkat.JsonObject')
lnSuccess = loJsonToken.LoadFile("qa_data/tokens/microsoftGraph.json")
IF (lnSuccess = 0) THEN
    ? "Failed to load the JSON file..."
    RELEASE loJsonToken
    CANCEL
ENDIF

* Use Chilkat's JWT API to examine the id_token..
loJwt = CreateObject('Chilkat.Jwt')
lcIdToken = loJsonToken.StringOf("id_token")

* Extract the JOSE header..
lcJose = loJwt.GetHeader(lcIdToken)

loJsonHeader = CreateObject('Chilkat.JsonObject')
loJsonHeader.Load(lcJose)
loJsonHeader.EmitCompact = 0
? loJsonHeader.Emit()

* The JOSE header looks like this:

* {
*   "typ": "JWT",
*   "alg": "RS256",
*   "kid": "1LTMzakihiRla_8z2BEJVXeWMqo"
* }

lcClaims = loJwt.GetPayload(lcIdToken)

loJsonClaims = CreateObject('Chilkat.JsonObject')
loJsonClaims.Load(lcClaims)
loJsonClaims.EmitCompact = 0
? loJsonClaims.Emit()

* The claims look like this:

* {
*   "ver": "2.0",
*   "iss": "https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0",
*   "sub": "AAAAAAAAAAAAAAAAAAAAAHJFryd6Gydo-XtTd1nhUNQ",
*   "aud": "18c456bd-db75-43fe-9724-9e5d821c68ff",
*   "exp": 1562945513,
*   "iat": 1562858813,
*   "nbf": 1562858813,
*   "name": "Matt Chilkat",
*   "preferred_username": "matt@example.com",
*   "oid": "00000000-0000-0000-3a33-fceb9b74cc15",
*   "tid": "9188040d-6c67-4c5b-b112-36a304b66dad",
*   "aio": "DfibJqKnWC1c0FS6G ... W6pvTrQuYzyq16ghY$"
* }
* 

* Use this online tool to generate parsing code from sample JSON: 
* Generate Parsing Code from JSON

* Get each of the claims..
lcVer = loJsonClaims.StringOf("ver")
lcIss = loJsonClaims.StringOf("iss")
lcS_sub = loJsonClaims.StringOf("sub")
lcAud = loJsonClaims.StringOf("aud")
lnExp = loJsonClaims.IntOf("exp")
lnIat = loJsonClaims.IntOf("iat")
lnNbf = loJsonClaims.IntOf("nbf")
lcName = loJsonClaims.StringOf("name")
lcPreferred_username = loJsonClaims.StringOf("preferred_username")
lcOid = loJsonClaims.StringOf("oid")
lcTid = loJsonClaims.StringOf("tid")
lcAio = loJsonClaims.StringOf("aio")

RELEASE loJsonToken
RELEASE loJwt
RELEASE loJsonHeader
RELEASE loJsonClaims