@@ -10,8 +10,10 @@ import (
10
10
"time"
11
11
12
12
"github.com/stretchr/testify/assert"
13
+ "github.com/stretchr/testify/require"
13
14
14
15
"github.com/ory/fosite"
16
+ "github.com/ory/fosite/internal/gen"
15
17
"github.com/ory/fosite/token/jwt"
16
18
)
17
19
@@ -283,3 +285,86 @@ func TestJWTStrategy_GenerateIDToken(t *testing.T) {
283
285
})
284
286
}
285
287
}
288
+
289
+ func TestJWTStrategy_DecodeIDToken (t * testing.T ) {
290
+ var j = & DefaultStrategy {
291
+ Signer : & jwt.DefaultSigner {
292
+ GetPrivateKey : func (_ context.Context ) (interface {}, error ) {
293
+ return key , nil
294
+ }},
295
+ Config : & fosite.Config {
296
+ MinParameterEntropy : fosite .MinParameterEntropy ,
297
+ },
298
+ }
299
+
300
+ var anotherKey = gen .MustRSAKey ()
301
+
302
+ var genIDToken = func (c jwt.IDTokenClaims ) string {
303
+ s , _ , err := j .Generate (context .TODO (), c .ToMapClaims (), jwt .NewHeaders ())
304
+ require .NoError (t , err )
305
+ return s
306
+ }
307
+
308
+ var token string
309
+ var decoder * DefaultStrategy
310
+ for k , c := range []struct {
311
+ description string
312
+ setup func ()
313
+ expectErr bool
314
+ }{
315
+ {
316
+ description : "should pass with valid token" ,
317
+ setup : func () {
318
+ token = genIDToken (jwt.IDTokenClaims {
319
+ Subject : "peter" ,
320
+ RequestedAt : time .Now (),
321
+ ExpiresAt : time .Now ().Add (time .Hour ),
322
+ })
323
+ decoder = j
324
+ },
325
+ expectErr : false ,
326
+ },
327
+ {
328
+ description : "should pass even though token is expired" ,
329
+ setup : func () {
330
+ token = genIDToken (jwt.IDTokenClaims {
331
+ Subject : "peter" ,
332
+ RequestedAt : time .Now (),
333
+ ExpiresAt : time .Now ().Add (- time .Hour ),
334
+ })
335
+ decoder = j
336
+ },
337
+ expectErr : false ,
338
+ },
339
+ {
340
+ description : "should fail because token is decoded with wrong key" ,
341
+ setup : func () {
342
+ token = genIDToken (jwt.IDTokenClaims {
343
+ Subject : "peter" ,
344
+ RequestedAt : time .Now (),
345
+ ExpiresAt : time .Now ().Add (time .Hour ),
346
+ })
347
+ decoder = & DefaultStrategy {
348
+ Signer : & jwt.DefaultSigner {
349
+ GetPrivateKey : func (_ context.Context ) (interface {}, error ) {
350
+ return anotherKey , nil
351
+ }},
352
+ Config : & fosite.Config {
353
+ MinParameterEntropy : fosite .MinParameterEntropy ,
354
+ },
355
+ }
356
+ },
357
+ expectErr : true ,
358
+ },
359
+ } {
360
+ t .Run (fmt .Sprintf ("case=%d/description=%s" , k , c .description ), func (t * testing.T ) {
361
+ c .setup ()
362
+ req := fosite .NewAccessRequest (& DefaultSession {})
363
+ idtoken , err := decoder .DecodeIDToken (context .Background (), req , token )
364
+ assert .Equal (t , c .expectErr , err != nil , "%d: %+v" , k , err )
365
+ if ! c .expectErr {
366
+ assert .NotNil (t , idtoken )
367
+ }
368
+ })
369
+ }
370
+ }
0 commit comments