brightspace-auth-keys
Library for generating, storing, and retrieving keypairs for use in
Brightspace's auth framework.
Install
npm install brightspace-auth-keys --save
Usage
Step 1. Implement the interface defined by AbstractPublicKeyStore
:
const AbstractPublicKeyStore = require('brightspace-auth-keys').AbstractPublicKeyStore;
class RedisPublicKeyStore extends AbstractPublicKeyStore {
constructor (redisClient) {
super();
}
_storePublicKey (key, expiry) {
}
_lookupPublicKeys() {
}
}
Step 2. Instantiate KeyGenerator
:
const KeyGenerator = require('brightspace-auth-keys').KeyGenerator;
const publicKeyStore = new RedisPublicKeyStore(...);
const keyGenerator = new KeyGenerator({
signingKeyType: 'EC',
publicKeyStore
});
Step 3. Expose a route for public key retrieval using a routing framework
of your choice. The route will be called by D2L Auth Service. Note that your
service must be known by the Auth service (present in its DB).
const router = require('koa-router')();
router.get('/auth/.well-known/jwks', function() {
return publicKeyStore
.lookupPublicKeys()
.then(keys => this.body = { keys });
});
router.get('/auth/jwk/:kid', function(kid) {
return publicKeyStore
.lookupPublicKey(kid)
.then(key => this.body = key);
});
app.use(router.routes());
Step 4. Instantiate AuthTokenProvisioner providing
keyGenerator.getCurrentPrivateKey
as a keyLookup
function:
const AuthTokenProvisioner = require('brightspace-auth-provisioning');
const provisioner = new AuthTokenProvisioner({
...
keyLookup: keyGenerator.getCurrentPrivateKey.bind(keyGenerator),
...
});
Now you are able to call provisioner.provisionToken(...)
.
Supported options:
const keyGenerator = new KeyGenerator({
signingKeyType: 'EC',
lifetimes: {
keyUse: 3600,
token: 300
},
ec: {
crv: 'P-256'
},
rsa: {
signingKeySize: 2048
},
publicKeyStore: new RedisPublicKeyStore(...)
});