oidc: give every Cloudron its own EdDSA key

This commit is contained in:
Johannes Zellner
2023-03-23 18:02:45 +01:00
parent 71bb41f918
commit 3aa13c3090
4 changed files with 23 additions and 1 deletions
+17
View File
@@ -14,6 +14,7 @@ exports = module.exports = {
const assert = require('assert'),
BoxError = require('./boxerror.js'),
blobs = require('./blobs.js'),
constants = require('./constants.js'),
database = require('./database.js'),
debug = require('debug')('box:oidc'),
@@ -25,6 +26,7 @@ const assert = require('assert'),
paths = require('./paths.js'),
http = require('http'),
HttpError = require('connect-lastmile').HttpError,
jose = require('jose'),
safe = require('safetydance'),
settings = require('./settings.js'),
users = require('./users.js'),
@@ -547,6 +549,18 @@ async function start() {
const { Provider } = await import('oidc-provider');
// TODO we may want to rotate those in the future
let key = await blobs.getString(blobs.OIDC_KEY);
if (!key) {
debug('Generating new OIDC EdDSA key');
const { privateKey } = await jose.generateKeyPair('EdDSA');
key = await jose.exportJWK(privateKey);
await blobs.setString(blobs.OIDC_KEY, JSON.stringify(key));
} else {
debug('Using existing OIDC EdDSA key');
key = JSON.parse(key);
}
const configuration = {
findAccount,
renderError,
@@ -556,6 +570,9 @@ async function start() {
return `${ROUTE_PREFIX}/interaction/${interaction.uid}`;
}
},
jwks: {
keys: [ key ]
},
claims: {
email: ['email', 'email_verified'],
profile: [ 'family_name', 'given_name', 'locale', 'name', 'preferred_username' ]