File tree Expand file tree Collapse file tree 3 files changed +42
-3
lines changed Expand file tree Collapse file tree 3 files changed +42
-3
lines changed Original file line number Diff line number Diff line change 1
1
package entraid
2
2
3
+ import "time"
4
+
3
5
const (
4
6
DefaultExpirationRefreshRatio = 0.7
5
7
DefaultRetryOptionsMaxAttempts = 3
6
8
DefaultRetryOptionsInitialDelayMs = 1000
7
9
DefaultRetryOptionsBackoffMultiplier = 2.0
8
10
DefaultRetryOptionsMaxDelayMs = 10000
9
- MinTokenTTL = 60 * 1000 // 1 minute
11
+ MinTokenTTL = 5 * time . Minute
10
12
)
Original file line number Diff line number Diff line change @@ -90,8 +90,8 @@ var defaultIdentityProviderResponseParser IdentityProviderResponseParserFunc = f
90
90
switch response .Type () {
91
91
case ResponseTypeAuthResult :
92
92
authResult := response .AuthResult ()
93
- if authResult .ExpiresOn .Before ( time . Now () ) {
94
- return nil , fmt .Errorf ("auth result expired or invalid" )
93
+ if authResult .ExpiresOn .IsZero ( ) {
94
+ return nil , fmt .Errorf ("auth result invalid" )
95
95
}
96
96
rawToken = authResult .IDToken .RawToken
97
97
username = authResult .IDToken .Oid
@@ -130,12 +130,16 @@ var defaultIdentityProviderResponseParser IdentityProviderResponseParserFunc = f
130
130
return nil , fmt .Errorf ("unknown response type: %s" , response .Type ())
131
131
}
132
132
133
+ expiresOn = expiresOn .UTC ()
134
+
133
135
if expiresOn .IsZero () {
134
136
return nil , fmt .Errorf ("expires on is zero" )
135
137
}
138
+
136
139
if expiresOn .Before (time .Now ()) {
137
140
return nil , fmt .Errorf ("expires on is in the past" )
138
141
}
142
+
139
143
if time .Until (expiresOn ) < MinTokenTTL {
140
144
return nil , fmt .Errorf ("expires on is less than minimum token TTL which is %d" , MinTokenTTL )
141
145
}
Original file line number Diff line number Diff line change @@ -459,4 +459,37 @@ func TestDefaultIdentityProviderResponseParser(t *testing.T) {
459
459
assert .Error (t , err )
460
460
assert .Nil (t , token )
461
461
})
462
+ t .Run ("Default IdentityProviderResponseParser with expired token" , func (t * testing.T ) {
463
+ authResult := & public.AuthResult {
464
+ ExpiresOn : time .Now ().Add (- time .Hour ).UTC (),
465
+ }
466
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
467
+ authResult )
468
+ assert .NoError (t , err )
469
+ token , err := defaultIdentityProviderResponseParser (idpResponse )
470
+ assert .Error (t , err )
471
+ assert .Nil (t , token )
472
+ })
473
+ t .Run ("Default IdentityProviderResponseParser with token that will expire soon" , func (t * testing.T ) {
474
+ authResult := & public.AuthResult {
475
+ ExpiresOn : time .Now ().Add (MinTokenTTL ).Add (- time .Minute ).UTC (),
476
+ }
477
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
478
+ authResult )
479
+ assert .NoError (t , err )
480
+ token , err := defaultIdentityProviderResponseParser (idpResponse )
481
+ assert .Error (t , err )
482
+ assert .Nil (t , token )
483
+ })
484
+ t .Run ("Default IdentityProviderResponseParser with token that expired" , func (t * testing.T ) {
485
+ authResult := & public.AuthResult {
486
+ ExpiresOn : time .Now ().Add (- time .Hour ).UTC (),
487
+ }
488
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
489
+ authResult )
490
+ assert .NoError (t , err )
491
+ token , err := defaultIdentityProviderResponseParser (idpResponse )
492
+ assert .Error (t , err )
493
+ assert .Nil (t , token )
494
+ })
462
495
}
You can’t perform that action at this time.
0 commit comments