Documentation
    Preparing search index...

    Module JWT

    @byu-oit-sdk/jwt

    Requirements:

    • Node.js 18+
    • npm v9+

    In addition to installing this module, you can install either the Jwt plugin for Fastify or for Express depending on what you're using.

    npm install @byu-oit-sdk/jwt
    

    Use this module for verification and decoding of JWTs. Can be used in conjunction with the express and fastify plugins.

    The current implementation uses jose internally for JWT verification and JWK handling.

    This package exports the following:

    • Jwk - A class for verifying Jwks.
    • RsaJwk - A class for verifying RSA JWKs. Extension of the Jwk class.
    • JwkSet - A class which handles construction, validation, and loading of Jwk Sets.
    • createJwt() - A function that returns a class with methods for verifying and decoding JWTs.

    The following options can be passed in to the CreateJwt() function.

    Option Type Default Description
    Schema Object REQUIRED OPTION The schema of the payload of the JWT that you are creating.
    transformer function - The function that you will use for manipulating the JWT you are authenticating.
    additionalValidations array of functions - An optional array of functions that will also be used to validate the JWT.
    key string REQUIRED OPTION This is required but can be an empty string.
    discoveryEndpoint string - The redirection endpoint that the authorization server should redirect to after authenticating the resource owner.
    issuer string - Used to configure where the user will be sent to sign in.
    TypeScript Coding Example
    import { createJwt, Jwt, type JwtData } from '../src/Jwt.js'
    import { type Static, Type } from '@sinclair/typebox'

    const sampleJwtData = {
    header: {
    alg: 'HS256',
    typ: 'JWT'
    },
    payload: {
    id: 'some id',
    name: 'some Name'
    },
    signature: 'some signature'
    }

    const UserSchema = Type.Object({
    id: Type.String(),
    name: Type.String()
    })

    const TransformedJwtPayload = Type.Object({
    userId: Type.String(),
    userName: Type.String()
    })

    const jwtData: JwtData<Static<typeof UserSchema>> = {
    header: { alg: 'HS256', typ: 'JWT', kid: 'testKid' },
    payload: { id: '1', name: 'Alice' },
    signature: 'sample_signature'
    }

    const payloadTransformer = (payload: typeof UserSchema): Static<typeof TransformedJwtPayload> => {
    const userId = payload.id
    const userName = payload.name
    return {
    userId,
    userName
    }
    }

    const instance = new Jwt(jwtData, { transformer: payloadTransformer })

    const CustomJwt = createJwt({
    schema: UserSchema,
    key: ''
    })

    Classes

    Jwk
    JwkSet
    Jwt
    RsaJwk

    Interfaces

    CreateJwtOptions
    JwkSetOptions
    JwtData
    JwtOptions

    Type Aliases

    JwkData
    JwkSetData
    JwtHeaderData
    JwtPayloadTransformer
    JwtWithValidator
    RsaJwkData
    ValidationFunction

    Variables

    JwkSchema
    JwkSetSchema
    JwkSetType
    JwkType
    JwtHeaderSchema
    RsaJwkSchema
    RsaJwkType

    Functions

    createJwt
    getCacheDuration
    JwtSchema