39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import * as jose from 'jose';
|
|
import { signJWT, decodeJWT, verifyJWT } from '../src/auth.ts';
|
|
import { getValues } from '../src/jwks/get.ts';
|
|
|
|
const payload = {
|
|
iss: "https://convex.kevisual.cn",
|
|
sub: "user:123456",
|
|
aud: "convex-app",
|
|
name: "John Doe",
|
|
email: "john.doe@example.com",
|
|
// exp: Math.floor(Date.now() / 1000) - (2 * 60 * 60) // 2 hours from now
|
|
}
|
|
|
|
const createToken = async () => {
|
|
const { privateJWK, privateKeyPEM } = getValues();
|
|
const token = await signJWT(payload, privateKeyPEM);
|
|
console.log('Generated JWT:', token);
|
|
|
|
// console.log('expited at:', new Date(payload.exp * 1000).toLocaleString());
|
|
return token;
|
|
}
|
|
const token = await createToken()
|
|
|
|
const decode = decodeJWT(token)
|
|
|
|
console.log('Decoded JWT:', decode);
|
|
|
|
const verify = async () => {
|
|
const { publicKeyPEM, privateJWK, jwks } = getValues();
|
|
try {
|
|
const verifiedPayload = await verifyJWT(token, publicKeyPEM);
|
|
console.log('Verified JWT payload:', verifiedPayload);
|
|
} catch (error) {
|
|
console.error('Verification failed:', error);
|
|
}
|
|
}
|
|
|
|
await verify();
|