uncrypto
uncrypto copied to clipboard
feat: `signJWT`, `verifyJWT` and `decodeJWT` utils
๐ Linked issue
[!NOTE] I accidentally closed the PR #23. This PR includes the same changes.
#17
โ Type of change
- [ ] ๐ Documentation (updates to the documentation, readme, or JSdoc annotations)
- [ ] ๐ Bug fix (a non-breaking change that fixes an issue)
- [ ] ๐ Enhancement (improving an existing functionality like performance)
- [x] โจ New feature (a non-breaking change that adds functionality)
- [ ] ๐งน Chore (updates to the build process or auxiliary tools and libraries)
- [ ] โ ๏ธ Breaking change (fix or feature that would cause existing functionality to change)
๐ Description
Resolves #17.
The following JWT utilities will be available with this PR (migrated from unjwt
):
-
signJWT
-
verifyJWT
-
decodeJWT
I have kept the code as simple as possible to cover the basic needs for JWT signing, verification and decoding. Method parameters have a balance between sensible defaults and customization.
Example usage:
import { decodeJWT, signJWT, verifyJWT } from 'uncrypto/jwt'
interface JWTUserClaims {
email: string
}
const secret = 'secret'
const issuer = 'https://domain.com'
// Sign a JWT
const accessToken = await signJWT<JWTUserClaims>({
payload: {
email: '[email protected]'
},
secret,
issuer,
audience: issuer,
})
// Verify a JWT
try {
const verifiedAccessToken = await verifyJWT({
token: accessToken,
secret,
issuer,
audience: issuer
})
}
catch (error) {
// Handle error
console.error(error)
}
// Decode a JWT โ does not verify the signature
const decodedAccessToken = await decodeJWT<JWTUserClaims>(accessToken)
console.log(decodedAccessToken.email)
Please verify if the general direction of this PR makes sense to you. If you, I'm willing to add tests as best as I can.
Notes
- I had to rename
crypto.web
andcrypto.node
tocrypto-web
, respectivelycrypto-node
, because unbuild v2 complained about the file extensions. - No tests added yet. I have used these utils for a while now in some Nuxt projects and published them as
unjwt
package โ explicitly withoutuncrypto
, since I rely onunenv
to resolve the usage von the Web Crypto API. - In one project which used
jose
, I successfully migrated to these new utilities. No user got logged out. ๐
Questions
-
atob
andbtoa
are available in latest Node and worker versions, so I haven't added any usage ofbuffer
. Is that OK for you?
๐ Checklist
- [x] I have linked an issue or discussion.
- [x] I have updated the documentation accordingly.
@pi0 Here it is, again! Feel free to rename methods, move methods around โ I'm happy to learn from your methodology.