blob: bf50bc0b5c2aa6f66f3c4cae76d5a54d6cb86fbc [file] [log] [blame]
// Copyright 2016 The Goma Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "jwt.h"
#include <string>
#include <gtest/gtest.h>
namespace devtools_goma {
TEST(JsonWebTokenTest, CreateClaimSetJson) {
JsonWebToken::ClaimSet cs;
cs.iss = "test@developer.gserviceaccount.com";
cs.scopes.push_back("https://www.googleapis.com/auth/userinfo.email");
const auto timestamp = absl::FromTimeT(1459931576);
EXPECT_EQ("{\"iss\":\"test@developer.gserviceaccount.com\""
",\"scope\":\"https://www.googleapis.com/auth/userinfo.email\""
",\"aud\":\"https://www.googleapis.com/oauth2/v4/token\""
",\"exp\":1459935176"
",\"iat\":1459931576"
"}", JsonWebToken::CreateClaimSetJson(cs, timestamp));
}
TEST(JsonWebTokenTest, CreateTokenBaseString) {
EXPECT_EQ("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9."
"eyJpc3MiOiJ0ZXN0QGRldmVsb3Blci5nc2VydmljZWFjY291bn"
"QuY29tIiwic2NvcGUiOiJodHRwczovL3d3dy5nb29nbGVhcGlz"
"LmNvbS9hdXRoL3VzZXJpbmZvLmVtYWlsIiwiYXVkIjoiaHR0cH"
"M6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3Y0L3Rva2Vu"
"IiwiZXhwIjoxNDU5OTM1MTc2LCJpYXQiOjE0NTk5MzE1NzZ9",
JsonWebToken::CreateTokenBaseString(
JsonWebToken::CreateHeaderJson(),
"{\"iss\":\"test@developer.gserviceaccount.com\""
",\"scope\":\"https://www.googleapis.com/auth/userinfo.email\""
",\"aud\":\"https://www.googleapis.com/oauth2/v4/token\""
",\"exp\":1459935176"
",\"iat\":1459931576"
"}"));
}
TEST(JsonWebTokenTest, TokenWithTimestamp) {
const char* kPemKey = "-----BEGIN PRIVATE KEY-----\n"
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJ2ljEsJpoZmrZ\n"
"AHTcs5HiFg9PkXUQJF4aK8jVacBl6C2U0YJGwnCCPYQHyju0++eZRWlAqds4Jn5O\n"
"8JclnLs5JFD6Qzlqosqwn4qu8QI7dy4PybjwxRZMQtWm5vY6gHmvID4WEvWjxjL2\n"
"mqVOdThYy2YV/3PsCyjf6Z2XYtAZZJoK94w4OpF30IF1wuEZHllh6VJ4wpRiqpT8\n"
"bHxSiMlH2CTaoKJowrgAoYENj5eSbnPP0dsSftdA3Ckeu5/A4OjhyrOCsjwZag6J\n"
"Ipw5oRRDm9iiRt7dHdtrjEkGsiaFZvqY4sW++8x8MGkPpO+Mc1IvJVjj7khOTHEH\n"
"mWORcjbTAgMBAAECggEAHmP0jeghIkLx60UefklYL++NEI2QsS5TUJG2hNX7hHvb\n"
"EKPfhJn5E71cDhuXbh7av/99ZLQNkCNsVRrVN4WGAOLwtzt6vPeGl8mUWVzokROF\n"
"JBXkn6/TapyRXWotflg0e1cwWM11OdXIBnWxW8qb0XeF2fOnKrKLIFHwXB98oRwn\n"
"G6jg3A3F+//PCvTNk+oTJUyNVIrF6MsLN2/a9CJwfQA4bDShnPlQj8ToXRf1mEqv\n"
"6i6NqgkXZX9q3jqU3/h66shUGR/ltc7aqsocHt1PJN0SCKPqxSJoGaZl/T7fCgVl\n"
"yvGoLrsyfX4WIW0BgICcfyyLwK5h48Gv1nq2kHiiAQKBgQDx6IYXbT4LhmHfJJ9d\n"
"3r6sxvBZ4h+0/HYVK/4rG4dvjSF/vVZvhXwKRbNybdRZoZiDp5QZBSN7TkPE8q97\n"
"8IQ91MggUqGSroVpU/PmGHIdUXMiU9qfq0F+KAXc5lNAunF4vqybWu16U4RFtpRq\n"
"joZKanb0Z0ChivQcI0YVDWNKcQKBgQCR4hbMTo3sHP0J4xKiisCBhkhN5wGo53bE\n"
"YIk1E+XE5u1Dp2gBPzhDilrG3PYphjwi0TvrAeWueJHdRJ2FJpe6BLsnJhJiKHkw\n"
"zVZHZ+Qn8+1WqnRobODzBXceqqHejDoeDfXBfTo94F6ttEu4EOIG6+1rVxOqaSD8\n"
"S52izO6PgwKBgDk4dS9pabm0KcZslT3RCG06CXRZZoKbDRto8pAjzN94FKpwkNeE\n"
"TZjob8/rZsVk0fyiUQeyDXiHRMR7W0MH21/8yvHKWemmWmxVrWWJ9sQ0lfVSvG30\n"
"RmOe9/QOjzbKYzjacV22HmJHCwyqaWTjHaTQlh6tpb4QbjmRpmwoZIohAoGAcos1\n"
"H2ImqVfxjsvOm/WaRZksOI7DjN2BMZwi35wp8zrm3RIa5a+/+7gsoqxoVB5kJWpo\n"
"Q5QPxbhBv5zameu9gn+oe4q3MH9a+OihcBuw13X9yui30i57ShXmfBu6UUWFdIe9\n"
"iRlMm70KWhWQxovrDUg9+OQ8OrelALRWp7eFMQUCgYEA4fz76VwkMrA8XzY326l5\n"
"36qU9oo4AVGN3Xtzh90C3cMYP3IpPTCdfxHvmyte2qC3uYb5EUtB15bX4UXR70bp\n"
"FypWqG6mgZ7Mdoh+PvInHDEuf8JdvwbhXlnhzHnfWi7+HjzWUUpS8Il0QuuIbE6q\n"
"pDh/d+sLfYP3TWpGOQ1yv6k=\n"
"-----END PRIVATE KEY-----\n";
std::unique_ptr<JsonWebToken::Key> key(JsonWebToken::Key::Load(kPemKey));
ASSERT_TRUE(key.get() != nullptr) << "LoadKey failed";
JsonWebToken::ClaimSet cs;
cs.iss = "test@developer.gserviceaccount.com";
cs.scopes.push_back("https://www.googleapis.com/auth/userinfo.email");
JsonWebToken jwt(cs);
const auto timestamp = absl::FromTimeT(1459931576);
// signature generated by
// echo '<plain token>' | openssl dgst -sha256 -sign <pem_key> |
// base64 -w 0 | base64 -w 0 | tr '+/=' '-_'
EXPECT_EQ("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9."
"eyJpc3MiOiJ0ZXN0QGRldmVsb3Blci5nc2VydmljZWFjY291bn"
"QuY29tIiwic2NvcGUiOiJodHRwczovL3d3dy5nb29nbGVhcGlz"
"LmNvbS9hdXRoL3VzZXJpbmZvLmVtYWlsIiwiYXVkIjoiaHR0cH"
"M6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3Y0L3Rva2Vu"
"IiwiZXhwIjoxNDU5OTM1MTc2LCJpYXQiOjE0NTk5MzE1NzZ9.Q"
"eIk0WMVjF7_e2LrgFwGyHIDXOt6TA3ErjXEkMCNna8AALdm4Jn"
"b-fLyWEqig8u2eDhriDf8-SBHFPMAqjPtqlgiOPhkfno3g2y8G"
"W8lC2VEHMLzkOBsEQx9bp4j6NinpyfX7nuiItaPG42IPJ6ElaI"
"FdtNO8z6jZ3hDqmyklrpX6AhBDBr0DSpunHQSPIcsGEh_IveaG"
"-s-hj36rdYpj2qMz8ikc2zydC-h8eW6DJcKtHAEGG0AGMkykC9"
"SRhrqZzcHARgI-GcZC33LnXNHyjF8ChUz9DTCzhwnmqAUm6ldZ"
"8AWVd9AyXdwJA5_ApTJHFFDOhaah7PENLfGHCgZzw",
jwt.TokenWithTimestamp(*key, timestamp));
}
} // namespace devtools_goma