@seamless-auth/oidc-provider 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +80 -10
- package/dist/accessTokenClaims.d.ts +11 -0
- package/dist/accessTokenClaims.js +30 -0
- package/dist/accessTokenClaims.js.map +1 -1
- package/dist/accountClaims.d.ts +51 -0
- package/dist/accountClaims.js +102 -0
- package/dist/accountClaims.js.map +1 -0
- package/dist/adapter.js +16 -3
- package/dist/adapter.js.map +1 -1
- package/dist/apiClient.d.ts +3 -2
- package/dist/apiClient.js +3 -2
- package/dist/apiClient.js.map +1 -1
- package/dist/brandingContrast.d.ts +4 -0
- package/dist/brandingContrast.js +59 -0
- package/dist/brandingContrast.js.map +1 -0
- package/dist/claimsMismatch.d.ts +15 -0
- package/dist/claimsMismatch.js +90 -0
- package/dist/claimsMismatch.js.map +1 -0
- package/dist/createOidcEdge.d.ts +5 -0
- package/dist/createOidcEdge.js +43 -7
- package/dist/createOidcEdge.js.map +1 -1
- package/dist/deviceFlow.d.ts +2 -6
- package/dist/deviceFlow.js +2 -10
- package/dist/deviceFlow.js.map +1 -1
- package/dist/env.d.ts +1 -4
- package/dist/env.js +46 -4
- package/dist/env.js.map +1 -1
- package/dist/errorPage.d.ts +10 -0
- package/dist/errorPage.js +24 -0
- package/dist/errorPage.js.map +1 -0
- package/dist/hostedPages.d.ts +1 -0
- package/dist/hostedPages.js +24 -1
- package/dist/hostedPages.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactions.js +83 -30
- package/dist/interactions.js.map +1 -1
- package/dist/jwtAccessTokens.d.ts +1 -1
- package/dist/jwtAccessTokens.js +2 -1
- package/dist/jwtAccessTokens.js.map +1 -1
- package/dist/logout.d.ts +4 -0
- package/dist/logout.js +8 -1
- package/dist/logout.js.map +1 -1
- package/dist/providerConfig.d.ts +3 -3
- package/dist/providerConfig.js +22 -8
- package/dist/providerConfig.js.map +1 -1
- package/dist/requestContext.d.ts +1 -2
- package/dist/requestContext.js.map +1 -1
- package/dist/requestObjectErrors.d.ts +12 -0
- package/dist/requestObjectErrors.js +47 -0
- package/dist/requestObjectErrors.js.map +1 -0
- package/dist/resumeCookie.js +3 -1
- package/dist/resumeCookie.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/signingKey.d.ts +31 -3
- package/dist/signingKey.js +104 -4
- package/dist/signingKey.js.map +1 -1
- package/dist/ui/assets/index-BLikvo1E.js +18 -0
- package/dist/ui/assets/index-DKah8G4b.css +1 -0
- package/dist/ui/index.html +2 -2
- package/package.json +11 -8
- package/dist/ui/assets/index-CydLXRvo.js +0 -18
- package/dist/ui/assets/index-y3LME-Gv.css +0 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2026 Fells Code, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
* See LICENSE file in the project root for full license information
|
|
5
|
+
*/
|
|
6
|
+
/** The stylesheet's light palette (ui/src/styles.css), which unset colors fall back to. */
|
|
7
|
+
const DEFAULT_COLORS = {
|
|
8
|
+
primary: '#1f4fd1',
|
|
9
|
+
onPrimary: '#ffffff',
|
|
10
|
+
background: '#f5f6f8',
|
|
11
|
+
surface: '#ffffff',
|
|
12
|
+
text: '#1a1d21',
|
|
13
|
+
muted: '#4a515b',
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The pairs the hosted pages draw. Text needs 4.5:1 (WCAG 1.4.3). The primary color is also
|
|
17
|
+
* the focus ring on the page background, which needs 3:1 (1.4.11).
|
|
18
|
+
*/
|
|
19
|
+
const PAIRS = [
|
|
20
|
+
{ foreground: 'text', background: 'background', minimum: 4.5 },
|
|
21
|
+
{ foreground: 'text', background: 'surface', minimum: 4.5 },
|
|
22
|
+
{ foreground: 'muted', background: 'background', minimum: 4.5 },
|
|
23
|
+
{ foreground: 'muted', background: 'surface', minimum: 4.5 },
|
|
24
|
+
{ foreground: 'onPrimary', background: 'primary', minimum: 4.5 },
|
|
25
|
+
{ foreground: 'primary', background: 'surface', minimum: 4.5 },
|
|
26
|
+
{ foreground: 'primary', background: 'background', minimum: 3 },
|
|
27
|
+
];
|
|
28
|
+
function channel(value) {
|
|
29
|
+
const srgb = value / 255;
|
|
30
|
+
return srgb <= 0.04045 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
|
|
31
|
+
}
|
|
32
|
+
function luminance(hex) {
|
|
33
|
+
const digits = hex.slice(1);
|
|
34
|
+
// An 8-digit color's alpha is ignored: the check reads it as opaque.
|
|
35
|
+
const full = digits.length === 3 ? [...digits].map((digit) => digit + digit).join('') : digits.slice(0, 6);
|
|
36
|
+
const [r, g, b] = [0, 2, 4].map((index) => channel(parseInt(full.slice(index, index + 2), 16)));
|
|
37
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
38
|
+
}
|
|
39
|
+
export function contrastRatio(a, b) {
|
|
40
|
+
const [light, dark] = [luminance(a), luminance(b)].sort((x, y) => y - x);
|
|
41
|
+
return (light + 0.05) / (dark + 0.05);
|
|
42
|
+
}
|
|
43
|
+
/** The color pairs a branded palette leaves below WCAG 2.2 AA, as readable lines. */
|
|
44
|
+
export function brandingContrastProblems(hostedUi) {
|
|
45
|
+
const colors = hostedUi?.colors;
|
|
46
|
+
if (!colors || Object.keys(colors).length === 0) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const palette = { ...DEFAULT_COLORS, ...colors };
|
|
50
|
+
return PAIRS.flatMap(({ foreground, background, minimum }) => {
|
|
51
|
+
const ratio = contrastRatio(palette[foreground], palette[background]);
|
|
52
|
+
return ratio < minimum
|
|
53
|
+
? [
|
|
54
|
+
`${foreground} ${palette[foreground]} on ${background} ${palette[background]} is ${ratio.toFixed(2)}:1, needs ${minimum}:1`,
|
|
55
|
+
]
|
|
56
|
+
: [];
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=brandingContrast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brandingContrast.js","sourceRoot":"","sources":["../src/brandingContrast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { errors, Provider } from 'oidc-provider';
|
|
2
|
+
import type { OidcApiClient } from './apiClient.js';
|
|
3
|
+
/** RFC 6749 section 5.2, with the 500 the library answers `server_error` with. */
|
|
4
|
+
export declare function claimsChangedError(): errors.OIDCProviderError;
|
|
5
|
+
/**
|
|
6
|
+
* A role or membership can change between the account read that built a token and the API's
|
|
7
|
+
* sign, and the API then refuses with `claims_mismatch`. The token is built again from a fresh
|
|
8
|
+
* read and signed once more. A second mismatch fails the request as `server_error`; every other
|
|
9
|
+
* refusal is left as it was.
|
|
10
|
+
*
|
|
11
|
+
* ID tokens (and signed userinfo) copy the account's claims when they are created, so those
|
|
12
|
+
* are swapped in place. An access token reads them again on `save` through `extraTokenClaims`,
|
|
13
|
+
* and the record a failed `save` stored under its jti is overwritten by the retry.
|
|
14
|
+
*/
|
|
15
|
+
export declare function retryOnClaimsMismatch(provider: Provider, client: OidcApiClient): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2026 Fells Code, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
* See LICENSE file in the project root for full license information
|
|
5
|
+
*/
|
|
6
|
+
import { errors, Provider } from 'oidc-provider';
|
|
7
|
+
import { accountClaimsOf, providerAccountOf, withAccount } from './accountClaims.js';
|
|
8
|
+
import { OidcSignRefusedError } from './errors.js';
|
|
9
|
+
import { currentRequestContext } from './requestContext.js';
|
|
10
|
+
function isClaimsMismatch(error) {
|
|
11
|
+
return error instanceof OidcSignRefusedError && error.code === 'claims_mismatch';
|
|
12
|
+
}
|
|
13
|
+
/** RFC 6749 section 5.2, with the 500 the library answers `server_error` with. */
|
|
14
|
+
export function claimsChangedError() {
|
|
15
|
+
const error = new errors.OIDCProviderError(500, 'server_error');
|
|
16
|
+
error.expose = true;
|
|
17
|
+
error.error_description = 'the account changed while the token was being issued, try again';
|
|
18
|
+
return error;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Reads the account again for the session and client the request serves, and puts the new
|
|
22
|
+
* claims on the account the library loaded. Returns the claims it replaced, or undefined when
|
|
23
|
+
* the API no longer describes the account.
|
|
24
|
+
*/
|
|
25
|
+
async function rereadAccount(client, ctx) {
|
|
26
|
+
const account = ctx?.oidc?.account;
|
|
27
|
+
const previous = providerAccountOf(account);
|
|
28
|
+
const clientId = ctx?.oidc?.client?.clientId;
|
|
29
|
+
const sessionId = currentRequestContext()?.sessionId;
|
|
30
|
+
if (!account || !previous || !clientId || !sessionId) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
const fresh = await client.account(account.accountId, { clientId, sessionId });
|
|
34
|
+
if (!fresh || fresh.sub !== previous.sub) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
withAccount(account, fresh);
|
|
38
|
+
return { previous, fresh };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A role or membership can change between the account read that built a token and the API's
|
|
42
|
+
* sign, and the API then refuses with `claims_mismatch`. The token is built again from a fresh
|
|
43
|
+
* read and signed once more. A second mismatch fails the request as `server_error`; every other
|
|
44
|
+
* refusal is left as it was.
|
|
45
|
+
*
|
|
46
|
+
* ID tokens (and signed userinfo) copy the account's claims when they are created, so those
|
|
47
|
+
* are swapped in place. An access token reads them again on `save` through `extraTokenClaims`,
|
|
48
|
+
* and the record a failed `save` stored under its jti is overwritten by the retry.
|
|
49
|
+
*/
|
|
50
|
+
export function retryOnClaimsMismatch(provider, client) {
|
|
51
|
+
async function retrying(ctx, attempt, rebuild) {
|
|
52
|
+
try {
|
|
53
|
+
return await attempt();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (!isClaimsMismatch(error)) {
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
const reread = await rereadAccount(client, ctx);
|
|
60
|
+
if (!reread) {
|
|
61
|
+
throw claimsChangedError();
|
|
62
|
+
}
|
|
63
|
+
rebuild(reread);
|
|
64
|
+
try {
|
|
65
|
+
return await attempt();
|
|
66
|
+
}
|
|
67
|
+
catch (retryError) {
|
|
68
|
+
throw isClaimsMismatch(retryError) ? claimsChangedError() : retryError;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const idToken = provider.IdToken.prototype;
|
|
73
|
+
const issue = idToken.issue;
|
|
74
|
+
idToken.issue = function (...args) {
|
|
75
|
+
return retrying(this.ctx ?? Provider.ctx, () => issue.apply(this, args), ({ previous, fresh }) => {
|
|
76
|
+
for (const key of Reflect.ownKeys(accountClaimsOf(previous))) {
|
|
77
|
+
if (key !== 'sub') {
|
|
78
|
+
delete this.available[key];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
Object.assign(this.available, accountClaimsOf(fresh));
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
const accessToken = provider.AccessToken.prototype;
|
|
85
|
+
const save = accessToken.save;
|
|
86
|
+
accessToken.save = function (...args) {
|
|
87
|
+
return retrying(Provider.ctx, () => save.apply(this, args), () => undefined);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=claimsMismatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimsMismatch.js","sourceRoot":"","sources":["../src/claimsMismatch.ts"],"names":[],"mappings":"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"}
|
package/dist/createOidcEdge.d.ts
CHANGED
|
@@ -28,6 +28,11 @@ export interface OidcEdgeOptions {
|
|
|
28
28
|
* `trust proxy` set to match.
|
|
29
29
|
*/
|
|
30
30
|
trustProxy?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* How often to re-read the API's provider keys, so a rotation is picked up. A key the API
|
|
33
|
+
* refuses as unknown reloads them at once as well. `0` turns the timer off.
|
|
34
|
+
*/
|
|
35
|
+
signingKeyRefreshMs?: number;
|
|
31
36
|
/** `false` keeps the adapter on its bundled route manifest. */
|
|
32
37
|
fetchAdapterManifest?: boolean;
|
|
33
38
|
/** The built hosted pages. Defaults to the copy this package ships in `dist/ui`. */
|
package/dist/createOidcEdge.js
CHANGED
|
@@ -8,7 +8,9 @@ import { fileURLToPath } from 'node:url';
|
|
|
8
8
|
import { createSeamlessAuthServer } from '@seamless-auth/express';
|
|
9
9
|
import express from 'express';
|
|
10
10
|
import Provider from 'oidc-provider';
|
|
11
|
+
import { releaseAuthorizationClaims } from './accountClaims.js';
|
|
11
12
|
import { OidcApiClient } from './apiClient.js';
|
|
13
|
+
import { retryOnClaimsMismatch } from './claimsMismatch.js';
|
|
12
14
|
import { verifyClientSecrets } from './clientSecrets.js';
|
|
13
15
|
import { EdgeConfigCache } from './configCache.js';
|
|
14
16
|
import { deviceFlowMiddleware } from './deviceFlow.js';
|
|
@@ -21,8 +23,9 @@ import { buildProviderConfiguration, PROVIDER_COOKIE_NAMES } from './providerCon
|
|
|
21
23
|
import { createRateLimiter } from './rateLimit.js';
|
|
22
24
|
import { revokeSessionOnRefreshReuse } from './refreshReuse.js';
|
|
23
25
|
import { runWithRequestContext } from './requestContext.js';
|
|
26
|
+
import { formPostRefusedRequestObjects } from './requestObjectErrors.js';
|
|
24
27
|
import { hostOnlyResumeCookie } from './resumeCookie.js';
|
|
25
|
-
import {
|
|
28
|
+
import { SigningKeyRing } from './signingKey.js';
|
|
26
29
|
import { checkApiCompatibility } from './startup.js';
|
|
27
30
|
import { auditRevocations } from './tokenAudit.js';
|
|
28
31
|
export const ADAPTER_COOKIE_NAMES = {
|
|
@@ -40,7 +43,10 @@ export async function createOidcEdge(options) {
|
|
|
40
43
|
});
|
|
41
44
|
const config = await checkApiCompatibility(client);
|
|
42
45
|
const configCache = new EdgeConfigCache(client, config);
|
|
43
|
-
const signingKeys =
|
|
46
|
+
const signingKeys = new SigningKeyRing(await client.jwks(), client);
|
|
47
|
+
if (options.signingKeyRefreshMs !== 0) {
|
|
48
|
+
signingKeys.startRefresh(options.signingKeyRefreshMs);
|
|
49
|
+
}
|
|
44
50
|
const hostedPages = {
|
|
45
51
|
uiDir: options.uiDir ?? fileURLToPath(new URL('./ui/', import.meta.url)),
|
|
46
52
|
configCache,
|
|
@@ -50,23 +56,30 @@ export async function createOidcEdge(options) {
|
|
|
50
56
|
client,
|
|
51
57
|
config,
|
|
52
58
|
configCache,
|
|
53
|
-
signingKeys,
|
|
59
|
+
signingKeys: signingKeys.providerKeys,
|
|
54
60
|
cookieKeys: options.cookieKeys,
|
|
55
61
|
renderPage,
|
|
56
62
|
adapterCookieSecret: options.adapterCookieSecret,
|
|
57
63
|
accessCookieName: ADAPTER_COOKIE_NAMES.access,
|
|
58
64
|
}));
|
|
59
65
|
leaveBackchannelLogoutToApi(provider);
|
|
66
|
+
releaseAuthorizationClaims(provider);
|
|
67
|
+
retryOnClaimsMismatch(provider, client);
|
|
68
|
+
formPostRefusedRequestObjects(provider);
|
|
60
69
|
provider.proxy = options.trustProxy === true;
|
|
61
70
|
provider.use(hostOnlyResumeCookie(PROVIDER_COOKIE_NAMES.resume, '/authorize'));
|
|
62
71
|
provider.use(verifyClientSecrets(client));
|
|
63
72
|
provider.use(revokeSessionOnRefreshReuse(client));
|
|
64
73
|
provider.use(auditRevocations(client));
|
|
65
74
|
provider.use(endFirstPartySessionOnLogout(client, Object.values(ADAPTER_COOKIE_NAMES)));
|
|
66
|
-
provider.use(acceptJwtAccessTokens(createJwtAccessTokenLookup(signingKeys, config.issuer), [
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
provider.use(acceptJwtAccessTokens(createJwtAccessTokenLookup(() => signingKeys.keys, config.issuer), ['/token/introspection', '/token/revocation']));
|
|
76
|
+
// The library publishes the keys it was started with; this serves the API's current set.
|
|
77
|
+
provider.use(async (ctx, next) => {
|
|
78
|
+
await next();
|
|
79
|
+
if (ctx.oidc?.route === 'jwks' && ctx.status === 200) {
|
|
80
|
+
ctx.body = { keys: signingKeys.publicJwks };
|
|
81
|
+
}
|
|
82
|
+
});
|
|
70
83
|
// The library answers a bare server_error and logs nothing, so this is the only trace.
|
|
71
84
|
provider.on('server_error', (_ctx, error) => {
|
|
72
85
|
console.error(`[oidc-provider] ${error.name}: ${error.message}`);
|
|
@@ -129,6 +142,29 @@ export async function createOidcEdge(options) {
|
|
|
129
142
|
];
|
|
130
143
|
router.post(`${issuerBase}/device`, ...userCodeLimiters);
|
|
131
144
|
router.use(issuerUrl.pathname, provider.callback());
|
|
145
|
+
router.use(jsonErrorHandler);
|
|
132
146
|
return { router, provider, issuer: config.issuer, config, client };
|
|
133
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Express's own handler answers HTML, with a stack trace whenever `NODE_ENV` is not
|
|
150
|
+
* production. A client error from a body parser keeps its status; anything else is logged
|
|
151
|
+
* by name and message only, and answered as a bare `server_error`.
|
|
152
|
+
*/
|
|
153
|
+
function jsonErrorHandler(error, _req, res, next) {
|
|
154
|
+
if (res.headersSent) {
|
|
155
|
+
next(error);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const status = typeof error === 'object' && error !== null && 'status' in error
|
|
159
|
+
? Number(error.status)
|
|
160
|
+
: undefined;
|
|
161
|
+
if (status !== undefined && status >= 400 && status < 500) {
|
|
162
|
+
res.status(status).json({ error: 'invalid_request' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const name = error instanceof Error ? error.name : 'Error';
|
|
166
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
167
|
+
console.error(`[oidc-provider] ${name}: ${message}`);
|
|
168
|
+
res.status(500).json({ error: 'server_error' });
|
|
169
|
+
}
|
|
134
170
|
//# sourceMappingURL=createOidcEdge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOidcEdge.js","sourceRoot":"","sources":["../src/createOidcEdge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"createOidcEdge.js","sourceRoot":"","sources":["../src/createOidcEdge.ts"],"names":[],"mappings":"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"}
|
package/dist/deviceFlow.d.ts
CHANGED
|
@@ -30,12 +30,8 @@ export declare class DevicePollThrottle {
|
|
|
30
30
|
constructor(now?: () => number);
|
|
31
31
|
check(deviceCode: string): void;
|
|
32
32
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
* provider is mounted at the issuer's path, so paths here are relative to it, and the
|
|
36
|
-
* library's router ignores case.
|
|
37
|
-
*/
|
|
38
|
-
export declare function deviceFlowMiddleware(tokenPath?: string): (ctx: KoaContextWithOIDC, next: () => Promise<unknown>) => Promise<void>;
|
|
33
|
+
/** Adds `interval` to the device authorization response. */
|
|
34
|
+
export declare function deviceFlowMiddleware(): (ctx: KoaContextWithOIDC, next: () => Promise<unknown>) => Promise<void>;
|
|
39
35
|
/** The device verification pages (RFC 8628 section 3.3), rendered by the hosted UI. */
|
|
40
36
|
export declare function createDevicePages(render: HostedPageRenderer, client: OidcApiClient): {
|
|
41
37
|
charset: "base-20";
|
package/dist/deviceFlow.js
CHANGED
|
@@ -78,17 +78,9 @@ export class DevicePollThrottle {
|
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
/**
|
|
82
|
-
|
|
83
|
-
* provider is mounted at the issuer's path, so paths here are relative to it, and the
|
|
84
|
-
* library's router ignores case.
|
|
85
|
-
*/
|
|
86
|
-
export function deviceFlowMiddleware(tokenPath = '/token') {
|
|
81
|
+
/** Adds `interval` to the device authorization response. */
|
|
82
|
+
export function deviceFlowMiddleware() {
|
|
87
83
|
return async (ctx, next) => {
|
|
88
|
-
const context = currentRequestContext();
|
|
89
|
-
if (context && ctx.method === 'POST' && ctx.path.toLowerCase() === tokenPath) {
|
|
90
|
-
context.tokenRequest = true;
|
|
91
|
-
}
|
|
92
84
|
await next();
|
|
93
85
|
if (ctx.oidc?.route === 'device_authorization' &&
|
|
94
86
|
ctx.status === 200 &&
|
package/dist/deviceFlow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceFlow.js","sourceRoot":"","sources":["../src/deviceFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,8CAA8C,CAAC;AAEhF,iFAAiF;AACjF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,wDAAwD;AACxD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAkB,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,OAA0C;IACtE,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,YAAY;QAC7B,CAAC,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CACpF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2C;IAC5E,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QACtE,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,6DAA6D,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,OAAO,kBAAkB;IACpB,MAAM,GAAG,IAAI,GAAG,EAA4C,CAAC;IAC7D,IAAI,CAAe;IAE5B,YAAY,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC9C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,uBAAuB,GAAG,IAAI;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC;YACD,8EAA8E;YAC9E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,iBAAiB;oBAAE,MAAM;gBAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,sEAAsE;QACtE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC1B,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,4BAA4B;aACvD,CAAC,CAAC;YACH,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE;YAC1B,EAAE,EAAE,GAAG;YACP,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,4BAA4B;SACzD,CAAC,CAAC;IACL,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"deviceFlow.js","sourceRoot":"","sources":["../src/deviceFlow.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
|
@@ -7,10 +7,7 @@ export declare const EnvSchema: z.ZodObject<{
|
|
|
7
7
|
SEAMLESS_JWKS_KID: z.ZodOptional<z.ZodString>;
|
|
8
8
|
SEAMLESS_COOKIE_SECRET: z.ZodString;
|
|
9
9
|
OIDC_COOKIE_KEYS: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>, z.ZodArray<z.ZodString>>;
|
|
10
|
-
TRUST_PROXY: z.ZodPipe<z.ZodDefault<z.
|
|
11
|
-
true: "true";
|
|
12
|
-
false: "false";
|
|
13
|
-
}>>, z.ZodTransform<boolean, "true" | "false">>;
|
|
10
|
+
TRUST_PROXY: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<number | false | string[], string>>;
|
|
14
11
|
}, z.core.$strip>;
|
|
15
12
|
export type Env = z.infer<typeof EnvSchema>;
|
|
16
13
|
export declare function parseEnv(source?: NodeJS.ProcessEnv): Env;
|
package/dist/env.js
CHANGED
|
@@ -3,12 +3,54 @@
|
|
|
3
3
|
* Licensed under the Apache License, Version 2.0
|
|
4
4
|
* See LICENSE file in the project root for full license information
|
|
5
5
|
*/
|
|
6
|
+
import { isIP } from 'node:net';
|
|
6
7
|
import { z } from 'zod';
|
|
7
8
|
const SECRET_MIN_LENGTH = 32;
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
// Express's own names for the private ranges, which `trust proxy` accepts in a list.
|
|
10
|
+
const NAMED_RANGES = new Set(['loopback', 'linklocal', 'uniquelocal']);
|
|
11
|
+
function isProxyAddress(entry) {
|
|
12
|
+
if (NAMED_RANGES.has(entry)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
const [address = '', prefix, extra] = entry.split('/');
|
|
16
|
+
const version = isIP(address);
|
|
17
|
+
if (version === 0 || extra !== undefined) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (prefix === undefined) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const bits = Number(prefix);
|
|
24
|
+
return /^\d+$/.test(prefix) && bits <= (version === 4 ? 32 : 128);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Express's `trust proxy`: `false`, the number of proxies in front of this service, or the
|
|
28
|
+
* addresses and subnets of the ones it trusts. `true` keeps its old meaning of one proxy.
|
|
29
|
+
*/
|
|
30
|
+
const trustProxy = z
|
|
31
|
+
.string()
|
|
10
32
|
.default('false')
|
|
11
|
-
.transform((value) =>
|
|
33
|
+
.transform((value, ctx) => {
|
|
34
|
+
const trimmed = value.trim();
|
|
35
|
+
if (trimmed === '' || trimmed === 'false' || trimmed === '0') {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (trimmed === 'true') {
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
if (/^\d+$/.test(trimmed)) {
|
|
42
|
+
return Number(trimmed);
|
|
43
|
+
}
|
|
44
|
+
const entries = trimmed
|
|
45
|
+
.split(',')
|
|
46
|
+
.map((entry) => entry.trim())
|
|
47
|
+
.filter(Boolean);
|
|
48
|
+
if (entries.length === 0 || !entries.every(isProxyAddress)) {
|
|
49
|
+
ctx.addIssue({ code: 'custom', message: 'expected a hop count or addresses and subnets' });
|
|
50
|
+
return z.NEVER;
|
|
51
|
+
}
|
|
52
|
+
return entries;
|
|
53
|
+
});
|
|
12
54
|
export const EnvSchema = z.object({
|
|
13
55
|
PORT: z.coerce.number().int().min(1).max(65535).default(5314),
|
|
14
56
|
SEAMLESS_API_URL: z.url(),
|
|
@@ -23,7 +65,7 @@ export const EnvSchema = z.object({
|
|
|
23
65
|
.map((key) => key.trim())
|
|
24
66
|
.filter(Boolean))
|
|
25
67
|
.pipe(z.array(z.string().min(SECRET_MIN_LENGTH)).min(1)),
|
|
26
|
-
TRUST_PROXY:
|
|
68
|
+
TRUST_PROXY: trustProxy,
|
|
27
69
|
});
|
|
28
70
|
export function parseEnv(source = process.env) {
|
|
29
71
|
const parsed = EnvSchema.safeParse(source);
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,aAAa,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Configuration, KoaContextWithOIDC } from 'oidc-provider';
|
|
2
|
+
import type { HostedPageRenderer } from './hostedPages.js';
|
|
3
|
+
type ErrorOut = Parameters<NonNullable<Configuration['renderError']>>[1];
|
|
4
|
+
/**
|
|
5
|
+
* The page for an error the provider cannot send back to the app: an unknown client, an
|
|
6
|
+
* unregistered redirect_uri or post_logout_redirect_uri, a broken id_token_hint. Only the
|
|
7
|
+
* code and description go to the page, as data the UI renders as text. `state` is left out.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createErrorPage(render: HostedPageRenderer): (ctx: KoaContextWithOIDC, out: ErrorOut) => Promise<void>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2026 Fells Code, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
* See LICENSE file in the project root for full license information
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The page for an error the provider cannot send back to the app: an unknown client, an
|
|
8
|
+
* unregistered redirect_uri or post_logout_redirect_uri, a broken id_token_hint. Only the
|
|
9
|
+
* code and description go to the page, as data the UI renders as text. `state` is left out.
|
|
10
|
+
*/
|
|
11
|
+
export function createErrorPage(render) {
|
|
12
|
+
return async (ctx, out) => {
|
|
13
|
+
const error = typeof out.error === 'string' ? out.error : 'server_error';
|
|
14
|
+
// The library's own text for an unexposed error is "oops! something went wrong".
|
|
15
|
+
const description = error !== 'server_error' && typeof out.error_description === 'string'
|
|
16
|
+
? out.error_description
|
|
17
|
+
: 'Something went wrong on our side.';
|
|
18
|
+
const { html, headers } = await render({ view: 'error', error, description });
|
|
19
|
+
ctx.set(headers);
|
|
20
|
+
ctx.type = 'html';
|
|
21
|
+
ctx.body = html;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=errorPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorPage.js","sourceRoot":"","sources":["../src/errorPage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0B;IACxD,OAAO,KAAK,EAAE,GAAuB,EAAE,GAAa,EAAiB,EAAE;QACrE,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;QACzE,iFAAiF;QACjF,MAAM,WAAW,GACf,KAAK,KAAK,cAAc,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;YACnE,CAAC,CAAC,GAAG,CAAC,iBAAiB;YACvB,CAAC,CAAC,mCAAmC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9E,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;QAClB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/hostedPages.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export declare function brandingFor(appName: string, hostedUi: HostedUi | undefi
|
|
|
37
37
|
export type HostedPageData = Record<string, unknown> & {
|
|
38
38
|
view: string;
|
|
39
39
|
};
|
|
40
|
+
export declare function pageTitle(appName: string, page?: HostedPageData): string;
|
|
40
41
|
export declare function renderIndex(template: string, branding: HostedBranding, nonce: string, style?: BrandingStyle, page?: HostedPageData): string;
|
|
41
42
|
export interface RenderedPage {
|
|
42
43
|
html: string;
|
package/dist/hostedPages.js
CHANGED
|
@@ -7,6 +7,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
7
7
|
import { readFileSync } from 'node:fs';
|
|
8
8
|
import { join } from 'node:path';
|
|
9
9
|
import express from 'express';
|
|
10
|
+
import { brandingContrastProblems } from './brandingContrast.js';
|
|
10
11
|
/**
|
|
11
12
|
* Paths the SPA renders. The adapter's bundled screens (`@seamless-auth/react` AuthRoutes)
|
|
12
13
|
* own most of them, and the API builds magic link and recovery URLs from some.
|
|
@@ -104,10 +105,23 @@ export function brandingFor(appName, hostedUi) {
|
|
|
104
105
|
...(hostedUi?.logoUrl ? { logoUrl: hostedUi.logoUrl } : {}),
|
|
105
106
|
};
|
|
106
107
|
}
|
|
108
|
+
/** WCAG 2.4.2: a page the provider renders is titled for what it does, not "Sign in". */
|
|
109
|
+
const PAGE_TITLES = {
|
|
110
|
+
logout: (app) => `Sign out of ${app}`,
|
|
111
|
+
signed_out: (app) => `Signed out of ${app}`,
|
|
112
|
+
device_input: (app) => `Sign in on a device with ${app}`,
|
|
113
|
+
device_confirm: (app) => `Sign in on a device with ${app}`,
|
|
114
|
+
device_done: (app) => `Device signed in with ${app}`,
|
|
115
|
+
error: (app) => `${app}: we could not continue`,
|
|
116
|
+
};
|
|
117
|
+
export function pageTitle(appName, page) {
|
|
118
|
+
const title = page ? PAGE_TITLES[page.view] : undefined;
|
|
119
|
+
return title ? title(appName) : `Sign in to ${appName}`;
|
|
120
|
+
}
|
|
107
121
|
export function renderIndex(template, branding, nonce, style, page) {
|
|
108
122
|
const head = [
|
|
109
123
|
`<meta name="seamless-csp-nonce" content="${nonce}" />`,
|
|
110
|
-
`<title
|
|
124
|
+
`<title>${escapeHtml(pageTitle(branding.appName, page))}</title>`,
|
|
111
125
|
`<script type="application/json" id="seamless-hosted">${inlineJson(branding)}</script>`,
|
|
112
126
|
...(page
|
|
113
127
|
? [`<script type="application/json" id="seamless-page">${inlineJson(page)}</script>`]
|
|
@@ -135,8 +149,17 @@ export function createHostedPageRenderer(options) {
|
|
|
135
149
|
if (!template.includes(HEAD_PLACEHOLDER)) {
|
|
136
150
|
throw new Error(`${options.uiDir}/index.html has no ${HEAD_PLACEHOLDER} placeholder`);
|
|
137
151
|
}
|
|
152
|
+
let checkedColors;
|
|
138
153
|
return async (page, formActions) => {
|
|
139
154
|
const config = await options.configCache.get();
|
|
155
|
+
const colors = JSON.stringify(config.hostedUi?.colors ?? null);
|
|
156
|
+
if (colors !== checkedColors) {
|
|
157
|
+
checkedColors = colors;
|
|
158
|
+
const problems = brandingContrastProblems(config.hostedUi);
|
|
159
|
+
if (problems.length > 0) {
|
|
160
|
+
console.warn(`[oidc-provider] hosted_ui colors fall below WCAG 2.2 AA contrast on the hosted pages: ${problems.join('; ')}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
140
163
|
const nonce = randomBytes(16).toString('base64');
|
|
141
164
|
const branding = brandingFor(config.appName, config.hostedUi);
|
|
142
165
|
return {
|
package/dist/hostedPages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostedPages.js","sourceRoot":"","sources":["../src/hostedPages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,OAAwB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"hostedPages.js","sourceRoot":"","sources":["../src/hostedPages.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,5 +16,5 @@ export { createSameOriginGuard } from './originGuard.js';
|
|
|
16
16
|
export { buildProviderConfiguration, loadExistingGrant, PROVIDER_COOKIE_NAMES, } from './providerConfig.js';
|
|
17
17
|
export type { EdgeRequestContext } from './requestContext.js';
|
|
18
18
|
export { adoptSession, bindSession, currentRequestContext, runWithRequestContext, } from './requestContext.js';
|
|
19
|
-
export { ApiSigningKey, classifyToken, signingKeysFrom, UnsignableTokenError, } from './signingKey.js';
|
|
19
|
+
export { ApiSigningKey, classifyToken, SIGNING_KEY_REFRESH_MS, SigningKeyRing, signingKeysFrom, UnsignableTokenError, } from './signingKey.js';
|
|
20
20
|
export { checkApiCompatibility } from './startup.js';
|