fix: use base64url (not base64) for session token verification in middleware
The login route encodes the payload with base64url but the middleware was decoding with base64 — mismatch caused session verification to always fail, making protected APIs return 401 even after successful login.
This commit is contained in:
1 parent
a1c861202a
commit
3dae506a6c
1 file changed
+3
-2
+3
-2
@@ -47,10 +47,11 @@ async function verifySession(token: string | undefined): Promise<boolean> {
|
|||||||
const adminPassword = process.env.ADMIN_PASSWORD
|
const adminPassword = process.env.ADMIN_PASSWORD
|
||||||
if (!adminPassword) return false
|
if (!adminPassword) return false
|
||||||
try {
|
try {
|
||||||
// Session token format: base64(payload).hmac
|
// Session token format: base64url(payload).hmac
|
||||||
const [payloadB64, signature] = token.split('.')
|
const [payloadB64, signature] = token.split('.')
|
||||||
if (!payloadB64 || !signature) return false
|
if (!payloadB64 || !signature) return false
|
||||||
const payload = JSON.parse(Buffer.from(payloadB64, 'base64').toString())
|
// Use base64url to match the encoding in the login route
|
||||||
|
const payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString())
|
||||||
if (payload.exp && Date.now() > payload.exp) return false
|
if (payload.exp && Date.now() > payload.exp) return false
|
||||||
// Verify HMAC
|
// Verify HMAC
|
||||||
const crypto = await import('crypto')
|
const crypto = await import('crypto')
|
||||||
|
|||||||
Reference in new issue
Block a user