@atlasauth/backend 0.15.0 → 0.17.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/better-auth.d.ts +157 -0
  3. package/dist/better-auth.js +245 -0
  4. package/dist/better-auth.js.map +1 -0
  5. package/dist/botid.d.ts +70 -0
  6. package/dist/botid.js +88 -0
  7. package/dist/botid.js.map +1 -0
  8. package/dist/client/action-gallery.d.ts +215 -0
  9. package/dist/client/action-gallery.js +66 -0
  10. package/dist/client/action-gallery.js.map +1 -0
  11. package/dist/client/actions.d.ts +21 -0
  12. package/dist/client/actions.js.map +1 -1
  13. package/dist/client/attack-protection.d.ts +33 -1
  14. package/dist/client/attack-protection.js.map +1 -1
  15. package/dist/client/better-auth-imports.d.ts +205 -0
  16. package/dist/client/better-auth-imports.js +107 -0
  17. package/dist/client/better-auth-imports.js.map +1 -0
  18. package/dist/client/billing-plans.d.ts +93 -0
  19. package/dist/client/billing-plans.js +31 -0
  20. package/dist/client/billing-plans.js.map +1 -1
  21. package/dist/client/custom-oauth-providers.d.ts +243 -0
  22. package/dist/client/custom-oauth-providers.js +60 -0
  23. package/dist/client/custom-oauth-providers.js.map +1 -0
  24. package/dist/client/email-templates.d.ts +1 -1
  25. package/dist/client/email-templates.js.map +1 -1
  26. package/dist/client/index.d.ts +154 -0
  27. package/dist/client/index.js +11 -0
  28. package/dist/client/index.js.map +1 -1
  29. package/dist/client/instance-security.d.ts +70 -0
  30. package/dist/client/instance-security.js +20 -0
  31. package/dist/client/instance-security.js.map +1 -1
  32. package/dist/client/oauth-clients.d.ts +29 -2
  33. package/dist/client/oauth-clients.js.map +1 -1
  34. package/dist/client/resource-servers.d.ts +22 -2
  35. package/dist/client/resource-servers.js.map +1 -1
  36. package/dist/client/risk-based-mfa.d.ts +3 -0
  37. package/dist/client/risk-based-mfa.js.map +1 -1
  38. package/dist/client/sessions.d.ts +16 -0
  39. package/dist/client/sessions.js +15 -0
  40. package/dist/client/sessions.js.map +1 -1
  41. package/dist/client/sso-connections.d.ts +83 -0
  42. package/dist/client/sso-connections.js +29 -0
  43. package/dist/client/sso-connections.js.map +1 -1
  44. package/dist/index.d.ts +6 -2
  45. package/dist/index.js +11 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/legacy-issuers.d.ts +65 -0
  48. package/dist/legacy-issuers.js +140 -0
  49. package/dist/legacy-issuers.js.map +1 -0
  50. package/dist/oauth-resource.d.ts +81 -1
  51. package/dist/oauth-resource.js +204 -29
  52. package/dist/oauth-resource.js.map +1 -1
  53. package/dist/verify.d.ts +22 -0
  54. package/dist/verify.js +32 -0
  55. package/dist/verify.js.map +1 -1
  56. package/package.json +3 -3
@@ -16,6 +16,10 @@ import { type Jwks } from './jwks-cache';
16
16
  * which is exactly what an MCP client needs to discover how to sign in;
17
17
  * - builds the RFC 9728 protected-resource metadata document to serve at
18
18
  * `/.well-known/oauth-protected-resource` on your API's host.
19
+ * - accepts OPAQUE access tokens too (an API, client or instance set to the
20
+ * `opaque` format): with `introspection` configured, a token that is not a
21
+ * JWT is validated at Atlas's introspection endpoint (RFC 7662) with your
22
+ * API's own client credentials, and the answer is cached briefly;
19
23
  * Framework-agnostic: hand it any request with `method`, `url` and `headers`.
20
24
  */
21
25
  /** Clock skew tolerated on `exp`/`nbf` and on DPoP proof `iat`. */
@@ -52,6 +56,37 @@ export interface DpopReplayStore {
52
56
  /** Record `jti` until `expiresAt` (ms); return false when it was already seen. */
53
57
  claim(jti: string, expiresAt: number): Promise<boolean> | boolean;
54
58
  }
