Security News
Bun 1.2 Released with 90% Node.js Compatibility and Built-in S3 Object Support
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
@fastify/bearer-auth
Advanced tools
@fastify/bearer-auth provides a simple request hook for the Fastify web framework.
'use strict'
const fastify = require('fastify')()
const bearerAuthPlugin = require('@fastify/bearer-auth')
const keys = new Set(['a-super-secret-key', 'another-super-secret-key'])
fastify.register(bearerAuthPlugin, {keys})
fastify.get('/foo', (req, reply) => {
reply.send({authenticated: true})
})
fastify.listen({port: 8000}, (err) => {
if (err) {
fastify.log.error(err.message)
process.exit(1)
}
fastify.log.info('http://127.0.0.1:8000/foo')
})
@fastify/bearer-auth exports a standard Fastify plugin. This allows you to register the plugin within scoped paths. Therefore, you could have some paths that are not protected by the plugin and others that are. See the Fastify documentation and examples for more details.
When registering the plugin you must specify a configuration object:
keys
: A Set
or array with valid keys of type string
(required)function errorResponse (err) {}
: method must synchronously return the content body to be
sent to the client (optional)contentType
: If the content to be sent is anything other than
application/json
, then the contentType
property must be set (optional)bearerType
: string specifying the Bearer string (optional)function auth (key, req) {}
: this function will test if key
is a valid token.
The function must return a literal true
if the key is accepted or a literal
false
if rejected. The function may also return a promise that resolves to
one of these values. If the function returns or resolves to any other value,
rejects, or throws, a HTTP status of 500
will be sent. req
is the Fastify
request object. If auth
is a function, keys
will be ignored. If auth
is
not a function, or undefined
, keys
will be used.addHook
: If false
, this plugin will not register onRequest
hook automatically,
instead it provide two decorations fastify.verifyBearerAuth
and
fastify.verifyBearerAuthFactory
for you.verifyErrorLogLevel
: An optional string specifying the log level when there is a verification error.
It must be a valid log level supported by fastify, otherwise an exception will be thrown
when registering the plugin. By default, this option is set to error
.The default configuration object is:
{
keys: new Set(),
contentType: undefined,
bearerType: 'Bearer',
errorResponse: (err) => {
return {error: err.message}
},
auth: undefined,
addHook: true
}
Internally, the plugin registers a standard Fastify preHandler hook,
which will inspect the request's headers for an authorization
header with the
format bearer key
. The key
will be matched against the configured keys
object via a constant time algorithm to prevent against timing-attacks. If the authorization
header is missing,
malformed, or the key
does not validate then a 401 response will be sent with
a {error: message}
body; no further request processing will be performed.
@fastify/auth
This plugin can integrate with @fastify/auth
by following this example:
const fastify = require('fastify')()
const auth = require('@fastify/auth')
const bearerAuthPlugin = require('@fastify/bearer-auth')
const keys = new Set(['a-super-secret-key', 'another-super-secret-key'])
async function server() {
await fastify
.register(auth)
.register(bearerAuthPlugin, { addHook: false, keys, verifyErrorLogLevel: 'debug' })
.decorate('allowAnonymous', function (req, reply, done) {
if (req.headers.authorization) {
return done(Error('not anonymous'))
}
return done()
})
fastify.route({
method: 'GET',
url: '/multiauth',
preHandler: fastify.auth([
fastify.allowAnonymous,
fastify.verifyBearerAuth
]),
handler: function (_, reply) {
reply.send({ hello: 'world' })
}
})
await fastify.listen({port: 8000})
}
server()
By passing { addHook: false }
in the options, the verifyBearerAuth
hook, instead of
immediately replying on error (reply.send(someError)
), invokes done(someError)
. This
will allow fastify.auth
to continue with the next authentication scheme in the hook list.
Note that by setting { verifyErrorLogLevel: 'debug' }
in the options, @fastify/bearer-auth
will emit all verification error logs at the debug
level. Since it is not the only authentication method here, emitting verification error logs at the error
level may be not appropriate here.
If verifyBearerAuth
is the last hook in the list, fastify.auth
will reply with Unauthorized
.
FAQs
A Bearer authentication plugin for Fastify
The npm package @fastify/bearer-auth receives a total of 19,359 weekly downloads. As such, @fastify/bearer-auth popularity was classified as popular.
We found that @fastify/bearer-auth demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
Security News
Biden's executive order pushes for AI-driven cybersecurity, software supply chain transparency, and stronger protections for federal and open source systems.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.