@@ -16,7 +16,7 @@ import (
17 "golang.org/x/oauth2"
17 "golang.org/x/oauth2"
18 "golang.org/x/oauth2/google"
18 "golang.org/x/oauth2/google"
19− "google.golang.org/api/admin/directory/v1"
19+ admin "google.golang.org/api/admin/directory/v1"
20 "google.golang.org/api/googleapi"
20 "google.golang.org/api/googleapi"
@@ -260,7 +260,7 @@ func (p *GoogleProvider) RefreshSessionIfNeeded(s *SessionState) (bool, error) {
260 return false, nil
260 return false, nil
263− newToken, duration, err := p.redeemRefreshToken(s.RefreshToken)
263+ newToken, newIDToken, duration, err := p.redeemRefreshToken(s.RefreshToken)
264 if err != nil {
264 if err != nil {
265 return false, err
265 return false, err
@@ -272,12 +272,13 @@ func (p *GoogleProvider) RefreshSessionIfNeeded(s *SessionState) (bool, error) {
273 origExpiration := s.ExpiresOn
273 origExpiration := s.ExpiresOn
274 s.AccessToken = newToken
274 s.AccessToken = newToken
275+ s.IDToken = newIDToken
275 s.ExpiresOn = time.Now().Add(duration).Truncate(time.Second)
276 s.ExpiresOn = time.Now().Add(duration).Truncate(time.Second)
276 log.Printf("refreshed access token %s (expired on %s)", s, origExpiration)
277 log.Printf("refreshed access token %s (expired on %s)", s, origExpiration)
277 return true, nil
278 return true, nil
280−func (p *GoogleProvider) redeemRefreshToken(refreshToken string) (token string, expires time.Duration, err error) {
281+func (p *GoogleProvider) redeemRefreshToken(refreshToken string) (token string, idToken string, expires time.Duration, err error) {
281 // https://developers.google.com/identity/protocols/OAuth2WebServer#refresh
282 // https://developers.google.com/identity/protocols/OAuth2WebServer#refresh
282 params := url.Values{}
283 params := url.Values{}
283 params.Add("client_id", p.ClientID)
284 params.Add("client_id", p.ClientID)
@@ -310,12 +311,14 @@ func (p *GoogleProvider) redeemRefreshToken(refreshToken string) (token string,
310 var data struct {
311 var data struct {
311 AccessToken string `json:"access_token"`
312 AccessToken string `json:"access_token"`
312 ExpiresIn int64 `json:"expires_in"`
313 ExpiresIn int64 `json:"expires_in"`
314+ IDToken string `json:"id_token"`
314 err = json.Unmarshal(body, &data)
316 err = json.Unmarshal(body, &data)
315 if err != nil {
317 if err != nil {
318 token = data.AccessToken
320 token = data.AccessToken
321+ idToken = data.IDToken
319 expires = time.Duration(data.ExpiresIn) * time.Second
322 expires = time.Duration(data.ExpiresIn) * time.Second