From 5e42c1b3df58d92bcc15750afd40cde1e93df297 Mon Sep 17 00:00:00 2001 From: Danil Karpenko Date: Sat, 3 Feb 2024 10:19:36 +0100 Subject: [PATCH 1/3] feat: upgrade jose dependency --- bun.lockb | Bin 60265 -> 60801 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index c875dfc2a831efbd53d55fcd64601a9666128483..6601be6bdc5cffdd3b783244944fcdedb62e0ff0 100755 GIT binary patch delta 14917 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 diff --git a/package.json b/package.json index d4e53f1..389cfb3 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "release": "npm run build && npm run test && npm publish --access public" }, "dependencies": { - "jose": "^4.14.4" + "jose": "^5.2.3" }, "devDependencies": { "@elysiajs/cookie": "^0.3.0", From 4c12c8129d3165c2f68bf97cb4eadfc7f29953c3 Mon Sep 17 00:00:00 2001 From: Danil Karpenko Date: Sat, 3 Feb 2024 11:12:25 +0100 Subject: [PATCH 2/3] feat: support asymmetric algorithm --- src/index.ts | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0e70509..86cba34 100644 --- a/src/index.ts +++ b/src/index.ts @@ -52,8 +52,19 @@ export interface JWTOption< name?: Name /** * JWT Secret + * Only `secret` or both `privateKey`, `publicKey` must be set */ - secret: string | Uint8Array | KeyLike + secret?: string | Uint8Array | KeyLike + /** + * JWT Private Key + * Only `secret` or both `privateKey`, `publicKey` must be set + */ + privateKey?: Uint8Array | KeyLike + /** + * JWT Public Key + * Only `secret` or both `privateKey`, `publicKey` must be set + */ + publicKey?: Uint8Array | KeyLike /** * Type strict validation for JWT payload */ @@ -80,6 +91,8 @@ export const jwt = < >({ name = 'jwt' as Name, secret, + publicKey, + privateKey, // Start JWT Header alg = 'HS256', crit, @@ -91,11 +104,29 @@ export const jwt = < ...payload }: // End JWT Payload JWTOption) => { - if (!secret) throw new Error("Secret can't be empty") - const key = typeof secret === 'string' ? new TextEncoder().encode(secret) : secret + let asymmetric = false + + if (secret && (privateKey || publicKey)) { + throw new Error("When using asymmetric algorithm, only `privateKey` and `publicKey` is accepted") + } + + if (privateKey && !publicKey) { + throw new Error("When using asymmetric algorithm, both `privateKey` and `publicKey` must be set. Public key is missing") + } + + if (publicKey && !privateKey) { + throw new Error("When using asymmetric algorithm, both `privateKey` and `publicKey` must be set. Private key is missing") + } + + if (privateKey && privateKey) { + asymmetric = true + } else if (!secret) { + throw new Error("Secret can't be empty") + } + const validator = schema ? getSchemaValidator( t.Intersect([ @@ -146,7 +177,7 @@ JWTOption) => { if (nbf) jwt = jwt.setNotBefore(nbf) if (exp) jwt = jwt.setExpirationTime(exp) - return jwt.sign(key) + return jwt.sign(asymmetric ? privateKey! : key!) }, verify: async ( jwt?: string @@ -158,7 +189,7 @@ JWTOption) => { if (!jwt) return false try { - const data: any = (await jwtVerify(jwt, key)).payload + const data: any = (await jwtVerify(jwt, asymmetric ? publicKey! : key!)).payload if (validator && !validator!.Check(data)) throw new ValidationError('JWT', validator, data) From 28be4678f00fef9f78de7e13de583119129fa98e Mon Sep 17 00:00:00 2001 From: Danil Karpenko Date: Wed, 27 Mar 2024 07:53:07 +0100 Subject: [PATCH 3/3] chore: asymmetric jwt sign test --- bun.lockb | Bin 60801 -> 59670 bytes test/index.test.ts | 53 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/bun.lockb b/bun.lockb index 6601be6bdc5cffdd3b783244944fcdedb62e0ff0..b5854e0d1da667e19a20ee79bddc9711dc079fb8 100755 GIT binary patch delta 7427 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 delta 7943 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 Y0?|WULVFme#v+Bzv_v)by#Af|FVC*Kvj6}9 diff --git a/test/index.test.ts b/test/index.test.ts index 12faa59..971cd5d 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1,9 +1,9 @@ import { Elysia, t } from 'elysia' +import { importJWK } from 'jose' import { jwt } from '../src' import { describe, expect, it } from 'bun:test' -const req = (path: string) => new Request(`http://localhost${path}`) const post = (path: string, body = {}) => new Request(`http://localhost${path}`, { method: 'POST', @@ -14,8 +14,22 @@ const post = (path: string, body = {}) => }) describe('Static Plugin', () => { + async function signTest() { + const name = 'Shirokami' + + const _sign = post('/sign', { name }) + await _sign.text() + + const _verified = post('/verify', { name }) + const signed = (await _verified.json()) as { + name: string + } + + expect(name).toBe(signed.name) + } + it('sign JWT', async () => { - const app = new Elysia() + new Elysia() .use( jwt({ name: 'jwt', @@ -31,16 +45,31 @@ describe('Static Plugin', () => { body: t.Object({ name: t.String() }) }) - const name = 'Shirokami' - - const _sign = post('/sign', { name }) - const token = await _sign.text() + await signTest() + }) + it('sign JWT (asymmetric)', async () => { + const crv = 'Ed25519' + const d = 'N3cOzsFZwiIbtNiBYQP9bcbcTIdkITC8a4iRslrbW7Q' + const x = 'RjnTe-mqZcVls6SQ5CgW0X__jRaa-Quj5HBDREzVLhc' + const kty = 'OKP' - const _verified = post('/verify', { name }) - const signed = (await _verified.json()) as { - name: string - } + new Elysia() + .use( + jwt({ + name: 'jwt', + privateKey: await importJWK({ crv, d, x, kty }, 'EdDSA'), + publicKey: await importJWK({ crv, x, kty }, 'EdDSA') + }) + ) + .post('/validate', ({ jwt, body }) => jwt.sign(body), { + body: t.Object({ + name: t.String() + }) + }) + .post('/validate', ({ jwt, body: { name } }) => jwt.verify(name), { + body: t.Object({ name: t.String() }) + }) - expect(name).toBe(signed.name) - }) + await signTest() + }) })