59
+ /**
60
+ * Server-provided DPoP nonces (RFC 9449 §8). `current()` is the nonce the API
61
+ * hands out in the `DPoP-Nonce` response header; `valid()` accepts the nonces
62
+ * still in force. A verifier given a source requires every DPoP proof to carry
63
+ * one, answering `use_dpop_nonce` (with a fresh nonce) otherwise.
64
+ */
65
+ export interface DpopNonceSource {
66
+ current(): string | Promise<string>;
67
+ valid(nonce: string): boolean | Promise<boolean>;
68
+ }
69
+ /**
70
+ * An in-process nonce source: a random nonce per window; the current and the
71
+ * previous window's nonce are accepted. Use it when one process serves the API
72
+ * (or with sticky routing); behind several processes, use
73
+ * {@link hmacDpopNonceSource} with a shared secret.
74
+ */
75
+ export declare function memoryDpopNonceSource(options?: {
76
+ windowSeconds?: number;
77
+ now?: () => number;
78
+ }): DpopNonceSource;
79
+ /**
80
+ * A stateless nonce source shared by every process holding the same secret (at
81
+ * least 32 bytes): the nonce for a window is base64url(HMAC-SHA256(secret,
82
+ * "atlas-dpop-nonce:" ‖ uint64-BE(window number))). A nonce is good in the window
83
+ * it was issued in and the next one. The derivation is the same in every Atlas
84
+ * server SDK, so services in different languages sharing the secret agree.
85
+ */
86
+ export declare function hmacDpopNonceSource(secret: string | Uint8Array, options?: {
87
+ windowSeconds?: number;
88
+ now?: () => number;
89
+ }): DpopNonceSource;
55
90
  export declare function memoryDpopReplayStore(max?: number): DpopReplayStore;
