UNPKG

@backstage/backend-defaults

Version:

Backend defaults used by Backstage backend apps

55 lines (51 loc) 1.6 kB
'use strict'; var jose = require('jose'); var helpers = require('./helpers.cjs.js'); const jwksTokenHandler = helpers.createExternalTokenHandler({ type: "jwks", initialize({ options }) { if (!options.getString("url").match(/^\S+$/)) { throw new Error( "Illegal JWKS URL, must be a set of non-space characters" ); } const algorithms = helpers.readStringOrStringArrayFromConfig(options, "algorithm"); const issuers = helpers.readStringOrStringArrayFromConfig(options, "issuer"); const audiences = helpers.readStringOrStringArrayFromConfig(options, "audience"); const subjectPrefix = options.getOptionalString("subjectPrefix"); const url = new URL(options.getString("url")); const jwks = jose.createRemoteJWKSet(url); const allAccessRestrictions = helpers.readAccessRestrictionsFromConfig(options); return { algorithms, audiences, issuers, jwks, subjectPrefix, url, allAccessRestrictions }; }, async verifyToken(token, context) { try { const { payload: { sub } } = await jose.jwtVerify(token, context.jwks, { algorithms: context.algorithms, issuer: context.issuers, audience: context.audiences }); if (sub) { const prefix = context.subjectPrefix ? `external:${context.subjectPrefix}:` : "external:"; return { subject: `${prefix}${sub}` }; } } catch { return void 0; } return void 0; } }); exports.jwksTokenHandler = jwksTokenHandler; //# sourceMappingURL=jwks.cjs.js.map