Sample code for 30+ languages & platforms
PureBasic

Create JWT Using HS256, HS384, or HS512

See more JSON Web Token (JWT) Examples

Demonstrates how to create a JWT using HS256, HS384, or HS512. (HS256 is JWT's acronym for HMAC-SHA256.) When HMAC is used, the secret is a shared secret (i.e. password) that both client and server know beforehand.

This example also demonstrates how to include time constraints:

  • nbf: Not Before Time
  • exp: Expiration Time
  • iat: Issue At Time

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJwt.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; Demonstrates how to create an HMAC JWT using a shared secret (password).

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

    jwt.i = CkJwt::ckCreate()
    If jwt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Build the JOSE header
    jose.i = CkJsonObject::ckCreate()
    If jose.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Use HS256.  Pass the string "HS384" or "HS512" to use a different algorithm.
    success = CkJsonObject::ckAppendString(jose,"alg","HS256")
    success = CkJsonObject::ckAppendString(jose,"typ","JWT")

    ; Now build the JWT claims (also known as the payload)
    claims.i = CkJsonObject::ckCreate()
    If claims.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckAppendString(claims,"iss","http://example.org")
    success = CkJsonObject::ckAppendString(claims,"sub","John")
    success = CkJsonObject::ckAppendString(claims,"aud","http://example.com")

    ; Set the timestamp of when the JWT was created to now.
    curDateTime.i = CkJwt::ckGenNumericDate(jwt,0)
    success = CkJsonObject::ckAddIntAt(claims,-1,"iat",curDateTime)

    ; Set the "not process before" timestamp to now.
    success = CkJsonObject::ckAddIntAt(claims,-1,"nbf",curDateTime)

    ; Set the timestamp defining an expiration time (end time) for the token
    ; to be now + 1 hour (3600 seconds)
    success = CkJsonObject::ckAddIntAt(claims,-1,"exp",curDateTime + 3600)

    ; Produce the smallest possible JWT:
    CkJwt::setCkAutoCompact(jwt, 1)

    strJwt.s = CkJwt::ckCreateJwt(jwt,CkJsonObject::ckEmit(jose),CkJsonObject::ckEmit(claims),"secret")

    Debug strJwt


    CkJwt::ckDispose(jwt)
    CkJsonObject::ckDispose(jose)
    CkJsonObject::ckDispose(claims)


    ProcedureReturn
EndProcedure