git.iko.soy/typeable/oauth2-proxy
on master help sign in
Add id_token refresh to Google provider (#83)
commiteacba4ec7da203a6f19d5f7f118c7dbf961249dd authorGabor Lekeny <gabor.lekeny@gmail.com> dateTue 5 Mar 2019, 15:07 (8 years ago) parent8816a2a
2 files changed+7−3
CHANGELOG.md+1 providers/google.go+6−3
CHANGELOG.md+1
@@ -4,6 +4,7 @@
44
55- [#68](https://github.com/pusher/oauth2_proxy/pull/68) forward X-Auth-Access-Token header (@davidholsgrove)
66- [#41](https://github.com/pusher/oauth2_proxy/pull/41) Added option to manually specify OIDC endpoints instead of relying on discovery
7+- [#83](https://github.com/pusher/oauth2_proxy/pull/83) Add `id_token` refresh to Google provider (@leki75)
78
89# v3.1.0
910
providers/google.go+6−3
@@ -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}