forked from remote/oauth2
Support using ID token as the ouath access token.
This commit is contained in:
16
jwt/jwt.go
16
jwt/jwt.go
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user