@@ -142,16 +142,13 @@ func (p *AzureProvider) Redeem(ctx context.Context, redirectURL, code string) (*
142142 return nil, err
143143 }
144144
145− created := time.Now()
146− expires := time.Unix(jsonResponse.ExpiresOn, 0)
147−
148145 session := &sessions.SessionState{
149146 AccessToken: jsonResponse.AccessToken,
150147 IDToken: jsonResponse.IDToken,
151− CreatedAt: &created,
152− ExpiresOn: &expires,
153148 RefreshToken: jsonResponse.RefreshToken,
154149 }
150+ session.CreatedAtNow()
151+ session.SetExpiresOn(time.Unix(jsonResponse.ExpiresOn, 0))
155152
156153 email, err := p.verifyTokenAndExtractEmail(ctx, session.IDToken)
157154
@@ -239,10 +236,9 @@ func (p *AzureProvider) verifyTokenAndExtractEmail(ctx context.Context, token st
239236 return email, nil
240237}
241238
242−// RefreshSessionIfNeeded checks if the session has expired and uses the
243−// RefreshToken to fetch a new ID token if required
244−func (p *AzureProvider) RefreshSessionIfNeeded(ctx context.Context, s *sessions.SessionState) (bool, error) {
245− if s == nil || s.ExpiresOn.After(time.Now()) || s.RefreshToken == "" {
239+// RefreshSession uses the RefreshToken to fetch new Access and ID Tokens
240+func (p *AzureProvider) RefreshSession(ctx context.Context, s *sessions.SessionState) (bool, error) {
241+ if s == nil || s.RefreshToken == "" {
246242 return false, nil
247243 }
248244
@@ -257,7 +253,7 @@ func (p *AzureProvider) RefreshSessionIfNeeded(ctx context.Context, s *sessions.
257253 return true, nil
258254}
259255
260−func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.SessionState) (err error) {
256+func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.SessionState) error {
261257 params := url.Values{}
262258 params.Add("client_id", p.ClientID)
263259 params.Add("client_secret", p.ClientSecret)
@@ -271,25 +267,23 @@ func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.Sess
271267 IDToken string `json:"id_token"`
272268 }
273269
274− err = requests.New(p.RedeemURL.String()).
270+ err := requests.New(p.RedeemURL.String()).
275271 WithContext(ctx).
276272 WithMethod("POST").
277273 WithBody(bytes.NewBufferString(params.Encode())).
278274 SetHeader("Content-Type", "application/x-www-form-urlencoded").
279275 Do().
280276 UnmarshalInto(&jsonResponse)
281−
282277 if err != nil {
283− return
278+ return err
284279 }
285280
286− now := time.Now()
287− expires := time.Unix(jsonResponse.ExpiresOn, 0)
288281 s.AccessToken = jsonResponse.AccessToken
289282 s.IDToken = jsonResponse.IDToken
290283 s.RefreshToken = jsonResponse.RefreshToken
291− s.CreatedAt = &now
292− s.ExpiresOn = &expires
284+
285+ s.CreatedAtNow()
286+ s.SetExpiresOn(time.Unix(jsonResponse.ExpiresOn, 0))
293287
294288 email, err := p.verifyTokenAndExtractEmail(ctx, s.IDToken)
295289
@@ -312,7 +306,7 @@ func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.Sess
312306 }
313307 }
314308
315− return
309+ return nil
316310}
317311
318312func makeAzureHeader(accessToken string) http.Header {