Go to the documentation of this file.
40 "{ \"private_key\": \"-----BEGIN PRIVATE KEY-----"
41 "\\nMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOEvJsnoHnyHkXcp\\n7mJE"
43 "WGjiw71NfXByguekSKho65FxaGbsnSM9SMQAqVk7Q2rG+I0OpsT0LrWQtZ\\nyjSeg/"
44 "rWBQvS4hle4LfijkP3J5BG+"
45 "IXDMP8RfziNRQsenAXDNPkY4kJCvKux2xdD\\nOnVF6N7dL3nTYZg+"
46 "uQrNsMTz9UxVAgMBAAECgYEAzbLewe1xe9vy+2GoSsfib+28\\nDZgSE6Bu/"
47 "zuFoPrRc6qL9p2SsnV7txrunTyJkkOnPLND9ABAXybRTlcVKP/sGgza\\n/"
48 "8HpCqFYM9V8f34SBWfD4fRFT+n/"
49 "73cfRUtGXdXpseva2lh8RilIQfPhNZAncenU\\ngqXjDvpkypEusgXAykECQQD+";
51 "53XxNVnxBHsYb+AYEfklR96yVi8HywjVHP34+OQZ\\nCslxoHQM8s+"
52 "dBnjfScLu22JqkPv04xyxmt0QAKm9+vTdAkEA4ib7YvEAn2jXzcCI\\nEkoy2L/"
53 "XydR1GCHoacdfdAwiL2npOdnbvi4ZmdYRPY1LSTO058tQHKVXV7NLeCa3\\nAARh2QJBAMKeDA"
55 "W303SQv2cZTdbeaLKJbB5drz3eo3j7dDKjrTD9JupixFbzcGw\\n8FZi5c8idxiwC36kbAL6Hz"
57 "ZoX+ofI0CQE6KCzPJTtYNqyShgKAZdJ8hwOcvCZtf\\n6z8RJm0+"
58 "6YBd38lfh5j8mZd7aHFf6I17j5AQY7oPEc47TjJj/"
59 "5nZ68ECQQDvYuI3\\nLyK5fS8g0SYbmPOL9TlcHDOqwG0mrX9qpg5DC2fniXNSrrZ64GTDKdzZ"
61 "Ap6LI9W\\nIqv4vr6y38N79TTC\\n-----END PRIVATE KEY-----\\n\", ";
63 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
65 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
66 "com\", \"client_id\": "
67 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
68 "com\", \"type\": \"service_account\" }";
71 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
72 "\"client_email\": \"accounts.google.com\", "
74 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
75 "com\", \"type\": \"service_account\" }";
77 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
79 "\"foo@bar.com\", \"client_id\": "
80 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
81 "com\", \"type\": \"service_account\" }";
84 "bar.com",
"keys.bar.com/jwk"};
93 " \"alg\": \"RS256\","
95 " \"kid\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\","
97 "\"4S8myegefIeRdynuYkSqBYaOLDvU19cHKC56RIqGjrkXFoZuydIz1IxACpWTtDasb4jQ6mxP"
98 "QutZC1nKNJ6D-tYFC9LiGV7gt-KOQ_cnkEb4hcMw_xF_OI1FCx6cBcM0-"
99 "RjiQkK8q7HbF0M6dUXo3t0vedNhmD65Cs2wxPP1TFU=\","
108 "{\"e6b5137873db8d2ef81e06a47289e6434ec8a165\": \"-----BEGIN "
110 "\\nMIICATCCAWoCCQDEywLhxvHjnDANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB\\nVTET"
111 "MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0\\ncyBQdHkgTHR"
112 "kMB4XDTE1MDYyOTA4Mzk1MFoXDTI1MDYyNjA4Mzk1MFowRTELMAkG\\nA1UEBhMCQVUxEzARBg"
113 "NVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0\\nIFdpZGdpdHMgUHR5IEx0ZDCBn"
114 "zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4S8m\\nyegefIeRdynuYkSqBYaOLDvU19cHKC56"
115 "RIqGjrkXFoZuydIz1IxACpWTtDasb4jQ\\n6mxPQutZC1nKNJ6D+tYFC9LiGV7gt+KOQ/";
118 "cnkEb4hcMw/xF/OI1FCx6cBcM0+"
119 "Rji\\nQkK8q7HbF0M6dUXo3t0vedNhmD65Cs2wxPP1TFUCAwEAATANBgkqhkiG9w0BAQsF\\nA"
120 "AOBgQBfu69FkPmBknbKNFgurPz78kbs3VNN+k/"
121 "PUgO5DHKskJmgK2TbtvX2VMpx\\nkftmHGzgzMzUlOtigCaGMgHWjfqjpP9uuDbahXrZBJzB8c"
122 "Oq7MrQF8r17qVvo3Ue\\nPjTKQMAsU8uxTEMmeuz9L6yExs0rfd6bPOrQkAoVfFfiYB3/"
123 "pA==\\n-----END CERTIFICATE-----\\n\"}";
129 " \"issuer\": \"https://accounts.google.com\","
130 " \"authorization_endpoint\": "
131 "\"https://accounts.google.com/o/oauth2/v2/auth\","
132 " \"token_endpoint\": \"https://oauth2.googleapis.com/token\","
133 " \"userinfo_endpoint\": \"https://www.googleapis.com/oauth2/v3/userinfo\","
134 " \"revocation_endpoint\": \"https://oauth2.googleapis.com/revoke\","
135 " \"jwks_uri\": \"https://www.googleapis.com/oauth2/v3/certs\""
139 "{ \"aud\": \"https://foo.com\","
140 " \"iss\": \"blah.foo.com\","
141 " \"sub\": \"juju@blah.foo.com\","
142 " \"jti\": \"jwtuniqueid\","
146 " \"foo\": \"bar\"}";
149 "{ \"aud\": \"https://foo.com\","
150 " \"iss\": \"blah.foo.com\","
151 " \"sub\": \"juju@blah.foo.com\","
152 " \"jti\": \"jwtuniqueid\","
153 " \"foo\": \"bar\"}";
156 "{ \"aud\": \"https://foo.com\","
157 " \"iss\": \"evil@blah.foo.com\","
158 " \"sub\": \"juju@blah.foo.com\","
159 " \"jti\": \"jwtuniqueid\","
160 " \"foo\": \"bar\"}";
163 "{ \"aud\": \"https://foo.com\","
165 " \"sub\": \"juju@blah.foo.com\","
166 " \"jti\": \"jwtuniqueid\","
167 " \"foo\": \"bar\"}";
318 strcpy(current, last_part);
338 response.body_length = strlen(body);
344 const char* ,
const char* ,
size_t ,
347 GPR_ASSERT(
"HTTP POST should not be called" ==
nullptr);
353 const char* ,
const char* ,
size_t ,
356 GPR_ASSERT(
"HTTP PUT should not be called" ==
nullptr);
365 GPR_ASSERT(strcmp(host,
"www.googleapis.com") == 0);
367 "/robot/v1/metadata/x509/"
368 "777-abaslkan11hlb6nmim3bpspl31ud@developer."
369 "gserviceaccount.com") == 0);
413 GPR_ASSERT(strcmp(host,
"keys.bar.com") == 0);
444 const char* host,
const char*
path,
449 GPR_ASSERT(strcmp(host,
"www.googleapis.com") == 0);
456 const char* host,
const char*
path,
461 GPR_ASSERT(strcmp(host,
"accounts.google.com") == 0);
503 const char* ,
const char* ,
564 char* last_dot = strrchr(jwt,
'.');
575 memcpy(last_dot + 1, bad_b64_sig, strlen(bad_b64_sig));
647 int main(
int argc,
char** argv) {
const char * grpc_jwt_claims_issuer(const grpc_jwt_claims *claims)
static void test_jwt_issuer_email_domain(void)
GPRAPI void grpc_slice_unref(grpc_slice s)
@ GRPC_JWT_VERIFIER_TIME_CONSTRAINT_FAILURE
static void on_verification_success(void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims)
static const char json_key_str_part3_for_url_issuer[]
static int httpcli_put_should_not_be_called(const grpc_http_request *, const char *, const char *, const char *, size_t, grpc_core::Timestamp, grpc_closure *, grpc_http_response *)
static const char json_key_str_part1[]
void grpc_jwt_verifier_verify(grpc_jwt_verifier *verifier, grpc_pollset *pollset, const char *jwt, const char *audience, grpc_jwt_verification_done_cb cb, void *user_data)
static void test_expired_claims_failure(void)
static int httpcli_get_bad_json(const grpc_http_request *, const char *, const char *, grpc_core::Timestamp, grpc_closure *on_done, grpc_http_response *response)
@ GRPC_JWT_VERIFIER_BAD_SIGNATURE
static const char expired_claims[]
char * grpc_jwt_encode_and_sign(const grpc_auth_json_key *json_key, const char *audience, gpr_timespec token_lifetime, const char *scope)
GPRAPI void gpr_free(void *ptr)
static void test_bad_subject_claims_failure(void)
@ GRPC_JWT_VERIFIER_BAD_SUBJECT
GPRAPI void * gpr_malloc(size_t size)
gpr_timespec grpc_jwt_claims_expires_at(const grpc_jwt_claims *claims)
const char * grpc_jwt_claims_subject(const grpc_jwt_claims *claims)
const char * expected_issuer
static void on_verification_bad_format(void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims)
void grpc_auth_json_key_destruct(grpc_auth_json_key *json_key)
static void verifier(grpc_server *server, grpc_completion_queue *cq, void *)
const char * grpc_jwt_claims_id(const grpc_jwt_claims *claims)
void grpc_jwt_claims_destroy(grpc_jwt_claims *claims)
static const char good_google_email_keys_part2[]
static const char expected_user_data[]
static gpr_timespec expected_lifetime
grpc_auth_json_key grpc_auth_json_key_create_from_string(const char *json_string)
static char * good_google_email_keys(void)
const char * grpc_jwt_issuer_email_domain(const char *issuer)
static void SetOverride(grpc_httpcli_get_override get, grpc_httpcli_post_override post, grpc_httpcli_put_override put)
static int httpcli_get_custom_keys_for_email(const grpc_http_request *, const char *host, const char *path, grpc_core::Timestamp, grpc_closure *on_done, grpc_http_response *response)
static void on_verification_key_retrieval_error(void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
int grpc_auth_json_key_is_valid(const grpc_auth_json_key *json_key)
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
def c_str(s, encoding='ascii')
JSON (JavaScript Object Notation).
#define GRPC_SLICE_IS_EMPTY(slice)
grpc_slice grpc_base64_decode(const char *b64, int url_safe)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
static int httpcli_get_jwk_set(const grpc_http_request *, const char *host, const char *path, grpc_core::Timestamp, grpc_closure *on_done, grpc_http_response *response)
static void on_verification_bad_signature(void *user_data, grpc_jwt_verifier_status status, grpc_jwt_claims *claims)
@ GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR
const Json * grpc_jwt_claims_json(const grpc_jwt_claims *claims)
const char * expected_subject
static void test_jwt_verifier_url_issuer_bad_config(void)
static grpc_jwt_verifier_email_domain_key_url_mapping custom_mapping
gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims *claims)
#define GRPC_SLICE_START_PTR(slice)
static int httpcli_get_openid_config(const grpc_http_request *, const char *host, const char *path, grpc_core::Timestamp, grpc_closure *on_done, grpc_http_response *response)
static const char invalid_claims[]
const char * grpc_jwt_claims_audience(const grpc_jwt_claims *claims)
int main(int argc, char **argv)
bool Parse(FlagOpFn op, absl::string_view text, void *dst, std::string *error)
static const char json_key_str_part3_for_custom_email_issuer[]
static int httpcli_get_should_not_be_called(const grpc_http_request *, const char *, const char *, grpc_core::Timestamp, grpc_closure *, grpc_http_response *)
static int httpcli_get_google_keys_for_email(const grpc_http_request *, const char *host, const char *path, grpc_core::Timestamp, grpc_closure *on_done, grpc_http_response *response)
char * grpc_base64_encode(const void *vdata, size_t data_size, int url_safe, int multiline)
#define GRPC_OPENID_CONFIG_URL_SUFFIX
static char * key_str(grpc_error_strs which)
@ GRPC_JWT_VERIFIER_BAD_FORMAT
static const char good_jwk_set[]
#define GRPC_SLICE_LENGTH(slice)
static const char claims_with_bad_subject[]
static const char good_google_email_keys_part1[]
static char * json_key_str(const char *last_part)
grpc_jwt_claims * grpc_jwt_claims_from_json(Json json)
grpc_core::ExecCtx exec_ctx
std::string grpc_error_std_string(grpc_error_handle error)
static void test_jwt_verifier_bad_format(void)
grpc_jwt_verifier * grpc_jwt_verifier_create(const grpc_jwt_verifier_email_domain_key_url_mapping *mappings, size_t num_mappings)
static void test_jwt_verifier_custom_email_issuer_success(void)
static void test_jwt_verifier_google_email_issuer_success(void)
static void test_bad_audience_claims_failure(void)
static void corrupt_jwt_sig(char *jwt)
static grpc_http_response http_response(int status, char *body)
static void Run(const DebugLocation &location, grpc_closure *closure, grpc_error_handle error)
static const char expected_audience[]
static const char json_key_str_part2[]
grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims *claims, const char *audience)
GPRAPI char * gpr_strdup(const char *src)
static int httpcli_post_should_not_be_called(const grpc_http_request *, const char *, const char *, const char *, size_t, grpc_core::Timestamp, grpc_closure *, grpc_http_response *)
static void test_invalid_claims_failure(void)
grpc_jwt_verifier_status expected_status
gpr_timespec grpc_jwt_claims_issued_at(const grpc_jwt_claims *claims)
void grpc_jwt_verifier_destroy(grpc_jwt_verifier *v)
static void test_jwt_verifier_bad_json_key(void)
GRPCAPI void grpc_init(void)
static const char good_openid_config[]
static void test_jwt_verifier_url_issuer_success(void)
static const char claims_without_time_constraint[]
static void test_jwt_verifier_bad_signature(void)
GRPCAPI void grpc_shutdown(void)
@ GRPC_JWT_VERIFIER_BAD_AUDIENCE
static const char json_key_str_part3_for_google_email_issuer[]
#define GRPC_ERROR_IS_NONE(err)
static void test_claims_success(void)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:14