@gaballahtech/seba 0.2.1 → 0.5.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/ARCHITECTURE.md +4 -2
- package/CHANGELOG.md +130 -0
- package/MIGRATION.md +60 -0
- package/README.md +174 -8
- package/SECURITY.md +1 -1
- package/assets/seba-icon-favicon.png +0 -0
- package/assets/seba-icon-solid.png +0 -0
- package/assets/seba-logo-inverse.png +0 -0
- package/assets/seba-logo-monochrome.png +0 -0
- package/assets/seba-logo-primary.png +0 -0
- package/dist/assets/icons.d.ts +32 -0
- package/dist/assets/icons.d.ts.map +1 -0
- package/dist/assets/icons.js +30 -0
- package/dist/assets/icons.js.map +1 -0
- package/dist/assets/png-data.d.ts +8 -0
- package/dist/assets/png-data.d.ts.map +1 -0
- package/dist/assets/png-data.js +13 -0
- package/dist/assets/png-data.js.map +1 -0
- package/dist/browser/platform.d.ts +6 -0
- package/dist/browser/platform.d.ts.map +1 -1
- package/dist/browser/platform.js +17 -0
- package/dist/browser/platform.js.map +1 -1
- package/dist/browser/storage.d.ts +3 -2
- package/dist/browser/storage.d.ts.map +1 -1
- package/dist/browser/storage.js +26 -14
- package/dist/browser/storage.js.map +1 -1
- package/dist/cli.d.ts +61 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +223 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/client.d.ts +18 -8
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +130 -6
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +10 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +7 -2
- package/dist/core/errors.js.map +1 -1
- package/dist/core/events.d.ts +27 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +45 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +6 -1
- package/dist/core/http.js.map +1 -1
- package/dist/core/oidc.d.ts +17 -7
- package/dist/core/oidc.d.ts.map +1 -1
- package/dist/core/oidc.js +76 -27
- package/dist/core/oidc.js.map +1 -1
- package/dist/core/session.d.ts +10 -3
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +131 -20
- package/dist/core/session.js.map +1 -1
- package/dist/element.d.ts +43 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +416 -0
- package/dist/element.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/pod.d.ts +50 -0
- package/dist/pod.d.ts.map +1 -0
- package/dist/pod.js +264 -0
- package/dist/pod.js.map +1 -0
- package/dist/react/index.d.ts +52 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +87 -0
- package/dist/react/index.js.map +1 -0
- package/dist/seba.d.ts +40 -1
- package/dist/seba.d.ts.map +1 -1
- package/dist/seba.js +90 -2
- package/dist/seba.js.map +1 -1
- package/dist/types.d.ts +140 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +27 -1
package/dist/core/oidc.js
CHANGED
|
@@ -116,32 +116,32 @@ export function parseAuthorizationResponse(callbackUrl, pending) {
|
|
|
116
116
|
url = new URL(callbackUrl);
|
|
117
117
|
}
|
|
118
118
|
catch {
|
|
119
|
-
throw new SebaAuthError(`The authorization response "${callbackUrl}" is not a valid URL
|
|
119
|
+
throw new SebaAuthError(`The authorization response "${callbackUrl}" is not a valid URL.`, { stage: "authorization-response" });
|
|
120
120
|
}
|
|
121
121
|
const params = url.searchParams;
|
|
122
122
|
const providerError = params.get("error");
|
|
123
123
|
if (providerError !== null) {
|
|
124
124
|
const description = params.get("error_description");
|
|
125
125
|
throw new SebaAuthError(`The identity provider returned the error "${providerError}"` +
|
|
126
|
-
(description === null ? "." : `: ${description}`));
|
|
126
|
+
(description === null ? "." : `: ${description}`), { stage: "authorization-response" });
|
|
127
127
|
}
|
|
128
128
|
const state = params.get("state");
|
|
129
129
|
if (state === null || state !== pending.state) {
|
|
130
130
|
throw new SebaAuthError("The authorization response state does not match the pending login. " +
|
|
131
|
-
"The response was ignored; start the login again from the application.");
|
|
131
|
+
"The response was ignored; start the login again from the application.", { stage: "authorization-response-state" });
|
|
132
132
|
}
|
|
133
133
|
const issuer = params.get("iss");
|
|
134
134
|
if (issuer === null || issuer === "") {
|
|
135
135
|
throw new SebaAuthError("The authorization response does not contain the RFC 9207 \"iss\" parameter. " +
|
|
136
|
-
`Expected "${pending.issuer}". Solid-OIDC requires providers to return it; the response was rejected
|
|
136
|
+
`Expected "${pending.issuer}". Solid-OIDC requires providers to return it; the response was rejected.`, { stage: "authorization-response-iss" });
|
|
137
137
|
}
|
|
138
138
|
if (issuer !== pending.issuer) {
|
|
139
139
|
throw new SebaAuthError(`The authorization response was issued by "${issuer}", but this login was started for "${pending.issuer}". ` +
|
|
140
|
-
"This is a mix-up attempt or a misconfigured provider; the response was rejected.");
|
|
140
|
+
"This is a mix-up attempt or a misconfigured provider; the response was rejected.", { stage: "authorization-response-iss" });
|
|
141
141
|
}
|
|
142
142
|
const code = params.get("code");
|
|
143
143
|
if (code === null || code === "") {
|
|
144
|
-
throw new SebaAuthError("The authorization response does not contain an authorization code.");
|
|
144
|
+
throw new SebaAuthError("The authorization response does not contain an authorization code.", { stage: "authorization-response" });
|
|
145
145
|
}
|
|
146
146
|
return code;
|
|
147
147
|
}
|
|
@@ -156,7 +156,8 @@ export function parseAuthorizationResponse(callbackUrl, pending) {
|
|
|
156
156
|
*/
|
|
157
157
|
export async function requestTokenResponse(input) {
|
|
158
158
|
let nonce = input.nonce;
|
|
159
|
-
|
|
159
|
+
const attempts = 1 + (input.maxNonceRetries === undefined ? 1 : Math.max(0, input.maxNonceRetries));
|
|
160
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
160
161
|
const headers = {
|
|
161
162
|
"content-type": "application/x-www-form-urlencoded",
|
|
162
163
|
accept: "application/json",
|
|
@@ -174,9 +175,9 @@ export async function requestTokenResponse(input) {
|
|
|
174
175
|
const response = await httpFetch(input.tokenEndpoint, { method: "POST", headers, body: input.body.toString(), redirect: "manual" }, { fetchImpl: input.fetchImpl });
|
|
175
176
|
if (isOk(response)) {
|
|
176
177
|
const text = await readText(response, "token");
|
|
177
|
-
const body = parseJson(text, "The token response", (message) => new SebaAuthError(message));
|
|
178
|
+
const body = parseJson(text, "The token response", (message) => new SebaAuthError(message, { stage: "token-response" }));
|
|
178
179
|
if (typeof body !== "object" || body === null || Array.isArray(body)) {
|
|
179
|
-
throw new SebaAuthError("The token response is not a JSON object.");
|
|
180
|
+
throw new SebaAuthError("The token response is not a JSON object.", { stage: "token-response" });
|
|
180
181
|
}
|
|
181
182
|
return { ok: true, body: body, response };
|
|
182
183
|
}
|
|
@@ -185,7 +186,7 @@ export async function requestTokenResponse(input) {
|
|
|
185
186
|
const parsed = safeJson(text);
|
|
186
187
|
const error = typeof parsed?.["error"] === "string" ? parsed["error"] : `http_${String(response.status)}`;
|
|
187
188
|
const description = typeof parsed?.["error_description"] === "string" ? parsed["error_description"] : undefined;
|
|
188
|
-
if (error === "use_dpop_nonce" && challenge !== null && attempt
|
|
189
|
+
if (error === "use_dpop_nonce" && challenge !== null && attempt + 1 < attempts) {
|
|
189
190
|
nonce = challenge;
|
|
190
191
|
continue;
|
|
191
192
|
}
|
|
@@ -227,10 +228,11 @@ export async function exchangeAuthorizationCode(input) {
|
|
|
227
228
|
body,
|
|
228
229
|
signer: input.signer,
|
|
229
230
|
fetchImpl: input.fetchImpl,
|
|
231
|
+
...(input.maxDpopNonceRetries === undefined ? {} : { maxNonceRetries: input.maxDpopNonceRetries }),
|
|
230
232
|
});
|
|
231
233
|
if (!outcome.ok) {
|
|
232
234
|
throw new SebaAuthError(`The token endpoint rejected the authorization code with "${outcome.error}"` +
|
|
233
|
-
(outcome.description === undefined ? "." : `: ${outcome.description}`));
|
|
235
|
+
(outcome.description === undefined ? "." : `: ${outcome.description}`), { stage: "token-exchange" });
|
|
234
236
|
}
|
|
235
237
|
const tokens = parseTokenSet(outcome.body);
|
|
236
238
|
const identity = await validateIdToken({
|
|
@@ -241,6 +243,7 @@ export async function exchangeAuthorizationCode(input) {
|
|
|
241
243
|
signer: input.signer,
|
|
242
244
|
fetchImpl: input.fetchImpl,
|
|
243
245
|
requireDpopBinding: input.configuration.scopesSupported?.includes("webid") === true,
|
|
246
|
+
...(input.configuration.allowNonCompliantCnf === true ? { allowNonCompliantCnf: true } : {}),
|
|
244
247
|
...(input.expectedWebId === undefined ? {} : { expectedWebId: input.expectedWebId }),
|
|
245
248
|
...(input.jwks === undefined ? {} : { jwks: input.jwks }),
|
|
246
249
|
});
|
|
@@ -259,7 +262,7 @@ export function parseTokenSet(body) {
|
|
|
259
262
|
const tokenType = requireString(body["token_type"], "token_type");
|
|
260
263
|
if (tokenType.toLowerCase() !== "dpop") {
|
|
261
264
|
throw new SebaAuthError(`The provider returned token_type "${tokenType}", but SEBA requires DPoP-bound tokens. ` +
|
|
262
|
-
"The token was discarded; check that the provider supports DPoP.");
|
|
265
|
+
"The token was discarded; check that the provider supports DPoP.", { stage: "token-response" });
|
|
263
266
|
}
|
|
264
267
|
const idToken = requireString(body["id_token"], "id_token");
|
|
265
268
|
const tokens = { accessToken, tokenType: "DPoP", idToken };
|
|
@@ -283,10 +286,24 @@ export function parseTokenSet(body) {
|
|
|
283
286
|
function requireString(value, field) {
|
|
284
287
|
if (typeof value !== "string" || value === "") {
|
|
285
288
|
throw new SebaAuthError(`The token response does not contain a usable "${field}" value. ` +
|
|
286
|
-
"SEBA requires DPoP-bound access tokens together with an ID token.");
|
|
289
|
+
"SEBA requires DPoP-bound access tokens together with an ID token.", { stage: "token-response" });
|
|
287
290
|
}
|
|
288
291
|
return value;
|
|
289
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* Copy the user's compliance-tolerance opt-ins onto a freshly discovered provider
|
|
295
|
+
* configuration, so every token-validation path (login, restore, refresh) honours
|
|
296
|
+
* flags that were declared on {@link SebaConfig} instead of being silently dropped.
|
|
297
|
+
* Only `true` values are copied; omitempty otherwise.
|
|
298
|
+
*/
|
|
299
|
+
export function applyComplianceTolerances(configuration, tolerances) {
|
|
300
|
+
if (tolerances?.allowNonCompliantAudience === true) {
|
|
301
|
+
configuration.allowNonCompliantAudience = true;
|
|
302
|
+
}
|
|
303
|
+
if (tolerances?.allowNonCompliantCnf === true) {
|
|
304
|
+
configuration.allowNonCompliantCnf = true;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
290
307
|
/**
|
|
291
308
|
* Validate an ID token and derive the authenticated identity.
|
|
292
309
|
*
|
|
@@ -296,6 +313,20 @@ function requireString(value, field) {
|
|
|
296
313
|
*
|
|
297
314
|
* @param input - Token, provider configuration, client identity and expectations.
|
|
298
315
|
*/
|
|
316
|
+
let nonCompliantAudienceWarned = false;
|
|
317
|
+
export function hasNonCompliantAudienceWarned() {
|
|
318
|
+
return nonCompliantAudienceWarned;
|
|
319
|
+
}
|
|
320
|
+
export function setNonCompliantAudienceWarned(value) {
|
|
321
|
+
nonCompliantAudienceWarned = value;
|
|
322
|
+
}
|
|
323
|
+
let nonCompliantCnfWarned = false;
|
|
324
|
+
export function hasNonCompliantCnfWarned() {
|
|
325
|
+
return nonCompliantCnfWarned;
|
|
326
|
+
}
|
|
327
|
+
export function setNonCompliantCnfWarned(value) {
|
|
328
|
+
nonCompliantCnfWarned = value;
|
|
329
|
+
}
|
|
299
330
|
export async function validateIdToken(input) {
|
|
300
331
|
const jwks = input.jwks ?? createJwks(input.configuration.jwksUri, input.fetchImpl);
|
|
301
332
|
let payload;
|
|
@@ -311,41 +342,49 @@ export async function validateIdToken(input) {
|
|
|
311
342
|
}
|
|
312
343
|
catch (error) {
|
|
313
344
|
if (error instanceof joseErrors.JOSEError) {
|
|
314
|
-
throw new SebaAuthError(`The ID token failed validation: ${error.message}.`, { cause: error });
|
|
345
|
+
throw new SebaAuthError(`The ID token failed validation: ${error.message}.`, { cause: error, stage: "id-token-signature" });
|
|
315
346
|
}
|
|
316
347
|
if (error instanceof SebaError) {
|
|
317
348
|
throw error;
|
|
318
349
|
}
|
|
319
|
-
throw new SebaAuthError("The ID token could not be verified.", { cause: error });
|
|
350
|
+
throw new SebaAuthError("The ID token could not be verified.", { cause: error, stage: "id-token-signature" });
|
|
320
351
|
}
|
|
321
352
|
const audience = payload["aud"];
|
|
322
353
|
const audiences = Array.isArray(audience) ? audience : [audience];
|
|
323
354
|
const azp = payload["azp"];
|
|
324
355
|
if (azp !== undefined && azp !== input.clientId) {
|
|
325
|
-
throw new SebaAuthError(`The ID token was issued to authorized party "${String(azp)}", not to this client ("${input.clientId}")
|
|
356
|
+
throw new SebaAuthError(`The ID token was issued to authorized party "${String(azp)}", not to this client ("${input.clientId}").`, { stage: "id-token-azp" });
|
|
326
357
|
}
|
|
327
358
|
if (audiences.length > 1 && azp === undefined) {
|
|
328
|
-
throw new SebaAuthError("The ID token has multiple audiences but no \"azp\" claim.");
|
|
359
|
+
throw new SebaAuthError("The ID token has multiple audiences but no \"azp\" claim.", { stage: "id-token-azp" });
|
|
329
360
|
}
|
|
330
361
|
const solidRequired = input.configuration.scopesSupported?.includes("webid") === true;
|
|
331
362
|
if (solidRequired && !audiences.includes("solid")) {
|
|
332
|
-
|
|
363
|
+
if (!input.configuration.allowNonCompliantAudience) {
|
|
364
|
+
throw new SebaAuthError("The ID token audience does not include \"solid\". Solid-OIDC requires it when the provider advertises the webid scope.", { stage: "id-token-audience" });
|
|
365
|
+
}
|
|
366
|
+
if (!hasNonCompliantAudienceWarned()) {
|
|
367
|
+
setNonCompliantAudienceWarned(true);
|
|
368
|
+
console.warn("[SEBA] WARNING: Accepting an ID token without \"solid\" in aud because " +
|
|
369
|
+
"allowNonCompliantAudience is enabled. This weakens Solid-OIDC §8.1 audience " +
|
|
370
|
+
"guarantees. Disable this flag once your provider is compliant.");
|
|
371
|
+
}
|
|
333
372
|
}
|
|
334
373
|
if (input.nonce !== undefined && payload["nonce"] !== input.nonce) {
|
|
335
|
-
throw new SebaAuthError("The ID token nonce does not match the login that was started.");
|
|
374
|
+
throw new SebaAuthError("The ID token nonce does not match the login that was started.", { stage: "id-token-nonce" });
|
|
336
375
|
}
|
|
337
376
|
const issuedAt = payload["iat"];
|
|
338
377
|
if (typeof issuedAt !== "number" || !Number.isFinite(issuedAt)) {
|
|
339
|
-
throw new SebaAuthError("The ID token has no usable \"iat\" claim.");
|
|
378
|
+
throw new SebaAuthError("The ID token has no usable \"iat\" claim.", { stage: "id-token-iat" });
|
|
340
379
|
}
|
|
341
380
|
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
342
381
|
if (issuedAt > nowSeconds + CLOCK_TOLERANCE_SECONDS) {
|
|
343
|
-
throw new SebaAuthError("The ID token was issued in the future; check the device clock.");
|
|
382
|
+
throw new SebaAuthError("The ID token was issued in the future; check the device clock.", { stage: "id-token-iat" });
|
|
344
383
|
}
|
|
345
384
|
await checkDpopBinding(payload, input);
|
|
346
385
|
const subject = payload["sub"];
|
|
347
386
|
if (typeof subject !== "string" || subject === "") {
|
|
348
|
-
throw new SebaAuthError("The ID token has no usable \"sub\" claim.");
|
|
387
|
+
throw new SebaAuthError("The ID token has no usable \"sub\" claim.", { stage: "id-token-sub" });
|
|
349
388
|
}
|
|
350
389
|
if (input.expectedSubject !== undefined && subject !== input.expectedSubject) {
|
|
351
390
|
throw new SebaAuthError("The ID token subject does not match the stored session.");
|
|
@@ -353,7 +392,7 @@ export async function validateIdToken(input) {
|
|
|
353
392
|
const webId = extractWebId(payload, subject);
|
|
354
393
|
if (input.expectedWebId !== undefined && webId !== input.expectedWebId) {
|
|
355
394
|
throw new SebaAuthError(`The provider authenticated "${webId}", but this login requested "${input.expectedWebId}". ` +
|
|
356
|
-
"The session was not created.");
|
|
395
|
+
"The session was not created.", { stage: "id-token-webid" });
|
|
357
396
|
}
|
|
358
397
|
return { webId, issuer: input.configuration.issuer, subject };
|
|
359
398
|
}
|
|
@@ -364,18 +403,28 @@ async function checkDpopBinding(payload, input) {
|
|
|
364
403
|
: undefined;
|
|
365
404
|
if (boundThumbprint !== undefined) {
|
|
366
405
|
if (input.signer === undefined) {
|
|
367
|
-
throw new SebaAuthError("The ID token is bound to a DPoP key that is not available locally.");
|
|
406
|
+
throw new SebaAuthError("The ID token is bound to a DPoP key that is not available locally.", { stage: "id-token-cnf-binding" });
|
|
368
407
|
}
|
|
369
408
|
const thumbprint = await input.signer.thumbprint();
|
|
370
409
|
if (boundThumbprint !== thumbprint) {
|
|
371
410
|
throw new SebaAuthError("The ID token is bound to a different DPoP key than the one used for this session. " +
|
|
372
|
-
"The token was discarded.");
|
|
411
|
+
"The token was discarded.", { stage: "id-token-cnf-binding" });
|
|
373
412
|
}
|
|
374
413
|
return;
|
|
375
414
|
}
|
|
376
415
|
if (input.requireDpopBinding === true) {
|
|
416
|
+
if (input.allowNonCompliantCnf === true) {
|
|
417
|
+
if (!hasNonCompliantCnfWarned()) {
|
|
418
|
+
setNonCompliantCnfWarned(true);
|
|
419
|
+
console.warn("[SEBA] WARNING: Accepting an ID token without \"cnf.jkt\" because " +
|
|
420
|
+
"allowNonCompliantCnf is enabled. This weakens Solid-OIDC §8.1 DPoP-binding " +
|
|
421
|
+
"guarantees on the ID token; DPoP proofs remain mandatory on every request. " +
|
|
422
|
+
"Disable this flag once your provider is compliant.");
|
|
423
|
+
}
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
377
426
|
throw new SebaAuthError("The ID token is not bound to a DPoP key (\"cnf.jkt\"), but the provider advertises the webid scope. " +
|
|
378
|
-
"Solid-OIDC requires DPoP-bound tokens.");
|
|
427
|
+
"Solid-OIDC requires DPoP-bound tokens.", { stage: "id-token-cnf-binding" });
|
|
379
428
|
}
|
|
380
429
|
}
|
|
381
430
|
function extractWebId(payload, subject) {
|
|
@@ -387,7 +436,7 @@ function extractWebId(payload, subject) {
|
|
|
387
436
|
}
|
|
388
437
|
catch {
|
|
389
438
|
throw new SebaAuthError(`The ID token identifies the user as "${candidate}", which is not an absolute URL. ` +
|
|
390
|
-
"A WebID must be an https URL; the session was not created.");
|
|
439
|
+
"A WebID must be an https URL; the session was not created.", { stage: "id-token-webid" });
|
|
391
440
|
}
|
|
392
441
|
if (url.protocol !== "https:" && !(url.protocol === "http:" && isLoopbackHost(url.hostname))) {
|
|
393
442
|
throw new SebaAuthError(`The ID token identifies the user as "${candidate}", which does not use https. ` +
|
package/dist/core/oidc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/core/oidc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/core/oidc.ts"],"names":[],"mappings":"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"}
|
package/dist/core/session.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - transient failures never clear a still-valid refresh token.
|
|
11
11
|
*/
|
|
12
12
|
import { type Identity } from "./oidc.js";
|
|
13
|
-
import type { DPoPSigner, OIDCConfiguration, PersistedKey, Session, SessionStorageAdapter, TokenSet } from "../types.js";
|
|
13
|
+
import type { DPoPSigner, OIDCConfiguration, PersistedKey, Session, SessionChangeListener, SessionStorageAdapter, TokenSet } from "../types.js";
|
|
14
14
|
/** Refresh an access token this long before it expires (milliseconds). */
|
|
15
15
|
export declare const EXPIRY_SKEW_MS = 30000;
|
|
16
16
|
/** A logged in session held in memory. */
|
|
@@ -25,8 +25,8 @@ export interface SessionState {
|
|
|
25
25
|
readonly key: PersistedKey;
|
|
26
26
|
/** Client identifier the session belongs to. */
|
|
27
27
|
readonly clientId: string;
|
|
28
|
-
/** Discovery metadata used for refresh and revocation. */
|
|
29
|
-
readonly configuration: OIDCConfiguration;
|
|
28
|
+
/** Discovery metadata used for refresh and revocation; `null` for sessions resumed without discovery. */
|
|
29
|
+
readonly configuration: OIDCConfiguration | null;
|
|
30
30
|
/** Access token expiry (epoch milliseconds), or `null` when unknown. */
|
|
31
31
|
readonly expiresAt: number | null;
|
|
32
32
|
}
|
|
@@ -40,8 +40,15 @@ export interface SessionManagerOptions {
|
|
|
40
40
|
readonly fetchImpl: typeof fetch;
|
|
41
41
|
/** Re-discover a provider when restoring a session. */
|
|
42
42
|
readonly discover: (issuer: string) => Promise<OIDCConfiguration>;
|
|
43
|
+
/**
|
|
44
|
+
* How many `use_dpop_nonce` challenges the token endpoint may issue before giving up.
|
|
45
|
+
* @defaultValue 1
|
|
46
|
+
*/
|
|
47
|
+
readonly maxDpopNonceRetries?: number;
|
|
43
48
|
/** Non-sensitive diagnostics. */
|
|
44
49
|
readonly debug?: (message: string) => void;
|
|
50
|
+
/** Receives session transitions (`login`, `restore`, `logout`, `expired`). */
|
|
51
|
+
readonly onSessionChange?: SessionChangeListener;
|
|
45
52
|
}
|
|
46
53
|
/**
|
|
47
54
|
* Owns the current session and its persistence.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAwD,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,YAAY,EAEZ,OAAO,EACP,qBAAqB,EACrB,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB,0EAA0E;AAC1E,eAAO,MAAM,cAAc,QAAS,CAAC;AAKrC,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAwD,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,YAAY,EAEZ,OAAO,EACP,qBAAqB,EAErB,qBAAqB,EACrB,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB,0EAA0E;AAC1E,eAAO,MAAM,cAAc,QAAS,CAAC;AAKrC,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yGAAyG;IACzG,QAAQ,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjD,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;IACjC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClE;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;CAClD;AAED;;;;GAIG;AACH,qBAAa,cAAc;;gBAMb,OAAO,EAAE,qBAAqB;IAI1C,wDAAwD;IACxD,IAAI,OAAO,IAAI,YAAY,GAAG,IAAI,CAEjC;IAED,8CAA8C;IAC9C,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED;;;;OAIG;IACH,OAAO,IAAI,YAAY;IAOvB,sDAAsD;IACtD,eAAe,IAAI,OAAO,GAAG,IAAI;IAOjC;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE;QACjB,MAAM,EAAE,QAAQ,CAAC;QACjB,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,UAAU,CAAC;QACnB,GAAG,EAAE,YAAY,CAAC;QAClB,aAAa,EAAE,iBAAiB,CAAC;KAClC,GAAG,OAAO,CAAC,YAAY,CAAC;IAgDzB;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAsFxC,8EAA8E;IAC9E,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;;;;OAKG;IACG,eAAe,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6JnD;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgE7B,yDAAyD;IACnD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC,8EAA8E;IAC9E,SAAS,IAAI,OAAO;CA2CrB;AAMD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,GAAG,QAAQ,CAItF"}
|
package/dist/core/session.js
CHANGED
|
@@ -26,6 +26,7 @@ export class SessionManager {
|
|
|
26
26
|
#options;
|
|
27
27
|
#state = null;
|
|
28
28
|
#refreshing = null;
|
|
29
|
+
#expiredNotified = false;
|
|
29
30
|
constructor(options) {
|
|
30
31
|
this.#options = options;
|
|
31
32
|
}
|
|
@@ -73,27 +74,38 @@ export class SessionManager {
|
|
|
73
74
|
expiresAt: expiresAtFrom(input.tokens),
|
|
74
75
|
};
|
|
75
76
|
this.#state = state;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
77
|
+
const noRefreshToken = input.tokens.refreshToken === undefined;
|
|
78
|
+
const record = {
|
|
79
|
+
version: 1,
|
|
80
|
+
webId: state.identity.webId,
|
|
81
|
+
provider: state.identity.issuer,
|
|
82
|
+
clientId: state.clientId,
|
|
83
|
+
...(noRefreshToken
|
|
84
|
+
? {
|
|
85
|
+
// With no refresh token there is nothing else to fetch with after a
|
|
86
|
+
// reload, so the access token is stored to keep the session alive
|
|
87
|
+
// until it expires. It is never stored for refresh-token sessions.
|
|
88
|
+
accessToken: input.tokens.accessToken,
|
|
89
|
+
accessTokenExpiresAt: state.expiresAt,
|
|
90
|
+
subject: input.identity.subject,
|
|
91
|
+
}
|
|
92
|
+
: {}),
|
|
93
|
+
...(noRefreshToken ? {} : { refreshToken: input.tokens.refreshToken }),
|
|
94
|
+
key: input.key,
|
|
95
|
+
createdAt: Date.now(),
|
|
96
|
+
...(input.tokens.scope === undefined ? {} : { scope: input.tokens.scope }),
|
|
97
|
+
};
|
|
98
|
+
try {
|
|
99
|
+
await this.#options.storage.save(record);
|
|
93
100
|
}
|
|
94
|
-
|
|
95
|
-
this.#log("
|
|
101
|
+
catch (error) {
|
|
102
|
+
this.#log("session storage is unavailable; the session will not survive a reload", error);
|
|
103
|
+
}
|
|
104
|
+
if (noRefreshToken) {
|
|
105
|
+
this.#log("the provider issued no refresh token; the session is stored with its access token and expires when the token does");
|
|
96
106
|
}
|
|
107
|
+
this.#expiredNotified = false;
|
|
108
|
+
this.#emit("login");
|
|
97
109
|
return state;
|
|
98
110
|
}
|
|
99
111
|
/**
|
|
@@ -119,12 +131,58 @@ export class SessionManager {
|
|
|
119
131
|
}
|
|
120
132
|
catch (error) {
|
|
121
133
|
await this.clearLocal();
|
|
134
|
+
this.#signalExpired();
|
|
122
135
|
throw new SebaSessionExpiredError("The stored DPoP key is unusable; the session was cleared.", {
|
|
123
136
|
cause: error,
|
|
124
137
|
});
|
|
125
138
|
}
|
|
139
|
+
if (record.refreshToken === undefined) {
|
|
140
|
+
return this.#restoreWithoutRefreshToken(record, signer);
|
|
141
|
+
}
|
|
126
142
|
const configuration = await this.#options.discover(record.provider);
|
|
127
143
|
await this.#refreshWith(record, signer, configuration);
|
|
144
|
+
this.#expiredNotified = false;
|
|
145
|
+
this.#emit("restore");
|
|
146
|
+
return this.toPublicSession();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Resume a session stored without a refresh token. The stored access token is
|
|
150
|
+
* reused while it is still valid; once it expires the record is cleared with a
|
|
151
|
+
* clear error because nothing on disk can renew it.
|
|
152
|
+
*/
|
|
153
|
+
async #restoreWithoutRefreshToken(record, signer) {
|
|
154
|
+
if (record.accessToken === undefined || record.accessToken === "") {
|
|
155
|
+
await this.clearLocal();
|
|
156
|
+
this.#signalExpired();
|
|
157
|
+
throw new SebaSessionExpiredError("The stored session has no usable credential; it was cleared. Sign in again.");
|
|
158
|
+
}
|
|
159
|
+
if (record.accessTokenExpiresAt !== undefined &&
|
|
160
|
+
record.accessTokenExpiresAt !== null &&
|
|
161
|
+
Date.now() >= record.accessTokenExpiresAt - EXPIRY_SKEW_MS) {
|
|
162
|
+
await this.clearLocal();
|
|
163
|
+
this.#signalExpired();
|
|
164
|
+
throw new SebaSessionExpiredError("The stored access token has expired and the provider issued no refresh token, so the session was cleared. Sign in again.");
|
|
165
|
+
}
|
|
166
|
+
const tokens = {
|
|
167
|
+
// Only the access token matters here: sessions restored without a refresh
|
|
168
|
+
// token cannot refresh, so idToken is never read on this path.
|
|
169
|
+
tokenType: "DPoP",
|
|
170
|
+
accessToken: record.accessToken,
|
|
171
|
+
idToken: "",
|
|
172
|
+
...(record.scope === undefined ? {} : { scope: record.scope }),
|
|
173
|
+
};
|
|
174
|
+
this.#state = {
|
|
175
|
+
tokens,
|
|
176
|
+
identity: { webId: record.webId, issuer: record.provider, subject: record.subject ?? record.webId },
|
|
177
|
+
signer,
|
|
178
|
+
key: record.key,
|
|
179
|
+
clientId: this.#options.clientId,
|
|
180
|
+
configuration: null,
|
|
181
|
+
expiresAt: record.accessTokenExpiresAt ?? null,
|
|
182
|
+
};
|
|
183
|
+
this.#log("restored the session with the stored access token (the provider issued no refresh token; it expires with the token)");
|
|
184
|
+
this.#expiredNotified = false;
|
|
185
|
+
this.#emit("restore");
|
|
128
186
|
return this.toPublicSession();
|
|
129
187
|
}
|
|
130
188
|
/** Access token expiry, or `null` when the provider did not advertise one. */
|
|
@@ -138,9 +196,14 @@ export class SessionManager {
|
|
|
138
196
|
* @throws {@link SebaAuthError} when no session exists.
|
|
139
197
|
*/
|
|
140
198
|
async refreshIfNeeded(force = false) {
|
|
199
|
+
if (this.#state === null && this.#expiredNotified) {
|
|
200
|
+
throw new SebaSessionExpiredError("The session has expired. Sign in again.");
|
|
201
|
+
}
|
|
141
202
|
const state = this.require();
|
|
142
203
|
if (state.tokens.refreshToken === undefined) {
|
|
143
204
|
if (force) {
|
|
205
|
+
await this.clearLocal();
|
|
206
|
+
this.#signalExpired();
|
|
144
207
|
throw new SebaSessionExpiredError("The access token was rejected and no refresh token is available. Sign in again.");
|
|
145
208
|
}
|
|
146
209
|
return;
|
|
@@ -169,8 +232,15 @@ export class SessionManager {
|
|
|
169
232
|
const record = await this.#options.storage.load();
|
|
170
233
|
const refreshToken = state.tokens.refreshToken ?? record?.refreshToken;
|
|
171
234
|
if (refreshToken === undefined) {
|
|
235
|
+
await this.clearLocal();
|
|
236
|
+
this.#signalExpired();
|
|
172
237
|
throw new SebaSessionExpiredError("No refresh token is available. Sign in again.");
|
|
173
238
|
}
|
|
239
|
+
if (state.configuration === null) {
|
|
240
|
+
await this.clearLocal();
|
|
241
|
+
this.#signalExpired();
|
|
242
|
+
throw new SebaSessionExpiredError("No provider metadata is available for this session. Sign in again.");
|
|
243
|
+
}
|
|
174
244
|
const stored = record ?? {
|
|
175
245
|
version: 1,
|
|
176
246
|
webId: state.identity.webId,
|
|
@@ -183,6 +253,9 @@ export class SessionManager {
|
|
|
183
253
|
await this.#refreshWith(stored, state.signer, state.configuration);
|
|
184
254
|
}
|
|
185
255
|
async #refreshWith(record, signer, configuration) {
|
|
256
|
+
if (record.refreshToken === undefined) {
|
|
257
|
+
throw new SebaSessionExpiredError("No refresh token is available. Sign in again.");
|
|
258
|
+
}
|
|
186
259
|
const body = new URLSearchParams({
|
|
187
260
|
grant_type: "refresh_token",
|
|
188
261
|
refresh_token: record.refreshToken,
|
|
@@ -193,6 +266,7 @@ export class SessionManager {
|
|
|
193
266
|
body,
|
|
194
267
|
signer,
|
|
195
268
|
fetchImpl: this.#options.fetchImpl,
|
|
269
|
+
maxNonceRetries: this.#options.maxDpopNonceRetries,
|
|
196
270
|
});
|
|
197
271
|
if (!outcome.ok) {
|
|
198
272
|
if (outcome.status >= 500) {
|
|
@@ -200,6 +274,7 @@ export class SessionManager {
|
|
|
200
274
|
}
|
|
201
275
|
if (TERMINAL_REFRESH_ERRORS.has(outcome.error)) {
|
|
202
276
|
await this.clearLocal();
|
|
277
|
+
this.#signalExpired();
|
|
203
278
|
throw new SebaSessionExpiredError(`The stored session is no longer valid ("${outcome.error}"). Sign in again.`);
|
|
204
279
|
}
|
|
205
280
|
throw new SebaAuthError(`The token endpoint rejected the refresh request with "${outcome.error}"` +
|
|
@@ -215,6 +290,7 @@ export class SessionManager {
|
|
|
215
290
|
signer,
|
|
216
291
|
fetchImpl: this.#options.fetchImpl,
|
|
217
292
|
requireDpopBinding: configuration.scopesSupported?.includes("webid") === true,
|
|
293
|
+
...(configuration.allowNonCompliantCnf === true ? { allowNonCompliantCnf: true } : {}),
|
|
218
294
|
expectedWebId: record.webId,
|
|
219
295
|
});
|
|
220
296
|
}
|
|
@@ -225,6 +301,7 @@ export class SessionManager {
|
|
|
225
301
|
// repeat the failure on every restore. Network/JWKS transport errors are not
|
|
226
302
|
// SebaAuthError and keep the record.
|
|
227
303
|
await this.clearLocal();
|
|
304
|
+
this.#signalExpired();
|
|
228
305
|
throw new SebaSessionExpiredError("The refreshed ID token does not match the stored session, so the session was cleared. Sign in again.", { cause: error });
|
|
229
306
|
}
|
|
230
307
|
throw error;
|
|
@@ -266,7 +343,9 @@ export class SessionManager {
|
|
|
266
343
|
const refreshToken = state?.tokens.refreshToken ?? record?.refreshToken;
|
|
267
344
|
let configuration = state?.configuration;
|
|
268
345
|
let signer = state?.signer;
|
|
269
|
-
if (refreshToken !== undefined &&
|
|
346
|
+
if (refreshToken !== undefined &&
|
|
347
|
+
record !== null &&
|
|
348
|
+
(configuration === undefined || configuration === null || signer === undefined)) {
|
|
270
349
|
try {
|
|
271
350
|
configuration ??= await this.#options.discover(record.provider);
|
|
272
351
|
signer ??= await loadDPoPKey(record.key);
|
|
@@ -276,7 +355,12 @@ export class SessionManager {
|
|
|
276
355
|
}
|
|
277
356
|
}
|
|
278
357
|
await this.clearLocal();
|
|
358
|
+
this.#emit("logout");
|
|
279
359
|
if (refreshToken === undefined || configuration?.revocationEndpoint === undefined || signer === undefined) {
|
|
360
|
+
if (refreshToken !== undefined && configuration?.revocationEndpoint === undefined) {
|
|
361
|
+
this.#log("the provider does not advertise a revocation endpoint; the refresh token remains " +
|
|
362
|
+
"valid on the server until it expires (or is revoked out-of-band). Local state was cleared.");
|
|
363
|
+
}
|
|
280
364
|
return;
|
|
281
365
|
}
|
|
282
366
|
try {
|
|
@@ -326,6 +410,33 @@ export class SessionManager {
|
|
|
326
410
|
}
|
|
327
411
|
return state.expiresAt !== null && Date.now() >= state.expiresAt - EXPIRY_SKEW_MS;
|
|
328
412
|
}
|
|
413
|
+
/** Emit a transition; listener failures never break the session flow. */
|
|
414
|
+
#emit(reason) {
|
|
415
|
+
const listener = this.#options.onSessionChange;
|
|
416
|
+
if (listener === undefined) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
try {
|
|
420
|
+
listener({ reason, session: this.toPublicSession() });
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
// Application callbacks must not interrupt session handling.
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Emit `expired` at most once per session.
|
|
428
|
+
*
|
|
429
|
+
* The in-memory session is dropped first so the event always carries
|
|
430
|
+
* `session: null`, matching {@link SessionChangeEvent}.
|
|
431
|
+
*/
|
|
432
|
+
#signalExpired() {
|
|
433
|
+
if (this.#expiredNotified) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
this.#expiredNotified = true;
|
|
437
|
+
this.#state = null;
|
|
438
|
+
this.#emit("expired");
|
|
439
|
+
}
|
|
329
440
|
#log(message, error) {
|
|
330
441
|
if (this.#options.debug === undefined) {
|
|
331
442
|
return;
|