Support using ID token as the ouath access token.

This commit is contained in:
Wenlei (Frank) He
2019-03-08 09:20:43 -08:00
parent 8baca543ee
commit 339f3641d9

View File

@@ -66,9 +66,12 @@ type Config struct {
// request. If empty, the value of TokenURL is used as the // request. If empty, the value of TokenURL is used as the
// intended audience. // intended audience.
Audience string Audience string
// PrivateClaims optionally specifies private claims in the JWT. // PrivateClaims optionally specifies private claims in the JWT.
PrivateClaims map[string]interface{} PrivateClaims map[string]interface{}
// UseIDToken optionally uses ID token instead of access token.
UseIDToken bool
} }
// TokenSource returns a JWT TokenSource using the configuration // TokenSource returns a JWT TokenSource using the configuration
@@ -100,10 +103,10 @@ func (js jwtSource) Token() (*oauth2.Token, error) {
} }
hc := oauth2.NewClient(js.ctx, nil) hc := oauth2.NewClient(js.ctx, nil)
claimSet := &jws.ClaimSet{ claimSet := &jws.ClaimSet{
Iss: js.conf.Email, Iss: js.conf.Email,
Scope: strings.Join(js.conf.Scopes, " "), Scope: strings.Join(js.conf.Scopes, " "),
Aud: js.conf.TokenURL, Aud: js.conf.TokenURL,
PrivateClaims: js.conf.PrivateClaims, PrivateClaims: js.conf.PrivateClaims,
} }
if subject := js.conf.Subject; subject != "" { if subject := js.conf.Subject; subject != "" {
claimSet.Sub = subject claimSet.Sub = subject
@@ -168,6 +171,9 @@ func (js jwtSource) Token() (*oauth2.Token, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("oauth2: error decoding JWT token: %v", err) return nil, fmt.Errorf("oauth2: error decoding JWT token: %v", err)
} }
if js.conf.UseIDToken {
token.AccessToken = tokenRes.IDToken
}
token.Expiry = time.Unix(claimSet.Exp, 0) token.Expiry = time.Unix(claimSet.Exp, 0)
} }
return token, nil return token, nil