oada-client-discovery-js
Connect style middleware for OADA (openag.io) client discovery.
Getting Started
Installation
The library can be installed with npm
using
$ npm install oada-client-discovery
Running the Examples
Minimal Example
See examples README
Running the tests, coverage, and style checks
The libraries test can be ran with:
$ npm test
The coverage report is generated by:
$ npm run cover
Gulp runs jshint
(lint) and jscs
(style) with:
$ gulp lint
$ gulp style
API
clientDiscovery(lookup, options)
Connect style middleware for OADA client discovery.
To eliminate a dependency on any particular storage system or database a
lookup
function that fetches client registrations must be provided by the
caller.
CORS is required by OADA client discovery and therefore automatically
enabled. See node-cors.
Parameters
lookup
{Function} that resolves a client registration from a client ID. It
takes the form function(lookup, callback)
.
options
{Object, Optional} possibly containing the following properties:
cors
{Object} Options object for node-cors. Default: {}
Client Registration Object
An OADA client registration is a JSON document with at least the following
properties:
clientId
{String} client IDredirectUrls
{Array of Strings} Array of allowable OAuth 2.0 redirect URLs.licenses
{Array of Strings} Array of license names the client developer has
agreed to.keys
{JSON Web Key (JWK) Set} containing the client's JWKs for use
with OADA specific OAuth 2.0/OpenID Connect client secrets.
Example Client Registration
{
"clientId": "123abc@agcloud.com",
"redirectUrls": [
"https://agcloud.com/redirect"
],
"licenses": [
"oada",
],
"keys": [
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"kid": "ad8alkjca38afvudsZA",
"n": "AOtWalmH3vZ2q2Be ... SRQjYzxqpyVR9HEJYJ",
"e": "AQAB",
}
]
}
Usage Example
var express = require('express');
var clientDiscovery = require('oada-client-discovery');
var app = express();
app.get('/clientDiscovery', clientDiscovery(
function(clientId, cb) {
clients.find({clientId: clientId}, function(err, clients) {
if(err) { return cb(err); }
cb(null, clients[0]);
})
}));