@@ -16,7 +16,7 @@ import (
1616
1717 "golang.org/x/oauth2"
1818 "golang.org/x/oauth2/google"
19− "google.golang.org/api/admin/directory/v1"
19+ admin "google.golang.org/api/admin/directory/v1"
2020 "google.golang.org/api/googleapi"
2121)
2222
@@ -260,7 +260,7 @@ func (p *GoogleProvider) RefreshSessionIfNeeded(s *SessionState) (bool, error) {
260260 return false, nil
261261 }
262262
263− newToken, duration, err := p.redeemRefreshToken(s.RefreshToken)
263+ newToken, newIDToken, duration, err := p.redeemRefreshToken(s.RefreshToken)
264264 if err != nil {
265265 return false, err
266266 }
@@ -272,12 +272,13 @@ func (p *GoogleProvider) RefreshSessionIfNeeded(s *SessionState) (bool, error) {
272272
273273 origExpiration := s.ExpiresOn
274274 s.AccessToken = newToken
275+ s.IDToken = newIDToken
275276 s.ExpiresOn = time.Now().Add(duration).Truncate(time.Second)
276277 log.Printf("refreshed access token %s (expired on %s)", s, origExpiration)
277278 return true, nil
278279}
279280
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) {
281282 // https://developers.google.com/identity/protocols/OAuth2WebServer#refresh
282283 params := url.Values{}
283284 params.Add("client_id", p.ClientID)
@@ -310,12 +311,14 @@ func (p *GoogleProvider) redeemRefreshToken(refreshToken string) (token string,
310311 var data struct {
311312 AccessToken string `json:"access_token"`
312313 ExpiresIn int64 `json:"expires_in"`
314+ IDToken string `json:"id_token"`
313315 }
314316 err = json.Unmarshal(body, &data)
315317 if err != nil {
316318 return
317319 }
318320 token = data.AccessToken
321+ idToken = data.IDToken
319322 expires = time.Duration(data.ExpiresIn) * time.Second
320323 return
321324}