@@ -142,16 +142,13 @@ func (p *AzureProvider) Redeem(ctx context.Context, redirectURL, code string) (*
142 return nil, err
142 return nil, err
145− created := time.Now()
146− expires := time.Unix(jsonResponse.ExpiresOn, 0)
148 session := &sessions.SessionState{
145 session := &sessions.SessionState{
149 AccessToken: jsonResponse.AccessToken,
146 AccessToken: jsonResponse.AccessToken,
150 IDToken: jsonResponse.IDToken,
147 IDToken: jsonResponse.IDToken,
151− CreatedAt: &created,
152− ExpiresOn: &expires,
153 RefreshToken: jsonResponse.RefreshToken,
148 RefreshToken: jsonResponse.RefreshToken,
150+ session.CreatedAtNow()
151+ session.SetExpiresOn(time.Unix(jsonResponse.ExpiresOn, 0))
156 email, err := p.verifyTokenAndExtractEmail(ctx, session.IDToken)
153 email, err := p.verifyTokenAndExtractEmail(ctx, session.IDToken)
@@ -239,10 +236,9 @@ func (p *AzureProvider) verifyTokenAndExtractEmail(ctx context.Context, token st
239 return email, nil
236 return email, nil
242−// RefreshSessionIfNeeded checks if the session has expired and uses the
243−// RefreshToken to fetch a new ID token if required
239+// RefreshSession uses the RefreshToken to fetch new Access and ID Tokens
244−func (p *AzureProvider) RefreshSessionIfNeeded(ctx context.Context, s *sessions.SessionState) (bool, error) {
240+func (p *AzureProvider) RefreshSession(ctx context.Context, s *sessions.SessionState) (bool, error) {
245− if s == nil || s.ExpiresOn.After(time.Now()) || s.RefreshToken == "" {
241+ if s == nil || s.RefreshToken == "" {
246 return false, nil
242 return false, nil
@@ -257,7 +253,7 @@ func (p *AzureProvider) RefreshSessionIfNeeded(ctx context.Context, s *sessions.
257 return true, nil
253 return true, nil
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 {
261 params := url.Values{}
257 params := url.Values{}
262 params.Add("client_id", p.ClientID)
258 params.Add("client_id", p.ClientID)
263 params.Add("client_secret", p.ClientSecret)
259 params.Add("client_secret", p.ClientSecret)
@@ -271,25 +267,23 @@ func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.Sess
271 IDToken string `json:"id_token"`
267 IDToken string `json:"id_token"`
274− err = requests.New(p.RedeemURL.String()).
270+ err := requests.New(p.RedeemURL.String()).
275 WithContext(ctx).
271 WithContext(ctx).
276 WithMethod("POST").
272 WithMethod("POST").
277 WithBody(bytes.NewBufferString(params.Encode())).
273 WithBody(bytes.NewBufferString(params.Encode())).
278 SetHeader("Content-Type", "application/x-www-form-urlencoded").
274 SetHeader("Content-Type", "application/x-www-form-urlencoded").
280 UnmarshalInto(&jsonResponse)
276 UnmarshalInto(&jsonResponse)
282 if err != nil {
277 if err != nil {
283− return
278+ return err
287− expires := time.Unix(jsonResponse.ExpiresOn, 0)
288 s.AccessToken = jsonResponse.AccessToken
281 s.AccessToken = jsonResponse.AccessToken
289 s.IDToken = jsonResponse.IDToken
282 s.IDToken = jsonResponse.IDToken
290 s.RefreshToken = jsonResponse.RefreshToken
283 s.RefreshToken = jsonResponse.RefreshToken
291− s.CreatedAt = &now
284+
292− s.ExpiresOn = &expires
285+ s.CreatedAtNow()
286+ s.SetExpiresOn(time.Unix(jsonResponse.ExpiresOn, 0))
294 email, err := p.verifyTokenAndExtractEmail(ctx, s.IDToken)
288 email, err := p.verifyTokenAndExtractEmail(ctx, s.IDToken)
@@ -312,7 +306,7 @@ func (p *AzureProvider) redeemRefreshToken(ctx context.Context, s *sessions.Sess
315− return
309+ return nil
318func makeAzureHeader(accessToken string) http.Header {
312func makeAzureHeader(accessToken string) http.Header {