@@ -26,28 +26,32 @@ export class TokenExpiredError extends Error {}
26
26
export class TokenInvalidError extends Error { }
27
27
28
28
export class PublicFederatedToken extends FederatedToken {
29
- async createAccessJWT ( signer : TokenSigner ) {
30
- // Find the expire time of the first token that expires
31
- const values = Object . values ( this . tokens ) ;
32
- const sorted = values . sort ( ( a , b ) => a . exp - b . exp ) ;
33
- const exp = sorted [ 0 ] . exp ;
34
29
30
+ // Create the access JWT. This JWT is send to the client. It is send as
31
+ // signed token (not encrypted). The jwe attribute is encrypted however.
32
+ // This is all done when the GraphQL gateway sends the response back to the
33
+ // client.
34
+ async createAccessJWT ( signer : TokenSigner ) {
35
+ const exp = this . getExpireTime ( )
35
36
const fingerprint = generateFingerprint ( ) ;
37
+ const subject = await signer . getSubject ( this ) ;
38
+
36
39
const payload : JWTPayload = {
37
- exp : exp ,
38
- jwe : await signer . encryptObject ( this . tokens ) ,
39
40
...this . values ,
41
+ exp,
42
+ sub : subject ,
43
+ jwe : await signer . encryptObject ( this . tokens ) ,
40
44
_fingerprint : hashFingerprint ( fingerprint ) ,
41
45
} ;
42
46
43
- const token = await signer . signJWT ( payload , exp ) ;
44
-
47
+ const token = await signer . signJWT ( payload ) ;
45
48
return {
46
49
accessToken : token ,
47
50
fingerprint : fingerprint ,
48
51
} ;
49
52
}
50
53
54
+
51
55
async loadAccessJWT (
52
56
signer : TokenSigner ,
53
57
value : string ,
@@ -78,7 +82,7 @@ export class PublicFederatedToken extends FederatedToken {
78
82
}
79
83
80
84
this . tokens = await signer . decryptObject ( payload . jwe ) ;
81
- const knownKeys = [ "jwe" , "iat" , "exp" , "aud" , "iss" , "_fingerprint" ] ;
85
+ const knownKeys = [ "jwe" , "iat" , "exp" , "aud" , "sub" , "jti" , " iss", "_fingerprint" ] ;
82
86
for ( const k in payload ) {
83
87
if ( ! knownKeys . includes ( k ) ) {
84
88
this . values [ k ] = payload [ k ] ;
0 commit comments