Go to the documentation of this file.
42 "{ \"private_key\": \"-----BEGIN PRIVATE KEY-----"
43 "\\nMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOEvJsnoHnyHkXcp\\n7mJE"
45 "WGjiw71NfXByguekSKho65FxaGbsnSM9SMQAqVk7Q2rG+I0OpsT0LrWQtZ\\nyjSeg/"
46 "rWBQvS4hle4LfijkP3J5BG+"
47 "IXDMP8RfziNRQsenAXDNPkY4kJCvKux2xdD\\nOnVF6N7dL3nTYZg+"
48 "uQrNsMTz9UxVAgMBAAECgYEAzbLewe1xe9vy+2GoSsfib+28\\nDZgSE6Bu/"
49 "zuFoPrRc6qL9p2SsnV7txrunTyJkkOnPLND9ABAXybRTlcVKP/sGgza\\n/"
50 "8HpCqFYM9V8f34SBWfD4fRFT+n/"
51 "73cfRUtGXdXpseva2lh8RilIQfPhNZAncenU\\ngqXjDvpkypEusgXAykECQQD+";
53 "53XxNVnxBHsYb+AYEfklR96yVi8HywjVHP34+OQZ\\nCslxoHQM8s+"
54 "dBnjfScLu22JqkPv04xyxmt0QAKm9+vTdAkEA4ib7YvEAn2jXzcCI\\nEkoy2L/"
55 "XydR1GCHoacdfdAwiL2npOdnbvi4ZmdYRPY1LSTO058tQHKVXV7NLeCa3\\nAARh2QJBAMKeDA"
57 "W303SQv2cZTdbeaLKJbB5drz3eo3j7dDKjrTD9JupixFbzcGw\\n8FZi5c8idxiwC36kbAL6Hz"
59 "ZoX+ofI0CQE6KCzPJTtYNqyShgKAZdJ8hwOcvCZtf\\n6z8RJm0+"
60 "6YBd38lfh5j8mZd7aHFf6I17j5AQY7oPEc47TjJj/"
61 "5nZ68ECQQDvYuI3\\nLyK5fS8g0SYbmPOL9TlcHDOqwG0mrX9qpg5DC2fniXNSrrZ64GTDKdzZ"
63 "Ap6LI9W\\nIqv4vr6y38N79TTC\\n-----END PRIVATE KEY-----\\n\", ";
65 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
67 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
68 "com\", \"client_id\": "
69 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
70 "com\", \"type\": \"service_account\" }";
74 "{ \"client_id\": \"32555999999.apps.googleusercontent.com\","
75 " \"client_secret\": \"EmssLNjJy1332hD4KFsecret\","
76 " \"refresh_token\": \"1/Blahblasj424jladJDSGNf-u4Sua3HDA2ngjd42\","
77 " \"type\": \"authorized_user\"}";
94 strcpy(current, part3);
104 strcmp(json_key.
type,
"service_account") == 0);
107 "e6b5137873db8d2ef81e06a47289e6434ec8a165") == 0);
110 "777-abaslkan11hlb6nmim3bpspl31ud.apps."
111 "googleusercontent.com") == 0);
114 "777-abaslkan11hlb6nmim3bpspl31ud@developer."
115 "gserviceaccount.com") == 0);
122 const char non_closing_part3[] =
123 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
125 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
126 "com\", \"client_id\": "
127 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
128 "com\", \"type\": \"service_account\" ";
138 const char no_type_part3[] =
139 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
141 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
142 "com\", \"client_id\": "
143 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
154 const char no_client_id_part3[] =
155 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
157 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
159 "\"type\": \"service_account\" }";
169 const char no_client_email_part3[] =
170 "\"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
172 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
173 "com\", \"type\": \"service_account\" }";
183 const char no_private_key_id_part3[] =
185 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
186 "com\", \"client_id\": "
187 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
188 "com\", \"type\": \"service_account\" }";
198 const char no_private_key_json_string[] =
199 "{ \"private_key_id\": \"e6b5137873db8d2ef81e06a47289e6434ec8a165\", "
201 "\"777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount."
202 "com\", \"client_id\": "
203 "\"777-abaslkan11hlb6nmim3bpspl31ud.apps.googleusercontent."
204 "com\", \"type\": \"service_account\" }";
232 Json::Object
object =
header.object_value();
236 value =
object[
"typ"];
239 value =
object[
"kid"];
242 "e6b5137873db8d2ef81e06a47289e6434ec8a165") == 0);
246 const char* expected_scope) {
252 "777-abaslkan11hlb6nmim3bpspl31ud@developer.gserviceaccount.com");
254 if (expected_scope !=
nullptr) {
256 value =
object[
"scope"];
262 value =
object[
"sub"];
267 value =
object[
"aud"];
272 value =
object[
"exp"];
274 expiration.
tv_sec = strtol(
value.string_value().c_str(),
nullptr, 10);
277 value =
object[
"iat"];
279 issue_time.
tv_sec = strtol(
value.string_value().c_str(),
nullptr, 10);
286 const char* signed_data,
287 size_t signed_data_size) {
334 void (*check_jwt_claim_func)(
const Json&)) {
338 const char* b64_signature;
340 char* jwt = jwt_encode_and_sign_func(&json_key);
341 const char* dot = strchr(jwt,
'.');
347 offset =
static_cast<size_t>(dot - jwt) + 1;
349 dot = strchr(jwt +
offset,
'.');
352 jwt +
offset,
static_cast<size_t>(dot - (jwt +
offset)));
354 check_jwt_claim_func(parsed_claim);
355 offset =
static_cast<size_t>(dot - jwt) + 1;
357 dot = strchr(jwt +
offset,
'.');
359 b64_signature = jwt +
offset;
382 (strcmp(refresh_token.
type,
"authorized_user") == 0));
385 "32555999999.apps.googleusercontent.com") == 0));
388 (strcmp(refresh_token.
client_secret,
"EmssLNjJy1332hD4KFsecret") == 0));
391 "1/Blahblasj424jladJDSGNf-u4Sua3HDA2ngjd42") == 0));
396 const char refresh_token_str[] =
397 "{ \"client_id\": \"32555999999.apps.googleusercontent.com\","
398 " \"client_secret\": \"EmssLNjJy1332hD4KFsecret\","
399 " \"refresh_token\": \"1/Blahblasj424jladJDSGNf-u4Sua3HDA2ngjd42\"}";
406 const char refresh_token_str[] =
407 "{ \"client_secret\": \"EmssLNjJy1332hD4KFsecret\","
408 " \"refresh_token\": \"1/Blahblasj424jladJDSGNf-u4Sua3HDA2ngjd42\","
409 " \"type\": \"authorized_user\"}";
416 const char refresh_token_str[] =
417 "{ \"client_id\": \"32555999999.apps.googleusercontent.com\","
418 " \"refresh_token\": \"1/Blahblasj424jladJDSGNf-u4Sua3HDA2ngjd42\","
419 " \"type\": \"authorized_user\"}";
426 const char refresh_token_str[] =
427 "{ \"client_id\": \"32555999999.apps.googleusercontent.com\","
428 " \"client_secret\": \"EmssLNjJy1332hD4KFsecret\","
429 " \"type\": \"authorized_user\"}";
435 int main(
int argc,
char** argv) {
static void test_parse_json_key_failure_bad_json(void)
GPRAPI void grpc_slice_unref(grpc_slice s)
static const char test_scope[]
static char * service_account_creds_jwt_encode_and_sign(const grpc_auth_json_key *key)
#define EVP_DigestVerifyInit
static void test_parse_json_key_failure_no_client_id(void)
static void ** find(grpc_chttp2_stream_map *map, uint32_t key)
static Json parse_json_part_from_jwt(const char *str, size_t len)
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
int main(int argc, char **argv)
absl::string_view StringViewFromSlice(const grpc_slice &slice)
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)
const Object & object_value() const
static void test_service_account_creds_jwt_encode_and_sign(void)
GPRAPI void * gpr_malloc(size_t size)
#define EVP_DigestVerifyUpdate
static void check_jwt_signature(const char *b64_signature, RSA *rsa_key, const char *signed_data, size_t signed_data_size)
void grpc_auth_json_key_destruct(grpc_auth_json_key *json_key)
const OPENSSL_EXPORT EVP_MD * EVP_sha256(void)
static void check_jwt_header(const Json &header)
void grpc_auth_refresh_token_destruct(grpc_auth_refresh_token *refresh_token)
Destructs the object.
grpc_auth_json_key grpc_auth_json_key_create_from_string(const char *json_string)
static void check_jwt_claim(const Json &claim, const char *expected_audience, const char *expected_scope)
int grpc_auth_json_key_is_valid(const grpc_auth_json_key *json_key)
static void test_parse_refresh_token_failure_no_client_id(void)
def c_str(s, encoding='ascii')
static char * test_json_key_str(const char *bad_part3)
JSON (JavaScript Object Notation).
static void test_parse_json_key_failure_no_client_email(void)
#define GRPC_SLICE_IS_EMPTY(slice)
GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b)
grpc_slice grpc_base64_decode(const char *b64, int url_safe)
GRPCAPI gpr_timespec grpc_max_auth_token_lifetime(void)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_auth_refresh_token grpc_auth_refresh_token_create_from_string(const char *json_string)
static void test_parse_json_key_failure_no_private_key(void)
struct absl::base_internal::@2940::AllocList::Header header
#define GRPC_SLICE_START_PTR(slice)
static void test_parse_refresh_token_failure_no_type(void)
bool Parse(FlagOpFn op, absl::string_view text, void *dst, std::string *error)
static void test_parse_refresh_token_failure_no_refresh_token(void)
static const char test_json_key_str_part1[]
#define GRPC_SLICE_LENGTH(slice)
static void test_jwt_creds_jwt_encode_and_sign(void)
static const char test_json_key_str_part2[]
#define EVP_PKEY_set1_RSA
#define EVP_MD_CTX_destroy
static const char test_service_url[]
static void test_parse_json_key_failure_no_type(void)
grpc_core::ExecCtx exec_ctx
std::string grpc_error_std_string(grpc_error_handle error)
static void test_parse_refresh_token_success(void)
static const char test_refresh_token_str[]
#define GRPC_ERROR_UNREF(err)
static const char expected_audience[]
static void test_parse_json_key_success(void)
static void jwt_creds_check_jwt_claim(const Json &claim)
static void test_jwt_encode_and_sign(char *(*jwt_encode_and_sign_func)(const grpc_auth_json_key *), void(*check_jwt_claim_func)(const Json &))
static void service_account_creds_check_jwt_claim(const Json &claim)
static char * jwt_creds_jwt_encode_and_sign(const grpc_auth_json_key *key)
static void test_parse_refresh_token_failure_no_client_secret(void)
#define GRPC_JWT_OAUTH2_AUDIENCE
GRPCAPI void grpc_init(void)
#define EVP_DigestVerifyFinal
#define EVP_MD_CTX_create
static void test_parse_json_key_failure_no_private_key_id(void)
GRPCAPI void grpc_shutdown(void)
int grpc_auth_refresh_token_is_valid(const grpc_auth_refresh_token *refresh_token)
Returns 1 if the object is valid, 0 otherwise.
void grpc_slice_unref_internal(const grpc_slice &slice)
static const char test_json_key_str_part3[]
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:25