Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.0.0+

Download Google OAuth2 Certs (JWK) and Load into Chilkat PublicKey Objects

See more OAuth2 Examples

Demonstrates how to download the JWK from https://www.googleapis.com/oauth2/v3/certs and load the public keys into Chilkat public key objects.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkPublicKey.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    jwkStr.s = CkHttp::ckQuickGetStr(http,"https://www.googleapis.com/oauth2/v3/certs")
    If CkHttp::ckLastMethodSuccess(http) = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        ProcedureReturn
    EndIf

    ;  We have the following:

    ;      {
    ;        "keys": [
    ;  	{
    ;  	  "kid": "e8732db06287515556213b80acbcfd08cfb302a9",
    ;  	  "n": "4RIrO30287Wsq3gqXCMkUYMVAeI3H8...w2mbMNEBQ",
    ;  	  "kty": "RSA",
    ;  	  "e": "AQAB",
    ;  	  "alg": "RS256",
    ;  	  "use": "sig"
    ;  	},
    ;  	{
    ;  	  "kid": "8462a71da4f6d611fc0fecf0fc4ba9c37d65e6cd",
    ;  	  "e": "AQAB",
    ;  	  "n": "xT_ngLZNmT5GBtJZeTB...Ft4gK0eoFi0d3l8bcw",
    ;  	  "alg": "RS256",
    ;  	  "use": "sig",
    ;  	  "kty": "RSA"
    ;  	}
    ;        ]
    ;      }

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

    success = CkJsonObject::ckLoad(json,jwkStr)

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

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

    numKeys.i = CkJsonObject::ckSizeOfArray(json,"keys")
    i.i = 0
    While i < numKeys
        CkJsonObject::setCkI(json, i)

        CkJsonObject::ckObjectOf2(json,"keys[i]",jsonKey)

        success = CkPublicKey::ckLoadFromString(pubKey,CkJsonObject::ckEmit(jsonKey))
        If success = 0
            Debug CkPublicKey::ckLastErrorText(pubKey)
            CkHttp::ckDispose(http)
            CkJsonObject::ckDispose(json)
            CkJsonObject::ckDispose(jsonKey)
            CkPublicKey::ckDispose(pubKey)
            ProcedureReturn
        EndIf

        Debug Str(i)
        Debug CkPublicKey::ckGetPem(pubKey,1)
        i = i + 1
    Wend

    Debug "Success."

    ;  Sample output:

    ;  0
    ;  -----BEGIN RSA PUBLIC KEY-----
    ;  MIIBCgKCAQEA4RIrO30287Wsq3gqXCMkUYMVAeI3H8LVE6IXR1krdFeGnZLiGUPw
    ;  cbkeVpXf3lmJdsStOg+jijces2DZCfPyIBiQuLYfxxmAZE6ErJ0QJFg1stwli2Pz
    ;  9ncYhFoqi8pXr7kEzEJBTzX4thuw56ydbGsshSEznPXoerCJOc7UI2+n0wFCWQ4Y
    ;  LHbh/PrWt4vdadyUUUW/QpQHXQLdD8q/Qwqdj0O9zlJE7R6Elw2E9EqnHyIGu1hm
    ;  LxhqrTru1M18SUhONYbVskV/BCEdVKs//X96849HorWQDCAgVMWfGsdMVq55FAdJ
    ;  680N5UmQDRynIZ4+PeNGN4S9iw2mbMNEBQIDAQAB
    ;  -----END RSA PUBLIC KEY-----
    ;  
    ;  1
    ;  -----BEGIN RSA PUBLIC KEY-----
    ;  MIIBCgKCAQEAxT/ngLZNmT5GBdkLtJZjNeTB+8B5yWgrq/e5eMZ1hrZhcmLK+dSn
    ;  IkpOPV8/OekV67EnQ7I4II2rcNJnHGrGKZziXO3XN2gtUHE+mBJC99oULSbX/QwB
    ;  Kz7gC/IBPq9EuxTt6Oq6fPkVQ9DbRIgWJSEGBF/KRaNl3kyAlIZfpY7XgHyJTTv8
    ;  E7yAcYKPR+36gzdl+ps0sDLKzUuAtZNq8llK0u80z6AtAUIYwWdkEhM9upy6keKI
    ;  TasIxcsO7M6kZPINUSbh6t5VAm8FuqRmxpgg+9c9/GQSGd89InVypoVzWLQ+wOGg
    ;  5G4H6JqIgtj0TRFt4gK0eoFi2U0d3l8bcwIDAQAB
    ;  -----END RSA PUBLIC KEY-----
    ;  
    ;  Success.


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(json)
    CkJsonObject::ckDispose(jsonKey)
    CkPublicKey::ckDispose(pubKey)


    ProcedureReturn
EndProcedure