google: make JWTConfigFromJSON set TokenURL from the JSON's token_uri
Fixes golang/oauth2#199.
Change-Id: I534def935c7143e4276b5d880127b0af35409f9a
Reviewed-on: https://go-review.googlesource.com/28411
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/google/google.go b/google/google.go
index 82399b0..a48d5bf 100644
--- a/google/google.go
+++ b/google/google.go
@@ -89,6 +89,7 @@
Email string `json:"client_email"`
PrivateKey string `json:"private_key"`
PrivateKeyID string `json:"private_key_id"`
+ TokenURL string `json:"token_uri"`
}
if err := json.Unmarshal(jsonKey, &key); err != nil {
return nil, err
@@ -98,7 +99,10 @@
PrivateKey: []byte(key.PrivateKey),
PrivateKeyID: key.PrivateKeyID,
Scopes: scope,
- TokenURL: JWTTokenURL,
+ TokenURL: key.TokenURL,
+ }
+ if config.TokenURL == "" {
+ config.TokenURL = JWTTokenURL
}
return config, nil
}
diff --git a/google/google_test.go b/google/google_test.go
index 3046b05..287c699 100644
--- a/google/google_test.go
+++ b/google/google_test.go
@@ -36,6 +36,15 @@
"private_key": "super secret key",
"client_email": "gopher@developer.gserviceaccount.com",
"client_id": "gopher.apps.googleusercontent.com",
+ "token_uri": "https://accounts.google.com/o/gophers/token",
+ "type": "service_account"
+}`)
+
+var jwtJSONKeyNoTokenURL = []byte(`{
+ "private_key_id": "268f54e43a1af97cfc71731688434f45aca15c8b",
+ "private_key": "super secret key",
+ "client_email": "gopher@developer.gserviceaccount.com",
+ "client_id": "gopher.apps.googleusercontent.com",
"type": "service_account"
}`)
@@ -91,6 +100,16 @@
if got, want := strings.Join(conf.Scopes, ","), "scope1,scope2"; got != want {
t.Errorf("Scopes = %q; want %q", got, want)
}
+ if got, want := conf.TokenURL, "https://accounts.google.com/o/gophers/token"; got != want {
+ t.Errorf("TokenURL = %q; want %q", got, want)
+ }
+}
+
+func TestJWTConfigFromJSONNoTokenURL(t *testing.T) {
+ conf, err := JWTConfigFromJSON(jwtJSONKeyNoTokenURL, "scope1", "scope2")
+ if err != nil {
+ t.Fatal(err)
+ }
if got, want := conf.TokenURL, "https://accounts.google.com/o/oauth2/token"; got != want {
t.Errorf("TokenURL = %q; want %q", got, want)
}