Anvil Connect lib for Express
Overview
This is a simple auth middleware for Express.js apps that works with the
Anvil Connect
authentication/authorization server (based on the
OpenID Connect and OAuth 2 stack), and the
anvil-connect-nodejs
client.
Installation
This library assumes that you have Node.js installed (it's developed and tested
on Node 4 and above), and are familiar with Express routes and middleware.
To install dependencies:
npm install
Configuration
Require the project and configure the client with an issuer
, a client_id
,
and a client_secret
. For more information on registering and configuring
OpenID Connect clients, see the
Anvil Connect Documentation.
var AnvilConnectExpress = require('anvil-connect-express')
var oidc = new AnvilConnectExpress({
issuer: 'https://connect.example.com',
client_id: 'YOUR_CLIENT_ID_HERE',
client_secret: 'YOUR_CLIENT_SECRET_HERE'
})
var express = require('express')
var app = express()
Usage
The Anvil Connect lib for Express allows you to require authentication and
authorization for any requests to any number of Express endpoints (or even
the entire server).
Single endpoint
app.get('/protected', oidc.verifier(), function (req, res, next) {
})
All endpoints
app.use(oidc.verifier())
app.get('/protected-one', function (req, res, next) {
})
app.get('/protected-two', function (req, res, next) {
})
Optionally Authenticate
By default, as in the above examples, if an endpoint uses the verifier()
middleware, it will throw an HTTP
401 Unauthorized
An access token is required
error if an access token is not included with that
request.
However, for some use cases, the access token is optional, but you still want
to invoke verifier()
so that the token is parsed, and the credentials are
added to the req
object for downstream use. For example, if the resource was
set to 'allow anyone to read' by its owner, a request with no token is
acceptable - no error should be raised until the control flow passes to a
downstream authorization component.
In this case, set the optional parameter allowNoToken
to true:
var verifyOptions = { allowNoToken: true }
app.get('/maybe-protected', oidc.verifier(verifyOptions), function (req, res, next) {
})
Optionally Load User Info
In addition to parsing and verifying the access token, you can ask verifier()
to also load user profile details from the OpenID Provider's /userinfo
endpoint:
var verifyOptions = { loadUserInfo: true }
app.get('/protected', oidc.verifier(verifyOptions), function (req, res, next) {
})
Customizations
The Anvil Connect lib for Express allows for some customization. You can
authorize with a required scope or even whitelist clients you want to allow by
client_id
.
Authorize with a required scope
var authorize = oidc.verifier({ scope: 'research' })
app.get('/authenticated', authorize, function (req, res, next) {
})
app.use(oidc.verifier({ scope: 'myapp' }))
app.get('/authenticated', function (req, res, next) {
})
app.get('/authed', function (req, res, next) {
})
Restrict to specific clients
var authorize = oidc.verifier({
clients: [
'8206cab0-3712-4841-bb6c-c347799e2458',
]
})
Unit Testing
To run the unit tests after installation:
npm test
License
MIT