Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

minicloud-koa-oauth-server

thomseddon7Apache 2.01.0.5

OAuth provider for koa

koa, oauth, oauth2

readme

Koa OAuth Server Build Status

Complete, compliant and well tested module for implementing an OAuth2 Server/Provider with koa in node.js.

This is the koa wrapper for oauth2-server.

Installation

$ npm install koa-oauth-server

Quick Start

The module provides two middlewares - one for granting tokens and another to authorise them. koa-oauth-server and, consequently oauth2-server, expect the request body to be parsed already. The following example uses koa-bodyparser but you may opt for an alternative library.

var koa = require('koa');
var bodyparser = require('koa-bodyparser');
var oauthserver = require('koa-oauth-server');

var app = koa();

app.oauth = oauthserver({
  model: {}, // See https://github.com/thomseddon/node-oauth2-server for specification
  grants: ['password'],
  debug: true
});

app.use(bodyparser());
app.use(app.oauth.authorise());

app.use(function *(next) {
  this.body = 'Secret area';
  yield next;
});

app.listen(3000);

Using koa-router with koa-mount

If you wish to integrate with koa-router using koa-mount, you may do so by combining them to mount a specific prefix for oauth operations:

var Router = require('koa-router');
var bodyparser = require('koa-bodyparser');
var koa = require('koa');
var model = require('koa-oauth-server/node_modules/oauth2-server/examples/memory/model');
var mount = require('koa-mount');
var oauthserver = require('koa-oauth-server');

// Create a new koa app.
var app = koa();

// Create a router for oauth.
var router = new Router();

// Enable body parsing.
app.use(bodyparser());

// See https://github.com/thomseddon/node-oauth2-server for specification.
app.oauth = oauthserver({
  model: model,
  grants: ['password'],
  debug: true
});

// Mount `oauth2` route prefix.
app.use(mount('/oauth2', router.middleware()));

// Register `/token` POST path on oauth router (i.e. `/oauth2/token`).
router.post('/token', app.oauth.grant());

// Start koa server.
app.listen(3000);

Then attempt to be granted a new oauth token:

curl -XPOST -d 'username=thomseddon&password=nightworld&grant_type=password&client_id=thom&client_secret=nightworld' http://localhost:3000/oauth2/token

changelog

Changelog

1.0.0

  • Replace thunks by promises
  • Update readme to mention request body parsing
  • Update copyright notices
  • Update dependencies
  • [BC BREAK] Remove body parser

0.0.7

0.0.6

  • Throw errors when passthroughErrors is enabled

0.0.5

  • Expose WWW-Authenticate headers correctly on koa response
  • Update error handler to support the new base error-inherited version of OAuth2Error
  • Update node-oauth2-server dependency from 2.1.1 to 2.2.1

0.0.4

  • Update node-oauth2-server dependency from 2.0 to 2.1.1

0.0.3

  • Update node-oauth2-server dependency from 2.x-RC to 2.0 stable

0.0.2

  • Add grant support

0.0.1

  • Add authorise support