Skip to content

Commit fe480aa

Browse files
feat: set nbf to iat in generated jwt (#6)
1 parent d4a1eb7 commit fe480aa

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

src/decorators/jwt.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,16 @@ export class JwtDecorator {
3939
issuer: string;
4040
audience: string;
4141
}): Promise<string> => {
42+
const timestamp = new Date();
43+
4244
return new SignJWT(payload)
4345
.setProtectedHeader({ alg: 'RS256', kid: JWT_KEY_ID })
4446
.setSubject(subject)
4547
.setIssuer(issuer)
4648
.setAudience(audience)
4749
.setExpirationTime('1h')
48-
.setIssuedAt()
50+
.setNotBefore(timestamp)
51+
.setIssuedAt(timestamp)
4952
.sign(privateKey);
5053
};
5154

test/decorators/jwt.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,24 @@ describe('decorators > jwt', () => {
5656
expect(diff).toBeGreaterThan(3500); // ~58 minutes
5757
expect(diff).toBeLessThan(3700); // ~61 minutes
5858
});
59+
60+
it('should set nbf equal to iat', async () => {
61+
const token = await jwt.signOpenIdJwt({
62+
payload: {},
63+
subject: 'user-123',
64+
issuer: 'test',
65+
audience: 'test'
66+
});
67+
68+
const result = await jwt.verify(token);
69+
70+
if (!result.valid) {
71+
expect(true).toBeFalsy();
72+
return;
73+
}
74+
75+
expect(result.payload.nbf).toBe(result.payload.iat);
76+
});
5977
});
6078

6179
describe('signOAuthJwt', () => {

0 commit comments

Comments
 (0)