Class: MFAStrategy
Defined in: src/auth/MFAStrategy.ts:187
Implements a multi-factory authentication (MFA) strategy that performs basic id and password verification, followed by a secondary authentication. This strategy requires an existing user account to have already registered a valid password that will be validated as well as at least one secondary authentication method.
Supported secondary authentication (2FA) methods:
FIDO2- A hardware-based key challenge exchange that the user has access to (e.g. Yubikey, Passkey, etc).OTP- A One Time Password (OTP) sent to one of the user's verified contacts.TOTP- A Time-Based One Time Password (TOTP) configured on a device the user owns or has access to.
The login flow has three phases:
- Verify Basic - The client sends a request with the user's id and password, either as a JSON/form body
(
{ id, password }) or via anAuthorization: Basicheader. The server returns{ uid, methods }: the user's internal uid (needed to identify subsequent phase 2/3 requests as this session's, regardless of what login identifier — email, alias, etc. — was used for phase 1) and the list of available secondary authentication methods. - Challenge - The client requests a selected 2FA challenge, submitting the
uidfrom phase 1 asidand identifying the method bymethodId. IfFIDO2is selected, a WebAuthn challenge scoped to that credential is generated and stored in the session. IfOTPis selected, a challenge token is generated, stored in the session, and sent to the selected verified contact. IfTOTPis selected, no challenge/notification is generated or sent — the client's authenticator app already has the current code — but the selection is still recorded in the session so phase 3 knows which secret to verify against. - Verify - The client submits the completed 2FA challenge. The challenge is verified against the one stored in the
session, and the associated user is resolved using the
getUser()callback.
Implements
AuthStrategy
Constructors
Constructor
new MFAStrategy(
options):MFAStrategy
Defined in: src/auth/MFAStrategy.ts:191
Parameters
options
Returns
MFAStrategy
Properties
name
readonlyname:string="mfa"
Defined in: src/auth/MFAStrategy.ts:188
The unique name of the strategy used to register with the AuthMiddleware.
Implementation of
AuthStrategy.name
Methods
authenticate()
authenticate(
req,res,required?):Promise<AuthResult|undefined>
Defined in: src/auth/MFAStrategy.ts:195
Attempts to perform authentication with the given request data. If authentication was successful, returns an
AuthResult containing the authentication details. If authentication fails and required is set to true
throws an error, otherwise returns undefined.
Parameters
req
HttpRequest
The request containing data to attempt authentication with.
res
HttpResponse
The response to use when writing back directly to the client.
required?
boolean
Returns
Promise<AuthResult | undefined>
Implementation of
AuthStrategy.authenticate
authenticateSync()
authenticateSync(
req,res,required?):AuthResult|undefined
Defined in: src/auth/MFAStrategy.ts:254
Attempts to perform authentication with the given request data. If authentication was successful, returns an
AuthResult containing the authentication details. If authentication fails and required is set to true
throws an error, otherwise returns undefined.
This is the synchronous version of authenticate that performs blocking based authentication.
Parameters
req
HttpRequest
The request containing data to attempt authentication with.
res
HttpResponse
The response to use when writing back directly to the client.
required?
boolean
Returns
AuthResult | undefined
Implementation of
AuthStrategy.authenticateSync
challenge()
protectedchallenge(payload,req,res):Promise<void>
Defined in: src/auth/MFAStrategy.ts:258
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<void>
verifyBasic()
protectedverifyBasic(payload,req,res):Promise<JWTUser|undefined>
Defined in: src/auth/MFAStrategy.ts:352
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<JWTUser | undefined>
verifyFIDO()
protectedverifyFIDO(payload,req,res):Promise<JWTUser|undefined>
Defined in: src/auth/MFAStrategy.ts:395
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<JWTUser | undefined>
verifyOTP()
protectedverifyOTP(payload,req,res):Promise<JWTUser|undefined>
Defined in: src/auth/MFAStrategy.ts:451
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<JWTUser | undefined>
verifyRecoveryCode()
protectedverifyRecoveryCode(payload,req,res):Promise<JWTUser|undefined>
Defined in: src/auth/MFAStrategy.ts:506
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<JWTUser | undefined>
verifyTOTP()
protectedverifyTOTP(payload,req,res):Promise<JWTUser|undefined>
Defined in: src/auth/MFAStrategy.ts:470
Parameters
payload
any
req
HttpRequest
res
HttpResponse
Returns
Promise<JWTUser | undefined>