56
91
  export interface AccessTokenVerifierOptions {
57
92
  /** Your Atlas instance's issuer (frontend API origin), e.g. https://clerk.example.com. */
@@ -79,12 +114,53 @@ export interface AccessTokenVerifierOptions {
79
114
  /** The public origin of this API, for DPoP `htu` when `request.url` is a path. */
80
115
  publicOrigin?: string;
81
116
  dpopReplayStore?: DpopReplayStore;
117
+ /**
118
+ * Require a server-provided nonce in every DPoP proof (RFC 9449 §8). A proof
119
+ * without a valid one is refused with `use_dpop_nonce`; every result carries
120
+ * `dpopNonce`, to send as the `DPoP-Nonce` response header (the framework
121
+ * adapters do). See {@link memoryDpopNonceSource} / {@link hmacDpopNonceSource}.
122
+ */
123
+ dpopNonces?: DpopNonceSource;
82
124
  /** `WWW-Authenticate` realm. */
83
125
  realm?: string;
126
+ /**
127
+ * Validate opaque access tokens (and, with `introspectJwts`, JWTs too) at
128
+ * Atlas's introspection endpoint. The client must be a confidential client
129
+ * your API lists in its `introspection_client_ids` (or the client the tokens
130
+ * are issued to).
131
+ */
132
+ introspection?: IntrospectionOptions;
84
133
  fetchImpl?: typeof fetch;
85
134
  now?: () => number;
86
135
  }
87
- export type AccessTokenErrorCode = 'invalid_request' | 'invalid_token' | 'insufficient_scope' | 'invalid_dpop_proof';
136
+ export interface IntrospectionOptions {
137
+ clientId: string;
138
+ clientSecret: string;
139
+ /** Default `${issuer}/oauth2/introspect`. */
140
+ endpoint?: string;
141
+ /** How long an active answer is reused, in seconds (default 60; never past the token's `exp`). */
142
+ cacheTtlSeconds?: number;
143
+ /** How long an inactive answer is reused, in seconds (default 10; 0 disables). */
144
+ negativeCacheTtlSeconds?: number;
145
+ /** Most answers kept (default 10 000). */
146
+ cacheMax?: number;
147
+ /**
148
+ * Also introspect JWT access tokens, so a revoked grant or a banned user is
149
+ * refused before the token expires (one cached call per token). Default false:
150
+ * JWTs are verified locally.
151
+ */
152
+ introspectJwts?: boolean;
153
+ }
154
+ /**
155
+ * RFC 7662 introspection with a small TTL cache keyed by the token's SHA-256
156
+ * (the token itself is never kept). Returns the claims of an active token, or
157
+ * null for an inactive one; throws when Atlas could not be reached.
158
+ */
159
+ export declare function createIntrospector(issuer: string, options: IntrospectionOptions, deps?: {
160
+ fetchImpl?: typeof fetch;
161
+ now?: () => number;
162
+ }): (token: string) => Promise<AccessTokenClaims | null>;
163
+ export type AccessTokenErrorCode = 'invalid_request' | 'invalid_token' | 'insufficient_scope' | 'invalid_dpop_proof' | 'use_dpop_nonce';
88
164
  export type AccessTokenResult = {
89
165
  ok: true;
90
166
  claims: AccessTokenClaims;
@@ -92,6 +168,8 @@ export type AccessTokenResult = {
92
168
  subject: string;
93
169
  clientId: string | null;
94
170
  dpopBound: boolean;
171
+ /** With `dpopNonces`: send as the `DPoP-Nonce` response header. */
172
+ dpopNonce?: string;
95
173
  } | {
96
174
  ok: false;
97
175
  status: 400 | 401 | 403;
@@ -99,6 +177,8 @@ export type AccessTokenResult = {
99
177
  description: string;
100
178
  /** Set this response header verbatim. */
101
179
  wwwAuthenticate: string;
180
+ /** With `dpopNonces`: send as the `DPoP-Nonce` response header (always, on `use_dpop_nonce`). */
181
+ dpopNonce?: string;
102
182
  };
103
183
  /**
104
184
  * Build an RFC 6750 / RFC 9449 / RFC 9728 `WWW-Authenticate` challenge.
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DPOP_PROOF_MAX_AGE_SECONDS = exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS = void 0;
4
+ exports.memoryDpopNonceSource = memoryDpopNonceSource;
5
+ exports.hmacDpopNonceSource = hmacDpopNonceSource;
4
6
  exports.memoryDpopReplayStore = memoryDpopReplayStore;
7
+ exports.createIntrospector = createIntrospector;
5
8
  exports.buildWwwAuthenticate = buildWwwAuthenticate;
6
9
  exports.createAccessTokenVerifier = createAccessTokenVerifier;
7
10
  exports.verifyAccessToken = verifyAccessToken;
@@ -27,6 +30,10 @@ const algs_1 = require("./algs");
27
30
  * which is exactly what an MCP client needs to discover how to sign in;
28
31
  * - builds the RFC 9728 protected-resource metadata document to serve at
29
32
  * `/.well-known/oauth-protected-resource` on your API's host.
33
+ * - accepts OPAQUE access tokens too (an API, client or instance set to the
34
+ * `opaque` format): with `introspection` configured, a token that is not a
35
+ * JWT is validated at Atlas's introspection endpoint (RFC 7662) with your
36
+ * API's own client credentials, and the answer is cached briefly;
30
37
  * Framework-agnostic: hand it any request with `method`, `url` and `headers`.
31
38
  */
32
39
  /** Clock skew tolerated on `exp`/`nbf` and on DPoP proof `iat`. */
@@ -34,6 +41,86 @@ exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS = 5;
34
41
  /** How old a DPoP proof may be. */
35
42
  exports.DPOP_PROOF_MAX_AGE_SECONDS = 300;
36
43
  const DPOP_ALGS = ['ES256', 'ES384', 'ES512', 'RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512', 'EdDSA'];
44
+ const DEFAULT_NONCE_WINDOW_SECONDS = 300;
45
+ /**
46
+ * An in-process nonce source: a random nonce per window; the current and the
47
+ * previous window's nonce are accepted. Use it when one process serves the API
48
+ * (or with sticky routing); behind several processes, use
49
+ * {@link hmacDpopNonceSource} with a shared secret.
50
+ */
51
+ function memoryDpopNonceSource(options = {}) {
52
+ const window = (options.windowSeconds ?? DEFAULT_NONCE_WINDOW_SECONDS) * 1000;
53
+ const now = options.now ?? Date.now;
54
+ const issued = new Map();
55
+ const random = () => {
56
+ const bytes = crypto.getRandomValues(new Uint8Array(32));
57
+ let bin = '';
58
+ for (const b of bytes)
59
+ bin += String.fromCharCode(b);
60
+ return btoa(bin).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
61
+ };
62
+ const at = (epoch) => {
63
+ let n = issued.get(epoch);
64
+ if (!n) {
65
+ n = random();
66
+ issued.set(epoch, n);
67
+ for (const e of issued.keys())
68
+ if (e < epoch - 1)
69
+ issued.delete(e);
70
+ }
71
+ return n;
72
+ };
73
+ return {
74
+ current: () => at(Math.floor(now() / window)),
75
+ valid: (nonce) => {
76
+ const epoch = Math.floor(now() / window);
77
+ return nonce === at(epoch) || nonce === issued.get(epoch - 1);
78
+ },
79
+ };
80
+ }
81
+ /**
82
+ * A stateless nonce source shared by every process holding the same secret (at
83
+ * least 32 bytes): the nonce for a window is base64url(HMAC-SHA256(secret,
84
+ * "atlas-dpop-nonce:" ‖ uint64-BE(window number))). A nonce is good in the window
85
+ * it was issued in and the next one. The derivation is the same in every Atlas
86
+ * server SDK, so services in different languages sharing the secret agree.
87
+ */
88
+ function hmacDpopNonceSource(secret, options = {}) {
89
+ const key = typeof secret === 'string' ? new TextEncoder().encode(secret) : secret;
90
+ if (key.length < 32)
91
+ throw new Error('The DPoP nonce secret must be at least 32 bytes.');
92
+ const window = (options.windowSeconds ?? DEFAULT_NONCE_WINDOW_SECONDS) * 1000;
93
+ const now = options.now ?? Date.now;
94
+ const imported = crypto.subtle.importKey('raw', key, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
95
+ const at = async (epoch) => {
96
+ const prefix = new TextEncoder().encode('atlas-dpop-nonce:');
97
+ const msg = new Uint8Array(prefix.length + 8);
98
+ msg.set(prefix);
99
+ new DataView(msg.buffer).setBigUint64(prefix.length, BigInt(epoch));
100
+ const mac = new Uint8Array(await crypto.subtle.sign('HMAC', await imported, msg));
101
+ let bin = '';
102
+ for (const b of mac)
103
+ bin += String.fromCharCode(b);
104
+ return btoa(bin).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
105
+ };
106
+ const epoch = () => Math.floor(now() / window);
107
+ return {
108
+ current: () => at(epoch()),
109
+ valid: async (nonce) => {
110
+ const e = epoch();
111
+ const [a, b] = await Promise.all([at(e), at(e - 1)]);
112
+ return constantTimeEqual(nonce, a) || constantTimeEqual(nonce, b);
113
+ },
114
+ };
115
+ }
116
+ function constantTimeEqual(a, b) {
117
+ if (a.length !== b.length)
118
+ return false;
119
+ let diff = 0;
120
+ for (let i = 0; i < a.length; i++)
121
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
122
+ return diff === 0;
123
+ }
37
124
  function memoryDpopReplayStore(max = 10_000) {
38
125
  const seen = new Map();
39
126
  return {
@@ -53,6 +140,56 @@ function memoryDpopReplayStore(max = 10_000) {
53
140
  },
54
141
  };
55
142
  }
143
+ /**
144
+ * RFC 7662 introspection with a small TTL cache keyed by the token's SHA-256
145
+ * (the token itself is never kept). Returns the claims of an active token, or
146
+ * null for an inactive one; throws when Atlas could not be reached.
147
+ */
148
+ function createIntrospector(issuer, options, deps = {}) {
149
+ const endpoint = options.endpoint ?? `${issuer.replace(/\/+$/, '')}/oauth2/introspect`;
150
+ const now = deps.now ?? Date.now;
151
+ const doFetch = deps.fetchImpl ?? fetch;
152
+ const ttl = (options.cacheTtlSeconds ?? 60) * 1000;
153
+ const negativeTtl = (options.negativeCacheTtlSeconds ?? 10) * 1000;
154
+ const max = options.cacheMax ?? 10_000;
155
+ const cache = new Map();
156
+ const basic = `Basic ${btoa(`${encodeURIComponent(options.clientId)}:${encodeURIComponent(options.clientSecret)}`)}`;
157
+ return async (token) => {
158
+ const key = await sha256b64u(token);
159
+ const hit = cache.get(key);
160
+ if (hit && hit.until > now())
161
+ return hit.claims;
162
+ if (hit)
163
+ cache.delete(key);
164
+ const res = await doFetch(endpoint, {
165
+ method: 'POST',
166
+ headers: {
167
+ 'content-type': 'application/x-www-form-urlencoded',
168
+ accept: 'application/json',
169
+ authorization: basic,
170
+ },
171
+ body: new URLSearchParams({ token, token_type_hint: 'access_token' }).toString(),
172
+ });
173
+ if (!res.ok)
174
+ throw new Error(`Introspection failed with HTTP ${res.status}.`);
175
+ const body = (await res.json());
176
+ const claims = body.active === true && body.token_use !== 'refresh_token' ? body : null;
177
+ const until = claims
178
+ ? Math.min(now() + ttl, typeof claims.exp === 'number' ? claims.exp * 1000 : now() + ttl)
179
+ : now() + negativeTtl;
180
+ if (until > now()) {
181
+ cache.set(key, { claims, until });
182
+ if (cache.size > max) {
183
+ for (const [k, v] of cache)
184
+ if (v.until <= now())
185
+ cache.delete(k);
186
+ while (cache.size > max)
187
+ cache.delete(cache.keys().next().value);
188
+ }
189
+ }
190
+ return claims;
191
+ };
192
+ }
56
193
  function header(req, name) {
57
194
  const h = req.headers;
58
195
  if (typeof h.get === 'function')
@@ -118,9 +255,13 @@ function createAccessTokenVerifier(options) {
118
255
  });
119
256
  const audiences = options.audience === false ? null : typeof options.audience === 'string' ? [options.audience] : [...options.audience];
120
257
  const replay = options.dpopReplayStore ?? memoryDpopReplayStore();
258
+ const introspect = options.introspection
259
+ ? createIntrospector(issuer, options.introspection, { fetchImpl: options.fetchImpl, now: options.now })
260
+ : null;
121
261
  return async (request, extra) => {
122
262
  const required = [...(options.requiredScopes ?? []), ...(extra?.requiredScopes ?? [])];
123
263
  const scheme = options.requireDpop ? 'DPoP' : 'Bearer';
264
+ const nonce = options.dpopNonces ? await options.dpopNonces.current() : undefined;
124
265
  const fail = (status, error, description, challengeScheme = scheme) => ({
125
266
  ok: false,
126
267
  status,
@@ -135,6 +276,7 @@ function createAccessTokenVerifier(options) {
135
276
  resourceMetadataUrl: options.resourceMetadataUrl,
136
277
  dpopAlgs: DPOP_ALGS,
137
278
  }),
279
+ ...(nonce ? { dpopNonce: nonce } : {}),
138
280
  });
139
281
  const authz = header(request, 'authorization');
140
282
  if (!authz)
@@ -144,23 +286,47 @@ function createAccessTokenVerifier(options) {
144
286
  return fail(400, 'invalid_request', 'Malformed Authorization header.');
145
287
  const presentedScheme = m[1].toLowerCase() === 'dpop' ? 'DPoP' : 'Bearer';
146
288
  const token = m[2];
147
- if (token.split('.').length !== 3)
148
- return fail(401, 'invalid_token', 'The access token is malformed.');
149
- const keys = await jwks.get((0, jwks_cache_1.readKid)(token));
150
- if (!keys || keys.keys.length === 0)
151
- return fail(401, 'invalid_token', 'No signing keys are available to verify the token.');
289
+ const isJwt = token.split('.').length === 3;
152
290
  let claims;
153
- try {
154
- const { payload } = await (0, jose_1.jwtVerify)(token, (0, jose_1.createLocalJWKSet)(keys), {
155
- issuer,
156
- algorithms: algs_1.ATLAS_SIGNING_ALGS,
157
- clockTolerance: exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS,
158
- currentDate: new Date(now()),
159
- });
160
- claims = payload;
291
+ if (!isJwt || (introspect && options.introspection?.introspectJwts)) {
292
+ // An opaque token (or a JWT the caller wants checked live) is validated by
293
+ // Atlas itself.
294
+ if (!introspect) {
295
+ return fail(401, 'invalid_token', 'The access token is not a JWT; configure `introspection` to accept opaque tokens.');
296
+ }
297
+ let active;
298
+ try {
299
+ active = await introspect(token);
300
+ }
301
+ catch {
302
+ return fail(401, 'invalid_token', 'The access token could not be validated right now.');
303
+ }
304
+ if (!active)
305
+ return fail(401, 'invalid_token', 'The access token is invalid or expired.');
306
+ if (active.iss !== undefined && String(active.iss).replace(/\/+$/, '') !== issuer) {
307
+ return fail(401, 'invalid_token', 'The access token was issued by another authorization server.');
308
+ }
309
+ if (typeof active.exp === 'number' && active.exp * 1000 + exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS * 1000 <= now()) {
310
+ return fail(401, 'invalid_token', 'The access token is invalid or expired.');
311
+ }
312
+ claims = active;
161
313
  }
162
- catch {
163
- return fail(401, 'invalid_token', 'The access token is invalid or expired.');
314
+ else {
315
+ const keys = await jwks.get((0, jwks_cache_1.readKid)(token));
316
+ if (!keys || keys.keys.length === 0)
317
+ return fail(401, 'invalid_token', 'No signing keys are available to verify the token.');
318
+ try {
319
+ const { payload } = await (0, jose_1.jwtVerify)(token, (0, jose_1.createLocalJWKSet)(keys), {
320
+ issuer,
321
+ algorithms: algs_1.ATLAS_SIGNING_ALGS,
322
+ clockTolerance: exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS,
323
+ currentDate: new Date(now()),
324
+ });
325
+ claims = payload;
326
+ }
327
+ catch {
328
+ return fail(401, 'invalid_token', 'The access token is invalid or expired.');
329
+ }
164
330
  }
165
331
  if (claims.token_use !== undefined && claims.token_use !== 'access_token') {
166
332
  return fail(401, 'invalid_token', 'The token is not an access token.');
@@ -190,9 +356,10 @@ function createAccessTokenVerifier(options) {
190
356
  publicOrigin: options.publicOrigin,
191
357
  now: now(),
192
358
  replay,
359
+ nonces: options.dpopNonces,
193
360
  });
194
361
  if (proofError)
195
- return fail(401, 'invalid_dpop_proof', proofError, 'DPoP');
362
+ return fail(401, proofError.code, proofError.message, 'DPoP');
196
363
  }
197
364
  const scopes = (claims.scope ?? '').split(' ').filter(Boolean);
198
365
  const granted = new Set([...scopes, ...(claims.permissions ?? [])]);
@@ -207,27 +374,29 @@ function createAccessTokenVerifier(options) {
207
374
  subject: claims.sub,
208
375
  clientId: (claims.client_id ?? claims.azp ?? null),
209
376
  dpopBound: !!jkt,
377
+ ...(nonce ? { dpopNonce: nonce } : {}),
210
378
  };
211
379
  };
212
380
  }
213
381
  async function checkDpopProof(proof, ctx) {
382
+ const refuse = (message) => ({ code: 'invalid_dpop_proof', message });
214
383
  let jwk;
215
384
  let alg;
216
385
  try {
217
386
  const h = (0, jose_1.decodeProtectedHeader)(proof);
218
387
  if (h.typ !== 'dpop+jwt')
219
- return 'The DPoP proof must have typ dpop+jwt.';
388
+ return refuse('The DPoP proof must have typ dpop+jwt.');
220
389
  if (!h.alg || !DPOP_ALGS.includes(h.alg))
221
- return 'The DPoP proof uses an unsupported algorithm.';
390
+ return refuse('The DPoP proof uses an unsupported algorithm.');
222
391
  if (!h.jwk || typeof h.jwk !== 'object')
223
- return 'The DPoP proof must carry its public key.';
392
+ return refuse('The DPoP proof must carry its public key.');
224
393
  jwk = h.jwk;
225
394
  if ('d' in jwk || 'k' in jwk)
226
- return 'The DPoP proof key must be a public key.';
395
+ return refuse('The DPoP proof key must be a public key.');
227
396
  alg = h.alg;
228
397
  }
229
398
  catch {
230
- return 'The DPoP proof is malformed.';
399
+ return refuse('The DPoP proof is malformed.');
231
400
  }
232
401
  let payload;
233
402
  try {
@@ -235,30 +404,36 @@ async function checkDpopProof(proof, ctx) {
235
404
  ({ payload } = await (0, jose_1.jwtVerify)(proof, key, { algorithms: [alg], typ: 'dpop+jwt', currentDate: new Date(ctx.now) }));
236
405
  }
237
406
  catch {
238
- return 'The DPoP proof signature is invalid.';
407
+ return refuse('The DPoP proof signature is invalid.');
239
408
  }
240
409
  if ((await (0, jose_1.calculateJwkThumbprint)(jwk, 'sha256')) !== ctx.jkt) {
241
- return 'The DPoP proof key does not match the token binding.';
410
+ return refuse('The DPoP proof key does not match the token binding.');
242
411
  }
243
412
  if (payload.htm !== ctx.method)
244
- return 'The DPoP proof htm does not match the request method.';
413
+ return refuse('The DPoP proof htm does not match the request method.');
245
414
  const absolute = /^https?:\/\//i.test(ctx.url) ? ctx.url : ctx.publicOrigin ? new URL(ctx.url, ctx.publicOrigin).toString() : null;
246
415
  const expected = absolute ? htuOf(absolute) : null;
247
416
  if (!expected || typeof payload.htu !== 'string' || htuOf(payload.htu) !== expected) {
248
- return 'The DPoP proof htu does not match the request URL.';
417
+ return refuse('The DPoP proof htu does not match the request URL.');
249
418
  }
250
419
  const iat = typeof payload.iat === 'number' ? payload.iat * 1000 : NaN;
251
420
  if (!Number.isFinite(iat) ||
252
421
  iat > ctx.now + exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS * 1000 ||
253
422
  ctx.now - iat > exports.DPOP_PROOF_MAX_AGE_SECONDS * 1000) {
254
- return 'The DPoP proof is too old or from the future.';
423
+ return refuse('The DPoP proof is too old or from the future.');
255
424
  }
256
425
  if (payload.ath !== (await sha256b64u(ctx.token)))
257
- return 'The DPoP proof ath does not match the access token.';
426
+ return refuse('The DPoP proof ath does not match the access token.');
258
427
  if (typeof payload.jti !== 'string' || !payload.jti)
259
- return 'The DPoP proof needs a jti.';
428
+ return refuse('The DPoP proof needs a jti.');
429
+ if (ctx.nonces) {
430
+ const nonce = typeof payload.nonce === 'string' ? payload.nonce : '';
431
+ if (!nonce || !(await ctx.nonces.valid(nonce))) {
432
+ return { code: 'use_dpop_nonce', message: 'The DPoP proof must carry the nonce from the DPoP-Nonce header.' };
433
+ }
434
+ }
260
435
  if (!(await ctx.replay.claim(`${ctx.jkt}:${payload.jti}`, iat + exports.DPOP_PROOF_MAX_AGE_SECONDS * 1000))) {
261
- return 'The DPoP proof has already been used.';
436
+ return refuse('The DPoP proof has already been used.');
262
437
  }
263
438
  return null;
264
439
  }
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-resource.js","sourceRoot":"","sources":["../src/oauth-resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-resource.js","sourceRoot":"","sources":["../src/oauth-resource.ts"],"names":[],"mappings":"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"}
package/dist/verify.d.ts CHANGED
@@ -17,6 +17,7 @@ export interface AtlasBackendOidc {
17
17
  clearCookie: typeof oidcClearCookie;
18
18
  }
19
19
  export { type AuthzClaims, type ProtectCondition, type ProtectOutcome, type ProtectReason, evaluate, hasFromClaims, protectFromClaims, ForbiddenError, isRoleKey, isPermissionKey, } from '@atlasauth/authz';
20
+ import { type LegacyIssuer } from './legacy-issuers';
20
21
  /**
21
22
  * §7.3 verification by customer backends.
22
23
  *
@@ -89,6 +90,16 @@ export interface SessionClaims {
89
90
  * `email` under the same opt-in, and only when the user carries one.
90
91
  */
91
92
  external_id?: string;
93
+ /**
94
+ * Present ONLY on a token accepted through `legacyIssuers` (a cutover from
95
+ * another provider): which issuer minted it and the subject it carried there.
96
+ * `sub` is already the Atlas user id.
97
+ */
98
+ legacy?: {
99
+ kind: string;
100
+ issuer: string;
101
+ sub: string;
102
+ };
92
103
  [claim: string]: unknown;
93
104
  }
94
105
  /**
@@ -175,10 +186,21 @@ export interface AtlasBackendOptions {
175
186
  bapiBaseUrl?: string;
176
187
  fetchImpl?: typeof fetch;
177
188
  now?: () => number;
189
+ /**
190
+ * Cutover from another auth provider (Better Auth): ALSO accept JWTs from
191
+ * these issuers until each one's `until`, verified against that issuer's own
192
+ * key set, with `sub` mapped to the Atlas user id (the old id is the user's
193
+ * `external_id`; mapped through the Backend API unless the issuer has a
194
+ * `resolveSubject`). The verified claims carry `sub` = the Atlas user id,
195
+ * `external_id` = the old id and `legacy` = `{ kind, issuer, sub }`, so code
196
+ * that needs to tell the two apart can. Atlas tokens are unaffected.
197
+ */
198
+ legacyIssuers?: readonly LegacyIssuer[];
178
199
  }
179
200
  export declare class AtlasBackend {
180
201
  private readonly options;
181
202
  private readonly jwks;
203
+ private readonly legacy?;
182
204
  /**
183
205
  * The server-side OIDC relying party (hosted-redirect sign-in) for this
184
206
  * instance: `start`, `callback`, `logoutUrl`, `verifyIdToken`. `issuer`,
package/dist/verify.js CHANGED
@@ -24,6 +24,7 @@ Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: functi
24
24
  Object.defineProperty(exports, "isRoleKey", { enumerable: true, get: function () { return authz_2.isRoleKey; } });
25
25
  Object.defineProperty(exports, "isPermissionKey", { enumerable: true, get: function () { return authz_2.isPermissionKey; } });
26
26
  const algs_1 = require("./algs");
27
+ const legacy_issuers_1 = require("./legacy-issuers");
27
28
  /**
28
29
  * §7.3 verification by customer backends.
29
30
  *
@@ -64,6 +65,7 @@ function authorized(claims) {
64
65
  class AtlasBackend {
65
66
  options;
66
67
  jwks;
68
+ legacy;
67
69
  /**
68
70
  * The server-side OIDC relying party (hosted-redirect sign-in) for this
69
71
  * instance: `start`, `callback`, `logoutUrl`, `verifyIdToken`. `issuer`,
@@ -110,6 +112,19 @@ class AtlasBackend {
110
112
  verifyIdToken: (token, o) => (0, oidc_1.oidcVerifyIdToken)(token, bind(o)),
111
113
  clearCookie: oidc_1.oidcClearCookie,
112
114
  };
115
+ if (options.legacyIssuers && options.legacyIssuers.length > 0) {
116
+ if (options.legacyIssuers.some((l) => l.issuer === options.issuer)) {
117
+ throw new Error('AtlasBackend: a legacy issuer cannot be the Atlas `issuer` itself.');
118
+ }
119
+ this.legacy = new legacy_issuers_1.LegacyIssuerVerifier({
120
+ issuers: options.legacyIssuers,
121
+ secretKey: options.secretKey,
122
+ bapiBaseUrl: options.bapiBaseUrl,
123
+ fetchImpl: options.fetchImpl,
124
+ now: options.now,
125
+ clockToleranceSeconds: exports.CLOCK_SKEW_SECONDS,
126
+ });
127
+ }
113
128
  this.jwks = new jwks_cache_1.JwksCache({
114
129
  url: hasUrl ? options.jwksUrl : undefined,
115
130
  staticJwks: options.jwks,
@@ -137,6 +152,23 @@ class AtlasBackend {
137
152
  async verify(token) {
138
153
  if (!token || token.split('.').length !== 3)
139
154
  return { ok: false, reason: 'malformed' };
155
+ // A token from a configured legacy issuer (within its window) is verified
156
+ // against THAT issuer's keys only — never the Atlas keys, and an Atlas
157
+ // token never reaches the legacy path (the `iss` routes, the signature decides).
158
+ if (this.legacy) {
159
+ const entry = this.legacy.match((0, legacy_issuers_1.peekIssuer)(token));
160
+ if (entry) {
161
+ const outcome = await this.legacy.verify(token, entry);
162
+ if (!outcome.ok)
163
+ return { ok: false, reason: outcome.reason };
164
+ const claims = outcome.claims;
165
+ if (this.options.authorizedParties?.length && claims.azp !== undefined) {
166
+ if (!this.options.authorizedParties.includes(claims.azp))
167
+ return { ok: false, reason: 'unauthorized_party' };
168
+ }
169
+ return authorized(claims);
170
+ }
171
+ }
140
172
  const keys = await this.jwks.get((0, jwks_cache_1.readKid)(token));
141
173
  if (!keys || keys.keys.length === 0) {
142
174
  return this.jwks.lastError