UNPKG

oauth2orize-openid

Version:

Extensions to support OpenID Connect with OAuth2orize.

87 lines (73 loc) 2.8 kB
/** * Module dependencies. */ var AuthorizationError = require('../errors/authorizationerror'); /** * Parse request parameters defined by OpenID Connect. * * This module is a wildcard parser that parses authorization requests for * extensions parameters defined by OpenID Connect. * * Examples: * * server.grant(openid.extensions()); * * References: * - [OpenID Connect Basic Client Profile 1.0 - draft 28](http://openid.net/specs/openid-connect-basic-1_0.html) * - [OpenID Connect Implicit Client Profile 1.0 - draft 11](http://openid.net/specs/openid-connect-implicit-1_0.html) * - [OpenID Connect Messages 1.0 - draft 20](http://openid.net/specs/openid-connect-messages-1_0.html) * * @return {Object} module * @api public */ module.exports = function() { function request(req) { var q = req.query , ext = {}; // TODO: Only parse these if scope includes `openid` function parse(param, split) { if (!q[param]) { return; } if (typeof q[param] !== 'string') { throw new AuthorizationError('Failed to parse ' + param + ' as string', 'invalid_request'); } return (split) ? q[param].split(' ') : q[param]; } ext.nonce = parse('nonce'); ext.display = parse('display') || 'page'; if (q.prompt) { ext.prompt = parse('prompt', true); } if (q.max_age) { ext.maxAge = parseInt(q.max_age); } if (q.ui_locales) { ext.uiLocales = parse('ui_locales', true); } if (q.claims_locales) { ext.claimsLocales = parse('claims_locales', true); } ext.idTokenHint = q.id_token_hint; ext.loginHint = q.login_hint; if (q.acr_values) { ext.acrValues = parse('acr_values', true); } if (q.claims) { try { ext.claims = JSON.parse(q.claims); } catch (_) { throw new AuthorizationError('Failed to parse claims as JSON', 'invalid_request'); } } if (q.registration) { try { ext.registration = JSON.parse(q.registration); } catch (_) { throw new AuthorizationError('Failed to parse registration as JSON', 'invalid_request'); } } // NOTE: The below parameters should be implemented in a separate extension, tracking // the following IETF draft: // https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06 // http://openid.net/specs/openid-connect-core-1_0.html#JWTRequests // TODO: Add support for "request" parameter // TODO: Add support for "request_uri" parameter if (ext.prompt && ext.prompt.length > 1) { if (ext.prompt.indexOf('none') != -1) { throw new AuthorizationError('Prompt includes none with other values', 'invalid_request'); } } return ext; } var mod = {}; mod.name = '*'; mod.request = request; return mod; }