Sample code for 30+ languages & platforms
PureBasic

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