| // 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 |