@@ -62,7 +62,23 @@ func TestVerifierVerifyIdToken(t *testing.T) {
6262 require .NoError (t , err )
6363
6464 _ , err = v .VerifyIdToken (ctx , idToken )
65- require .ErrorContains (t , err , "verifying token issuer: issuer '' in token does not match 'https://test.okta.com'" )
65+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token is missing required claim: iss claim is required" )
66+ })
67+
68+ t .Run ("verify id token wrong issuer" , func (t * testing.T ) {
69+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
70+ "iss" : "wrong" ,
71+ "aud" : clientId ,
72+ "iat" : time .Now ().Unix (),
73+ "exp" : time .Now ().Add (24 * time .Hour ).Unix (),
74+ "nonce" : 456 ,
75+ })
76+ token .Header ["kid" ] = oktatest .KID
77+ idToken , err := token .SignedString (pk )
78+ require .NoError (t , err )
79+
80+ _ , err = v .VerifyIdToken (ctx , idToken )
81+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token has invalid issuer" )
6682 })
6783
6884 t .Run ("verify id token missing audience" , func (t * testing.T ) {
@@ -77,7 +93,23 @@ func TestVerifierVerifyIdToken(t *testing.T) {
7793 require .NoError (t , err )
7894
7995 _ , err = v .VerifyIdToken (ctx , idToken )
80- require .ErrorContains (t , err , "verifying token audience: audience '[]' in token does not match 'test'" )
96+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token is missing required claim: aud claim is required" )
97+ })
98+
99+ t .Run ("verify id token wrong audience" , func (t * testing.T ) {
100+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
101+ "iss" : issuer ,
102+ "aud" : "wrong" ,
103+ "iat" : time .Now ().Unix (),
104+ "exp" : time .Now ().Add (24 * time .Hour ).Unix (),
105+ "nonce" : 456 ,
106+ })
107+ token .Header ["kid" ] = oktatest .KID
108+ idToken , err := token .SignedString (pk )
109+ require .NoError (t , err )
110+
111+ _ , err = v .VerifyIdToken (ctx , idToken )
112+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token has invalid audience" )
81113 })
82114
83115 t .Run ("verify id token missing issued time" , func (t * testing.T ) {
@@ -107,7 +139,7 @@ func TestVerifierVerifyIdToken(t *testing.T) {
107139 require .NoError (t , err )
108140
109141 _ , err = v .VerifyIdToken (ctx , idToken )
110- require .ErrorContains (t , err , "verifying token expiration time: no expiration time found " )
142+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token is missing required claim: exp claim is required " )
111143 })
112144
113145 t .Run ("verify id token expired" , func (t * testing.T ) {
@@ -125,6 +157,39 @@ func TestVerifierVerifyIdToken(t *testing.T) {
125157 _ , err = v .VerifyIdToken (ctx , idToken )
126158 require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token is expired" )
127159 })
160+
161+ t .Run ("verify id token expiration with leeway" , func (t * testing.T ) {
162+
163+ lv := NewVerifier (issuer , clientId , WithKeyfuncProvider (kp ), WithLeeway (time .Minute ))
164+
165+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
166+ "iss" : issuer ,
167+ "aud" : clientId ,
168+ "iat" : time .Now ().Unix (),
169+ "exp" : time .Now ().Add (- 30 * time .Second ).Unix (),
170+ "nonce" : 456 ,
171+ })
172+ token .Header ["kid" ] = oktatest .KID
173+ idToken , err := token .SignedString (pk )
174+ require .NoError (t , err )
175+
176+ _ , err = lv .VerifyIdToken (ctx , idToken )
177+ require .NoError (t , err )
178+
179+ token = jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
180+ "iss" : issuer ,
181+ "aud" : clientId ,
182+ "iat" : time .Now ().Unix (),
183+ "exp" : time .Now ().Add (- 2 * time .Minute ).Unix (),
184+ "nonce" : 456 ,
185+ })
186+ token .Header ["kid" ] = oktatest .KID
187+ idToken , err = token .SignedString (pk )
188+ require .NoError (t , err )
189+
190+ _ , err = lv .VerifyIdToken (ctx , idToken )
191+ require .ErrorContains (t , err , "verifying id token: parsing token: token has invalid claims: token is expired" )
192+ })
128193}
129194
130195func TestVerifierVerifyAccessToken (t * testing.T ) {
@@ -201,7 +266,23 @@ func TestVerifierVerifyAccessToken(t *testing.T) {
201266 require .NoError (t , err )
202267
203268 _ , err = v .VerifyAccessToken (ctx , idToken )
204- require .ErrorContains (t , err , "verifying token issuer: issuer '' in token does not match 'https://test.okta.com'" )
269+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token is missing required claim: iss claim is required" )
270+ })
271+
272+ t .Run ("verify access token wrong issuer" , func (t * testing.T ) {
273+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
274+ "iss" : "wrong" ,
275+ "aud" : clientId ,
276+ "iat" : time .Now ().Unix (),
277+ "exp" : time .Now ().Add (24 * time .Hour ).Unix (),
278+ "nonce" : 456 ,
279+ })
280+ token .Header ["kid" ] = oktatest .KID
281+ idToken , err := token .SignedString (pk )
282+ require .NoError (t , err )
283+
284+ _ , err = v .VerifyAccessToken (ctx , idToken )
285+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token has invalid issuer" )
205286 })
206287
207288 t .Run ("verify access token missing audience" , func (t * testing.T ) {
@@ -215,7 +296,23 @@ func TestVerifierVerifyAccessToken(t *testing.T) {
215296 require .NoError (t , err )
216297
217298 _ , err = v .VerifyAccessToken (ctx , idToken )
218- require .ErrorContains (t , err , "verifying token audience: audience '[]' in token does not match 'test'" )
299+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token is missing required claim: aud claim is required" )
300+ })
301+
302+ t .Run ("verify access token wrong audience" , func (t * testing.T ) {
303+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
304+ "iss" : issuer ,
305+ "aud" : "wrong" ,
306+ "iat" : time .Now ().Unix (),
307+ "exp" : time .Now ().Add (24 * time .Hour ).Unix (),
308+ "nonce" : 456 ,
309+ })
310+ token .Header ["kid" ] = oktatest .KID
311+ idToken , err := token .SignedString (pk )
312+ require .NoError (t , err )
313+
314+ _ , err = v .VerifyAccessToken (ctx , idToken )
315+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token has invalid audience" )
219316 })
220317
221318 t .Run ("verify access token missing issued time" , func (t * testing.T ) {
@@ -243,7 +340,7 @@ func TestVerifierVerifyAccessToken(t *testing.T) {
243340 require .NoError (t , err )
244341
245342 _ , err = v .VerifyAccessToken (ctx , idToken )
246- require .ErrorContains (t , err , "verifying token expiration time: no expiration time found " )
343+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token is missing required claim: exp claim is required " )
247344 })
248345
249346 t .Run ("verify access token expired" , func (t * testing.T ) {
@@ -260,4 +357,37 @@ func TestVerifierVerifyAccessToken(t *testing.T) {
260357 _ , err = v .VerifyAccessToken (ctx , idToken )
261358 require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token is expired" )
262359 })
360+
361+ t .Run ("verify access token expiration with leeway" , func (t * testing.T ) {
362+
363+ lv := NewVerifier (issuer , clientId , WithKeyfuncProvider (kp ), WithLeeway (time .Minute ))
364+
365+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
366+ "iss" : issuer ,
367+ "aud" : clientId ,
368+ "iat" : time .Now ().Unix (),
369+ "exp" : time .Now ().Add (- 30 * time .Second ).Unix (),
370+ "nonce" : 456 ,
371+ })
372+ token .Header ["kid" ] = oktatest .KID
373+ idToken , err := token .SignedString (pk )
374+ require .NoError (t , err )
375+
376+ _ , err = lv .VerifyAccessToken (ctx , idToken )
377+ require .NoError (t , err )
378+
379+ token = jwt .NewWithClaims (jwt .SigningMethodRS256 , jwt.MapClaims {
380+ "iss" : issuer ,
381+ "aud" : clientId ,
382+ "iat" : time .Now ().Unix (),
383+ "exp" : time .Now ().Add (- 2 * time .Minute ).Unix (),
384+ "nonce" : 456 ,
385+ })
386+ token .Header ["kid" ] = oktatest .KID
387+ idToken , err = token .SignedString (pk )
388+ require .NoError (t , err )
389+
390+ _ , err = lv .VerifyAccessToken (ctx , idToken )
391+ require .ErrorContains (t , err , "verifying access token: parsing token: token has invalid claims: token is expired" )
392+ })
263393}
0 commit comments