1
0

Merge pull request #9 from alaister/main

Add support for JWT header
This commit is contained in:
Toby Schneider
2022-06-01 20:10:51 +02:00
committed by GitHub
2 changed files with 4 additions and 3 deletions

1
index.d.ts vendored
View File

@@ -44,6 +44,7 @@ type JWTAlgorithm = 'ES256' | 'ES384' | 'ES512' | 'HS256' | 'HS384' | 'HS512' |
type JWTSignOptions = { type JWTSignOptions = {
algorithm?: JWTAlgorithm, algorithm?: JWTAlgorithm,
keyid?: string keyid?: string
header?: object
} }
type JWTVerifyOptions = { type JWTVerifyOptions = {

View File

@@ -53,9 +53,9 @@ class JWT {
return null return null
} }
} }
async sign(payload, secret, options = { algorithm: 'HS256' }) { async sign(payload, secret, options = { algorithm: 'HS256', header: { typ: 'JWT' } }) {
if (typeof options === 'string') if (typeof options === 'string')
options = { algorithm: options } options = { algorithm: options, header: { typ: 'JWT' } }
if (payload === null || typeof payload !== 'object') if (payload === null || typeof payload !== 'object')
throw new Error('payload must be an object') throw new Error('payload must be an object')
if (typeof secret !== 'string') if (typeof secret !== 'string')
@@ -67,7 +67,7 @@ class JWT {
throw new Error('algorithm not found') throw new Error('algorithm not found')
payload.iat = Math.floor(Date.now() / 1000) payload.iat = Math.floor(Date.now() / 1000)
const payloadAsJSON = JSON.stringify(payload) const payloadAsJSON = JSON.stringify(payload)
const partialToken = `${Base64URL.stringify(this._utf8ToUint8Array(JSON.stringify({ alg: options.algorithm, kid: options.keyid })))}.${Base64URL.stringify(this._utf8ToUint8Array(payloadAsJSON))}` const partialToken = `${Base64URL.stringify(this._utf8ToUint8Array(JSON.stringify({ ...options.header, alg: options.algorithm, kid: options.keyid })))}.${Base64URL.stringify(this._utf8ToUint8Array(payloadAsJSON))}`
let keyFormat = 'raw' let keyFormat = 'raw'
let keyData let keyData
if (secret.startsWith('-----BEGIN')) { if (secret.startsWith('-----BEGIN')) {