@atlasauth/backend 0.28.0 → 0.30.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 +19 -0
- package/README.md +30 -0
- package/dist/backchannel-handlers.js +2 -2
- package/dist/backchannel-handlers.js.map +1 -1
- package/dist/client/domains.d.ts +33 -3
- package/dist/client/domains.js.map +1 -1
- package/dist/client/index.d.ts +53 -11
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/jwt-connections.d.ts +46 -0
- package/dist/client/jwt-connections.js +24 -0
- package/dist/client/jwt-connections.js.map +1 -0
- package/dist/client/org-ldap-connections.d.ts +10 -0
- package/dist/client/org-ldap-connections.js.map +1 -1
- package/dist/client/organizations.d.ts +106 -8
- package/dist/client/organizations.js +35 -3
- package/dist/client/organizations.js.map +1 -1
- package/dist/client/referrals.d.ts +35 -6
- package/dist/client/referrals.js +2 -2
- package/dist/client/referrals.js.map +1 -1
- package/dist/client/scim-tokens.d.ts +7 -0
- package/dist/client/scim-tokens.js.map +1 -1
- package/dist/client/sso-connections.d.ts +14 -0
- package/dist/client/sso-connections.js.map +1 -1
- package/dist/client/sso-onboarding.d.ts +14 -1
- package/dist/client/sso-onboarding.js +3 -2
- package/dist/client/sso-onboarding.js.map +1 -1
- package/dist/client/users.d.ts +42 -2
- package/dist/client/users.js +18 -0
- package/dist/client/users.js.map +1 -1
- package/dist/jwks-cache.d.ts +27 -0
- package/dist/jwks-cache.js +45 -4
- package/dist/jwks-cache.js.map +1 -1
- package/dist/oidc.d.ts +35 -1
- package/dist/oidc.js +39 -0
- package/dist/oidc.js.map +1 -1
- package/dist/rp.d.ts +189 -0
- package/dist/rp.js +224 -0
- package/dist/rp.js.map +1 -0
- package/dist/verify.d.ts +8 -0
- package/dist/verify.js +3 -1
- package/dist/verify.js.map +1 -1
- package/dist/webhook-common.d.ts +53 -0
- package/dist/webhook-common.js +48 -0
- package/dist/webhook-common.js.map +1 -0
- package/dist/webhooks-web.d.ts +24 -0
- package/dist/webhooks-web.js +82 -0
- package/dist/webhooks-web.js.map +1 -0
- package/dist/webhooks.d.ts +23 -41
- package/dist/webhooks.js +19 -70
- package/dist/webhooks.js.map +1 -1
- package/package.json +26 -1
package/dist/rp.d.ts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@atlasauth/backend/rp`: the server-side relying party for the hosted
|
|
3
|
+
* redirect, as `(Request) => Response` handlers for any framework.
|
|
4
|
+
*
|
|
5
|
+
* const rp = createRelyingParty({ issuer, clientId, clientSecret, redirectUri, secret, secretKey });
|
|
6
|
+
* app.get('/auth/sign-in', (req) => rp.start(req));
|
|
7
|
+
* app.get('/auth/callback', async (req) => {
|
|
8
|
+
* const { user, response } = await rp.callback(req);
|
|
9
|
+
* // create your session for user.sub, keep user.sid on it, then:
|
|
10
|
+
* response.headers.append('set-cookie', yourSessionCookie);
|
|
11
|
+
* return response;
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* This entry point loads only Web standards (fetch, Web Crypto, Request,
|
|
15
|
+
* Response, URL) and `jose`, itself Web Crypto only: no `Buffer`, no
|
|
16
|
+
* `node:*`. It runs unchanged on Node 18+, Deno, Bun and Workers. The full
|
|
17
|
+
* `@atlasauth/backend` entry (management client, migration bridges, ...) is
|
|
18
|
+
* never pulled in.
|
|
19
|
+
*
|
|
20
|
+
* Everything here is a thin layer over `oidc.start` / `oidc.callback` (state,
|
|
21
|
+
* nonce and PKCE S256 in one sealed short-lived cookie; ID-token checks with the
|
|
22
|
+
* algorithm pinned, `iss`, `aud`/`azp`, `exp`/`iat`, `nonce`, `at_hash`) plus
|
|
23
|
+
* the Atlas session calls a relying party that keeps its own session needs:
|
|
24
|
+
* keep-alive (`POST /v1/sessions/{id}/touch`) and server-side sign-out
|
|
25
|
+
* (`POST /v1/sessions/{id}/revoke`).
|
|
26
|
+
*/
|
|
27
|
+
import { type OidcClientAuth, type OidcIdentity, type OidcStartOptions } from './oidc';
|
|
28
|
+
export { AtlasOidcError, isSafeReturnTo, oidcCallback, oidcLogoutUrl, oidcStart, oidcVerifyIdToken, resetOidcCaches } from './oidc';
|
|
29
|
+
export type { OidcIdentity, OidcStartOptions, OidcCallbackOptions, AtlasOidcErrorCode } from './oidc';
|
|
30
|
+
export { AtlasApiError } from './client/error';
|
|
31
|
+
export { BACKCHANNEL_LOGOUT_EVENT, LogoutTokenVerifier, memoryLogoutReplayStore, verifyLogoutToken, } from './logout-token';
|
|
32
|
+
export type { LogoutReplayStore, LogoutTokenClaims, LogoutTokenResult, LogoutTokenVerifierOptions } from './logout-token';
|
|
33
|
+
export { expressBackchannelLogout, fastifyBackchannelLogout, fastifyBackchannelLogoutPlugin, fetchBackchannelLogout, handleBackchannelLogout, } from './backchannel-handlers';
|
|
34
|
+
export type { BackchannelLogoutOptions } from './backchannel-handlers';
|
|
35
|
+
export { ATLAS_WEBHOOK_HEADERS } from './webhook-common';
|
|
36
|
+
export { verifyAtlasWebhook, verifyAtlasWebhookRequest } from './webhooks-web';
|
|
37
|
+
export type { WebhookVerifyFailure, WebhookVerifyResult } from './webhook-common';
|
|
38
|
+
export type { VerifyAtlasWebhookInput } from './webhooks-web';
|
|
39
|
+
export { authenticatedWithin, usedMultiFactor } from './recent-auth';
|
|
40
|
+
export interface RelyingPartyConfig {
|
|
41
|
+
/** Your instance's issuer: `https://` + its frontend API host. */
|
|
42
|
+
issuer: string;
|
|
43
|
+
/** The OAuth client id. */
|
|
44
|
+
clientId: string;
|
|
45
|
+
/** The client secret (a confidential client). */
|
|
46
|
+
clientSecret?: string;
|
|
47
|
+
/** Token-endpoint authentication. Default `client_secret_basic` with a secret. */
|
|
48
|
+
clientAuth?: OidcClientAuth;
|
|
49
|
+
/** The callback URL, registered on the client exactly. */
|
|
50
|
+
redirectUri: string;
|
|
51
|
+
/** At least 32 characters: seals the short-lived sign-in cookie. */
|
|
52
|
+
secret: string;
|
|
53
|
+
/** Scopes. Default `openid profile email`. */
|
|
54
|
+
scope?: string;
|
|
55
|
+
/** Where the callback response sends the browser when the sign-in carried no return path. Default `/`. */
|
|
56
|
+
afterSignInPath?: string;
|
|
57
|
+
/** Where Atlas sends the browser after sign-out. Must be registered on the client exactly. */
|
|
58
|
+
postLogoutRedirectUri?: string;
|
|
59
|
+
/** The instance secret key (`sk_...`, scope `sessions:write`). Needed for `touchIfDue` and server-side revoke. */
|
|
60
|
+
secretKey?: string;
|
|
61
|
+
/** The Backend API origin. Default `https://api.atlasauth.net`. */
|
|
62
|
+
apiUrl?: string;
|
|
63
|
+
/** Flow cookie name. Default `atlas_oidc`. */
|
|
64
|
+
cookieName?: string;
|
|
65
|
+
/** Minimum time between two keep-alive calls for one session. Default 5 minutes. */
|
|
66
|
+
touchIntervalMs?: number;
|
|
67
|
+
fetchImpl?: typeof fetch;
|
|
68
|
+
/** A clock in epoch milliseconds, for tests. */
|
|
69
|
+
now?: () => number;
|
|
70
|
+
}
|
|
71
|
+
/** Who signed in: the ID-token claims an app needs, in the token's own names. */
|
|
72
|
+
export interface RelyingPartyUser {
|
|
73
|
+
sub: string;
|
|
74
|
+
/** The Atlas session id. Keep it on your session: touch, revoke and back-channel logout all name it. */
|
|
75
|
+
sid: string | null;
|
|
76
|
+
email: string | null;
|
|
77
|
+
/** True only when the ID token says so. Never match accounts on an unverified email. */
|
|
78
|
+
email_verified: boolean;
|
|
79
|
+
name: string | null;
|
|
80
|
+
/** Your own id for the user, when the token carries one. */
|
|
81
|
+
external_id?: string;
|
|
82
|
+
/** The organization the sign-in was made in, when there was one. */
|
|
83
|
+
org_id?: string;
|
|
84
|
+
org_role?: string;
|
|
85
|
+
/** When the user last authenticated, epoch seconds. Store it for {@link RelyingParty.requireRecentAuth}. */
|
|
86
|
+
auth_time: number | null;
|
|
87
|
+
}
|
|
88
|
+
export interface RelyingPartyTokens {
|
|
89
|
+
id_token: string;
|
|
90
|
+
access_token: string;
|
|
91
|
+
refresh_token?: string;
|
|
92
|
+
/** When the access token expires, epoch milliseconds. */
|
|
93
|
+
expires_at: number;
|
|
94
|
+
}
|
|
95
|
+
export interface CallbackResult {
|
|
96
|
+
user: RelyingPartyUser;
|
|
97
|
+
tokens: RelyingPartyTokens;
|
|
98
|
+
/** Every verified claim and the organization / SSO context, as `oidc.callback` returns them. */
|
|
99
|
+
identity: OidcIdentity;
|
|
100
|
+
/**
|
|
101
|
+
* A 302 to the return path (or `afterSignInPath`) that already clears the
|
|
102
|
+
* sign-in cookie. Its headers are mutable: append your own session cookie.
|
|
103
|
+
*/
|
|
104
|
+
response: Response;
|
|
105
|
+
}
|
|
106
|
+
/** Per-request overrides for {@link RelyingParty.start}. */
|
|
107
|
+
export type StartOverrides = Pick<OidcStartOptions, 'prompt' | 'loginHint' | 'uiLocales' | 'maxAge' | 'organization' | 'returnTo' | 'expectedSub' | 'scope' | 'extraParams'>;
|
|
108
|
+
export type TouchResult =
|
|
109
|
+
/** Touched less than `touchIntervalMs` ago: nothing sent. Keep your `lastTouchedAt`. */
|
|
110
|
+
{
|
|
111
|
+
status: 'skipped';
|
|
112
|
+
lastTouchedAt: number;
|
|
113
|
+
}
|
|
114
|
+
/** Atlas slid the idle window. Store `lastTouchedAt`. */
|
|
115
|
+
| {
|
|
116
|
+
status: 'touched';
|
|
117
|
+
lastTouchedAt: number;
|
|
118
|
+
idleExpiresAt: string | null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The Atlas session has ended (signed out, revoked, timed out, or unknown).
|
|
122
|
+
* End your own session: it is no longer backed by a live Atlas session.
|
|
123
|
+
*/
|
|
124
|
+
| {
|
|
125
|
+
status: 'ended';
|
|
126
|
+
reason: 'revoked' | 'idle_expired' | 'expired' | 'not_found';
|
|
127
|
+
};
|
|
128
|
+
export interface SignOutOptions {
|
|
129
|
+
/** The ID token from sign-in: lets Atlas end the session without asking. */
|
|
130
|
+
idToken?: string;
|
|
131
|
+
/** The Atlas session id. With a `secretKey`, it is revoked server-side before the redirect. */
|
|
132
|
+
sid?: string | null;
|
|
133
|
+
/** Override the configured `postLogoutRedirectUri`. */
|
|
134
|
+
postLogoutRedirectUri?: string;
|
|
135
|
+
state?: string;
|
|
136
|
+
}
|
|
137
|
+
export interface RecentAuthOptions {
|
|
138
|
+
/** The signed-in user's `sub`: the re-authentication must come back as the same user. */
|
|
139
|
+
sub: string;
|
|
140
|
+
/** The `auth_time` you stored at sign-in (or after the last step-up). */
|
|
141
|
+
authTime: number | null | undefined;
|
|
142
|
+
/** Where to come back to after confirming. Default: the request's own path and query. */
|
|
143
|
+
returnTo?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface RelyingParty {
|
|
146
|
+
/**
|
|
147
|
+
* Begin sign-in: a 302 to `/oauth2/authorize` with the sign-in cookie set.
|
|
148
|
+
* `prompt`, `login_hint`, `ui_locales`, `max_age`, `organization` and
|
|
149
|
+
* `return_to` on the request's query are passed through; `overrides` win.
|
|
150
|
+
*/
|
|
151
|
+
start(request: Request, overrides?: StartOverrides): Promise<Response>;
|
|
152
|
+
/**
|
|
153
|
+
* Finish sign-in. Throws {@link AtlasOidcError} on any failure; send its
|
|
154
|
+
* `clearCookie` as `Set-Cookie` on your error response.
|
|
155
|
+
*/
|
|
156
|
+
callback(request: Request): Promise<CallbackResult>;
|
|
157
|
+
/**
|
|
158
|
+
* Step-up: `null` when `authTime` is within `maxAgeSeconds`; otherwise a 302
|
|
159
|
+
* that asks the same user to authenticate again (`max_age`, plus
|
|
160
|
+
* `prompt=login` for 0). The callback then refuses another user or an old
|
|
161
|
+
* `auth_time`; store the new `user.auth_time` (and `user.sid`). `0` asks
|
|
162
|
+
* unless the user authenticated in the last {@link CONFIRM_NOW_WINDOW_SECONDS}
|
|
163
|
+
* seconds, so the request that returns from the confirmation goes through.
|
|
164
|
+
*/
|
|
165
|
+
requireRecentAuth(request: Request, maxAgeSeconds: number, options: RecentAuthOptions): Promise<Response | null>;
|
|
166
|
+
/**
|
|
167
|
+
* Keep the Atlas session alive while the user is active in your app, at
|
|
168
|
+
* most once per `touchIntervalMs` per session. Call it on each authenticated
|
|
169
|
+
* request with the `sid` and the time you last touched (0 or null at first).
|
|
170
|
+
*/
|
|
171
|
+
touchIfDue(sid: string, lastTouchedAt: number | null | undefined): Promise<TouchResult>;
|
|
172
|
+
/**
|
|
173
|
+
* End the Atlas session server-side (`POST /v1/sessions/{id}/revoke`); every
|
|
174
|
+
* app signed in through it gets a back-channel logout. An already-ended
|
|
175
|
+
* session is `revoked` too; `not_found` means this instance has no such
|
|
176
|
+
* session (check you use the same instance's secret key). Other failures throw.
|
|
177
|
+
*/
|
|
178
|
+
revokeSession(sid: string): Promise<'revoked' | 'not_found'>;
|
|
179
|
+
/**
|
|
180
|
+
* Sign-out: with a `sid` and a `secretKey`, revokes the Atlas session
|
|
181
|
+
* server-side first, then 302s the browser to `/oauth2/logout`. End your own
|
|
182
|
+
* session (clear your cookie on this response) as well.
|
|
183
|
+
*/
|
|
184
|
+
signOut(options?: SignOutOptions): Promise<Response>;
|
|
185
|
+
}
|
|
186
|
+
/** How long a `requireRecentAuth(…, 0)` confirmation counts, in seconds. */
|
|
187
|
+
export declare const CONFIRM_NOW_WINDOW_SECONDS = 60;
|
|
188
|
+
/** Create the relying party once, at startup; reuse it for every request. */
|
|
189
|
+
export declare function createRelyingParty(config: RelyingPartyConfig): RelyingParty;
|
package/dist/rp.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONFIRM_NOW_WINDOW_SECONDS = exports.usedMultiFactor = exports.authenticatedWithin = exports.verifyAtlasWebhookRequest = exports.verifyAtlasWebhook = exports.ATLAS_WEBHOOK_HEADERS = exports.handleBackchannelLogout = exports.fetchBackchannelLogout = exports.fastifyBackchannelLogoutPlugin = exports.fastifyBackchannelLogout = exports.expressBackchannelLogout = exports.verifyLogoutToken = exports.memoryLogoutReplayStore = exports.LogoutTokenVerifier = exports.BACKCHANNEL_LOGOUT_EVENT = exports.AtlasApiError = exports.resetOidcCaches = exports.oidcVerifyIdToken = exports.oidcStart = exports.oidcLogoutUrl = exports.oidcCallback = exports.isSafeReturnTo = exports.AtlasOidcError = void 0;
|
|
4
|
+
exports.createRelyingParty = createRelyingParty;
|
|
5
|
+
/**
|
|
6
|
+
* `@atlasauth/backend/rp`: the server-side relying party for the hosted
|
|
7
|
+
* redirect, as `(Request) => Response` handlers for any framework.
|
|
8
|
+
*
|
|
9
|
+
* const rp = createRelyingParty({ issuer, clientId, clientSecret, redirectUri, secret, secretKey });
|
|
10
|
+
* app.get('/auth/sign-in', (req) => rp.start(req));
|
|
11
|
+
* app.get('/auth/callback', async (req) => {
|
|
12
|
+
* const { user, response } = await rp.callback(req);
|
|
13
|
+
* // create your session for user.sub, keep user.sid on it, then:
|
|
14
|
+
* response.headers.append('set-cookie', yourSessionCookie);
|
|
15
|
+
* return response;
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* This entry point loads only Web standards (fetch, Web Crypto, Request,
|
|
19
|
+
* Response, URL) and `jose`, itself Web Crypto only: no `Buffer`, no
|
|
20
|
+
* `node:*`. It runs unchanged on Node 18+, Deno, Bun and Workers. The full
|
|
21
|
+
* `@atlasauth/backend` entry (management client, migration bridges, ...) is
|
|
22
|
+
* never pulled in.
|
|
23
|
+
*
|
|
24
|
+
* Everything here is a thin layer over `oidc.start` / `oidc.callback` (state,
|
|
25
|
+
* nonce and PKCE S256 in one sealed short-lived cookie; ID-token checks with the
|
|
26
|
+
* algorithm pinned, `iss`, `aud`/`azp`, `exp`/`iat`, `nonce`, `at_hash`) plus
|
|
27
|
+
* the Atlas session calls a relying party that keeps its own session needs:
|
|
28
|
+
* keep-alive (`POST /v1/sessions/{id}/touch`) and server-side sign-out
|
|
29
|
+
* (`POST /v1/sessions/{id}/revoke`).
|
|
30
|
+
*/
|
|
31
|
+
const oidc_1 = require("./oidc");
|
|
32
|
+
const error_1 = require("./client/error");
|
|
33
|
+
const request_1 = require("./client/request");
|
|
34
|
+
var oidc_2 = require("./oidc");
|
|
35
|
+
Object.defineProperty(exports, "AtlasOidcError", { enumerable: true, get: function () { return oidc_2.AtlasOidcError; } });
|
|
36
|
+
Object.defineProperty(exports, "isSafeReturnTo", { enumerable: true, get: function () { return oidc_2.isSafeReturnTo; } });
|
|
37
|
+
Object.defineProperty(exports, "oidcCallback", { enumerable: true, get: function () { return oidc_2.oidcCallback; } });
|
|
38
|
+
Object.defineProperty(exports, "oidcLogoutUrl", { enumerable: true, get: function () { return oidc_2.oidcLogoutUrl; } });
|
|
39
|
+
Object.defineProperty(exports, "oidcStart", { enumerable: true, get: function () { return oidc_2.oidcStart; } });
|
|
40
|
+
Object.defineProperty(exports, "oidcVerifyIdToken", { enumerable: true, get: function () { return oidc_2.oidcVerifyIdToken; } });
|
|
41
|
+
Object.defineProperty(exports, "resetOidcCaches", { enumerable: true, get: function () { return oidc_2.resetOidcCaches; } });
|
|
42
|
+
var error_2 = require("./client/error");
|
|
43
|
+
Object.defineProperty(exports, "AtlasApiError", { enumerable: true, get: function () { return error_2.AtlasApiError; } });
|
|
44
|
+
// Back-channel logout: verify the logout_token (typ logout+jwt, events, no nonce, sid/sub, jti replay hook).
|
|
45
|
+
var logout_token_1 = require("./logout-token");
|
|
46
|
+
Object.defineProperty(exports, "BACKCHANNEL_LOGOUT_EVENT", { enumerable: true, get: function () { return logout_token_1.BACKCHANNEL_LOGOUT_EVENT; } });
|
|
47
|
+
Object.defineProperty(exports, "LogoutTokenVerifier", { enumerable: true, get: function () { return logout_token_1.LogoutTokenVerifier; } });
|
|
48
|
+
Object.defineProperty(exports, "memoryLogoutReplayStore", { enumerable: true, get: function () { return logout_token_1.memoryLogoutReplayStore; } });
|
|
49
|
+
Object.defineProperty(exports, "verifyLogoutToken", { enumerable: true, get: function () { return logout_token_1.verifyLogoutToken; } });
|
|
50
|
+
var backchannel_handlers_1 = require("./backchannel-handlers");
|
|
51
|
+
Object.defineProperty(exports, "expressBackchannelLogout", { enumerable: true, get: function () { return backchannel_handlers_1.expressBackchannelLogout; } });
|
|
52
|
+
Object.defineProperty(exports, "fastifyBackchannelLogout", { enumerable: true, get: function () { return backchannel_handlers_1.fastifyBackchannelLogout; } });
|
|
53
|
+
Object.defineProperty(exports, "fastifyBackchannelLogoutPlugin", { enumerable: true, get: function () { return backchannel_handlers_1.fastifyBackchannelLogoutPlugin; } });
|
|
54
|
+
Object.defineProperty(exports, "fetchBackchannelLogout", { enumerable: true, get: function () { return backchannel_handlers_1.fetchBackchannelLogout; } });
|
|
55
|
+
Object.defineProperty(exports, "handleBackchannelLogout", { enumerable: true, get: function () { return backchannel_handlers_1.handleBackchannelLogout; } });
|
|
56
|
+
// Webhooks, verified with Web Crypto.
|
|
57
|
+
var webhook_common_1 = require("./webhook-common");
|
|
58
|
+
Object.defineProperty(exports, "ATLAS_WEBHOOK_HEADERS", { enumerable: true, get: function () { return webhook_common_1.ATLAS_WEBHOOK_HEADERS; } });
|
|
59
|
+
var webhooks_web_1 = require("./webhooks-web");
|
|
60
|
+
Object.defineProperty(exports, "verifyAtlasWebhook", { enumerable: true, get: function () { return webhooks_web_1.verifyAtlasWebhook; } });
|
|
61
|
+
Object.defineProperty(exports, "verifyAtlasWebhookRequest", { enumerable: true, get: function () { return webhooks_web_1.verifyAtlasWebhookRequest; } });
|
|
62
|
+
var recent_auth_1 = require("./recent-auth");
|
|
63
|
+
Object.defineProperty(exports, "authenticatedWithin", { enumerable: true, get: function () { return recent_auth_1.authenticatedWithin; } });
|
|
64
|
+
Object.defineProperty(exports, "usedMultiFactor", { enumerable: true, get: function () { return recent_auth_1.usedMultiFactor; } });
|
|
65
|
+
const PASSTHROUGH = [
|
|
66
|
+
['prompt', 'prompt'],
|
|
67
|
+
['login_hint', 'loginHint'],
|
|
68
|
+
['ui_locales', 'uiLocales'],
|
|
69
|
+
['organization', 'organization'],
|
|
70
|
+
['return_to', 'returnTo'],
|
|
71
|
+
];
|
|
72
|
+
const DEFAULT_TOUCH_INTERVAL_MS = 5 * 60_000;
|
|
73
|
+
/** How long a `requireRecentAuth(…, 0)` confirmation counts, in seconds. */
|
|
74
|
+
exports.CONFIRM_NOW_WINDOW_SECONDS = 60;
|
|
75
|
+
/** Create the relying party once, at startup; reuse it for every request. */
|
|
76
|
+
function createRelyingParty(config) {
|
|
77
|
+
if (typeof config.secret !== 'string' || config.secret.length < 32) {
|
|
78
|
+
throw new TypeError('createRelyingParty: `secret` (at least 32 characters) is required to seal the sign-in cookie.');
|
|
79
|
+
}
|
|
80
|
+
const afterSignIn = config.afterSignInPath ?? '/';
|
|
81
|
+
if (!(0, oidc_1.isSafeReturnTo)(afterSignIn))
|
|
82
|
+
throw new TypeError('createRelyingParty: `afterSignInPath` must be a path starting with a single `/`.');
|
|
83
|
+
const base = {
|
|
84
|
+
issuer: config.issuer,
|
|
85
|
+
clientId: config.clientId,
|
|
86
|
+
redirectUri: config.redirectUri,
|
|
87
|
+
secret: config.secret,
|
|
88
|
+
cookieName: config.cookieName ?? oidc_1.OIDC_FLOW_COOKIE,
|
|
89
|
+
fetchImpl: config.fetchImpl,
|
|
90
|
+
now: config.now,
|
|
91
|
+
};
|
|
92
|
+
const clock = () => (config.now ?? Date.now)();
|
|
93
|
+
const doFetch = (input, init) => (config.fetchImpl ?? fetch)(input, init);
|
|
94
|
+
const interval = config.touchIntervalMs ?? DEFAULT_TOUCH_INTERVAL_MS;
|
|
95
|
+
async function start(request, overrides = {}) {
|
|
96
|
+
const query = new URL(request.url).searchParams;
|
|
97
|
+
const fromQuery = {};
|
|
98
|
+
for (const [param, key] of PASSTHROUGH) {
|
|
99
|
+
const v = query.get(param);
|
|
100
|
+
// A bad return_to from the query is dropped, never an error page.
|
|
101
|
+
if (v && (key !== 'returnTo' || (0, oidc_1.isSafeReturnTo)(v)))
|
|
102
|
+
fromQuery[key] = v;
|
|
103
|
+
}
|
|
104
|
+
const maxAge = query.get('max_age');
|
|
105
|
+
if (maxAge !== null && /^\d{1,9}$/.test(maxAge))
|
|
106
|
+
fromQuery.maxAge = Number(maxAge);
|
|
107
|
+
const { url, cookie } = await (0, oidc_1.oidcStart)({ ...base, scope: config.scope, ...fromQuery, ...overrides });
|
|
108
|
+
return redirect(url, [cookie]);
|
|
109
|
+
}
|
|
110
|
+
async function callback(request) {
|
|
111
|
+
const identity = await (0, oidc_1.oidcCallback)({
|
|
112
|
+
...base,
|
|
113
|
+
clientSecret: config.clientSecret,
|
|
114
|
+
clientAuth: config.clientAuth,
|
|
115
|
+
query: new URL(request.url).searchParams,
|
|
116
|
+
cookie: request.headers.get('cookie'),
|
|
117
|
+
});
|
|
118
|
+
const c = identity.claims;
|
|
119
|
+
const user = {
|
|
120
|
+
sub: identity.sub,
|
|
121
|
+
sid: identity.sid,
|
|
122
|
+
email: identity.email,
|
|
123
|
+
email_verified: identity.emailVerified,
|
|
124
|
+
name: identity.name,
|
|
125
|
+
...(typeof c.external_id === 'string' && c.external_id ? { external_id: c.external_id } : {}),
|
|
126
|
+
...(identity.organization ? { org_id: identity.organization.id, org_role: identity.organization.role } : {}),
|
|
127
|
+
auth_time: identity.authTime,
|
|
128
|
+
};
|
|
129
|
+
const tokens = {
|
|
130
|
+
id_token: identity.idToken,
|
|
131
|
+
access_token: identity.accessToken,
|
|
132
|
+
...(identity.refreshToken ? { refresh_token: identity.refreshToken } : {}),
|
|
133
|
+
expires_at: identity.expiresAt,
|
|
134
|
+
};
|
|
135
|
+
return { user, tokens, identity, response: redirect(identity.returnTo ?? afterSignIn, [identity.clearCookie]) };
|
|
136
|
+
}
|
|
137
|
+
async function requireRecentAuth(request, maxAgeSeconds, options) {
|
|
138
|
+
if (!Number.isSafeInteger(maxAgeSeconds) || maxAgeSeconds < 0) {
|
|
139
|
+
throw new TypeError('requireRecentAuth: `maxAgeSeconds` must be a whole number of seconds, 0 or more.');
|
|
140
|
+
}
|
|
141
|
+
if (typeof options?.sub !== 'string' || !options.sub)
|
|
142
|
+
throw new TypeError('requireRecentAuth: `sub` is required.');
|
|
143
|
+
const at = options.authTime;
|
|
144
|
+
// 0 means "confirm now": it still passes for a minute after the confirmation,
|
|
145
|
+
// or the request that comes back from it would be sent to confirm again, forever.
|
|
146
|
+
const allowed = maxAgeSeconds === 0 ? exports.CONFIRM_NOW_WINDOW_SECONDS : maxAgeSeconds;
|
|
147
|
+
if (typeof at === 'number' && Number.isFinite(at) && clock() / 1000 - at <= allowed)
|
|
148
|
+
return null;
|
|
149
|
+
const here = new URL(request.url);
|
|
150
|
+
const returnTo = options.returnTo ?? `${here.pathname}${here.search}`;
|
|
151
|
+
const { url, cookie } = await (0, oidc_1.oidcStart)({
|
|
152
|
+
...base,
|
|
153
|
+
scope: config.scope,
|
|
154
|
+
maxAge: maxAgeSeconds,
|
|
155
|
+
expectedSub: options.sub,
|
|
156
|
+
...(maxAgeSeconds === 0 ? { prompt: 'login' } : {}),
|
|
157
|
+
...((0, oidc_1.isSafeReturnTo)(returnTo) ? { returnTo } : {}),
|
|
158
|
+
});
|
|
159
|
+
return redirect(url, [cookie]);
|
|
160
|
+
}
|
|
161
|
+
function sessionCall(sid, action) {
|
|
162
|
+
if (!config.secretKey)
|
|
163
|
+
throw new TypeError(`${action === 'touch' ? 'touchIfDue' : 'revokeSession'}: \`secretKey\` is not configured.`);
|
|
164
|
+
if (typeof sid !== 'string' || !sid)
|
|
165
|
+
throw new TypeError('A session id (`sid`) is required.');
|
|
166
|
+
const url = `${(config.apiUrl ?? request_1.DEFAULT_API_URL).replace(/\/+$/, '')}/v1/sessions/${encodeURIComponent(sid)}/${action}`;
|
|
167
|
+
return doFetch(url, { method: 'POST', headers: { authorization: `Bearer ${config.secretKey}`, accept: 'application/json' } });
|
|
168
|
+
}
|
|
169
|
+
async function touchIfDue(sid, lastTouchedAt) {
|
|
170
|
+
const now = clock();
|
|
171
|
+
if (typeof lastTouchedAt === 'number' && now - lastTouchedAt < interval && now >= lastTouchedAt) {
|
|
172
|
+
return { status: 'skipped', lastTouchedAt };
|
|
173
|
+
}
|
|
174
|
+
const res = await sessionCall(sid, 'touch');
|
|
175
|
+
const body = (await res.json().catch(() => null));
|
|
176
|
+
if (res.ok) {
|
|
177
|
+
return { status: 'touched', lastTouchedAt: now, idleExpiresAt: typeof body?.idle_expires_at === 'string' ? body.idle_expires_at : null };
|
|
178
|
+
}
|
|
179
|
+
if (res.status === 404)
|
|
180
|
+
return { status: 'ended', reason: 'not_found' };
|
|
181
|
+
if (res.status === 409) {
|
|
182
|
+
const code = errorsOf(body)[0]?.code;
|
|
183
|
+
if (code === 'SESSION_REVOKED')
|
|
184
|
+
return { status: 'ended', reason: 'revoked' };
|
|
185
|
+
if (code === 'SESSION_IDLE_EXPIRED')
|
|
186
|
+
return { status: 'ended', reason: 'idle_expired' };
|
|
187
|
+
return { status: 'ended', reason: 'expired' };
|
|
188
|
+
}
|
|
189
|
+
// A key, scope or availability problem is not "signed out": say so loudly.
|
|
190
|
+
throw new error_1.AtlasApiError(res.status, errorsOf(body));
|
|
191
|
+
}
|
|
192
|
+
async function revokeSession(sid) {
|
|
193
|
+
const res = await sessionCall(sid, 'revoke');
|
|
194
|
+
if (res.ok)
|
|
195
|
+
return 'revoked';
|
|
196
|
+
if (res.status === 404)
|
|
197
|
+
return 'not_found';
|
|
198
|
+
throw new error_1.AtlasApiError(res.status, errorsOf(await res.json().catch(() => null)));
|
|
199
|
+
}
|
|
200
|
+
async function signOut(options = {}) {
|
|
201
|
+
if (options.sid && config.secretKey)
|
|
202
|
+
await revokeSession(options.sid);
|
|
203
|
+
const url = await (0, oidc_1.oidcLogoutUrl)({
|
|
204
|
+
...base,
|
|
205
|
+
postLogoutRedirectUri: options.postLogoutRedirectUri ?? config.postLogoutRedirectUri,
|
|
206
|
+
idTokenHint: options.idToken,
|
|
207
|
+
state: options.state,
|
|
208
|
+
});
|
|
209
|
+
return redirect(url, []);
|
|
210
|
+
}
|
|
211
|
+
return { start, callback, requireRecentAuth, touchIfDue, revokeSession, signOut };
|
|
212
|
+
}
|
|
213
|
+
/** A 302 built with `new Response` (not `Response.redirect`), so its headers stay mutable. */
|
|
214
|
+
function redirect(location, cookies) {
|
|
215
|
+
const headers = new Headers({ location, 'cache-control': 'no-store' });
|
|
216
|
+
for (const c of cookies)
|
|
217
|
+
headers.append('set-cookie', c);
|
|
218
|
+
return new Response(null, { status: 302, headers });
|
|
219
|
+
}
|
|
220
|
+
function errorsOf(body) {
|
|
221
|
+
const errors = body?.errors;
|
|
222
|
+
return Array.isArray(errors) ? errors : [];
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=rp.js.map
|
package/dist/rp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rp.js","sourceRoot":"","sources":["../src/rp.ts"],"names":[],"mappings":"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"}
|
package/dist/verify.d.ts
CHANGED
|
@@ -175,6 +175,14 @@ export interface AtlasBackendOptions {
|
|
|
175
175
|
jwks?: Jwks;
|
|
176
176
|
/** Expected `iss`. Required — an unchecked issuer accepts any Atlas instance. */
|
|
177
177
|
issuer: string;
|
|
178
|
+
/**
|
|
179
|
+
* Earlier issuers of THIS instance, also accepted: its old sign-in host while
|
|
180
|
+
* the instance moves to a new one (a custom domain or a path mount going
|
|
181
|
+
* active). The keys are the instance's own, so nothing else changes. The
|
|
182
|
+
* instance's discovery document lists them in `atlas_previous_issuers` with
|
|
183
|
+
* an `accepted_until`; remove them after that.
|
|
184
|
+
*/
|
|
185
|
+
previousIssuers?: readonly string[];
|
|
178
186
|
/**
|
|
179
187
|
* §7.3 optional azp allowlist. When set, a token minted for a different
|
|
180
188
|
* origin is refused, which is what stops a token issued to one of the
|
package/dist/verify.js
CHANGED
|
@@ -181,7 +181,9 @@ class AtlasBackend {
|
|
|
181
181
|
// Pinned. Without this, a token whose header says `alg: none` — or any
|
|
182
182
|
// algorithm the key material can be coerced into — verifies.
|
|
183
183
|
algorithms: algs_1.ATLAS_SIGNING_ALGS,
|
|
184
|
-
issuer: this.options.
|
|
184
|
+
issuer: this.options.previousIssuers?.length
|
|
185
|
+
? [this.options.issuer, ...this.options.previousIssuers]
|
|
186
|
+
: this.options.issuer,
|
|
185
187
|
// §S4 enforce `aud` ONLY when the caller configured an expected audience.
|
|
186
188
|
// Unset leaves `aud` unchecked, so a token carrying its default
|
|
187
189
|
// instance-id audience still verifies (backwards compatible).
|
package/dist/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** What both Atlas webhook verifiers share: headers, constants, the result shape and the options. No Node APIs. */
|
|
2
|
+
export declare const SIGNATURE_VERSION = "v1";
|
|
3
|
+
export declare const REPLAY_TOLERANCE_MS: number;
|
|
4
|
+
/** Header names Atlas sends on every delivery (lower-case; match case-insensitively). */
|
|
5
|
+
export declare const ATLAS_WEBHOOK_HEADERS: {
|
|
6
|
+
readonly id: "atlas-id";
|
|
7
|
+
readonly timestamp: "atlas-timestamp";
|
|
8
|
+
readonly signature: "atlas-signature";
|
|
9
|
+
};
|
|
10
|
+
export type WebhookVerifyFailure = 'missing_headers' | 'malformed_signature' | 'stale_timestamp' | 'signature_mismatch';
|
|
11
|
+
export interface WebhookVerifyResult<T = unknown> {
|
|
12
|
+
/** True only when the signature and timestamp both check out. */
|
|
13
|
+
verified: boolean;
|
|
14
|
+
/** Why verification failed, when it did. */
|
|
15
|
+
reason?: WebhookVerifyFailure;
|
|
16
|
+
/** The parsed event envelope `{ id, type, timestamp, instance_id, data }` — present only when `verified`. */
|
|
17
|
+
event?: T;
|
|
18
|
+
/**
|
|
19
|
+
* The signed `atlas-id` header — present only when `verified`. It is the same
|
|
20
|
+
* on every retry of one event, so it is the key to deduplicate deliveries on.
|
|
21
|
+
*/
|
|
22
|
+
deliveryId?: string;
|
|
23
|
+
/** The signed `atlas-timestamp` header (epoch ms) of this attempt — present only when `verified`. */
|
|
24
|
+
timestamp?: number;
|
|
25
|
+
}
|
|
26
|
+
/** Read a header case-insensitively from a plain object or a Fetch `Headers`. */
|
|
27
|
+
export declare function readHeader(headers: HeadersLike, name: string): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* The `v1` signatures in an `atlas-signature` header. The header carries one
|
|
30
|
+
* `v1,<base64>` entry, or several separated by spaces (while an endpoint
|
|
31
|
+
* secret rotates, Atlas signs with the old and the new secret). Entries of
|
|
32
|
+
* another version are skipped, so a future scheme never breaks this verifier.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseSignatures(header: string, version?: string): string[];
|
|
35
|
+
export type HeadersLike = Headers | Record<string, string | string[] | undefined>;
|
|
36
|
+
export interface WebhookVerifyOptions {
|
|
37
|
+
/** The request headers (a plain object, Node `req.headers`, or a Fetch `Headers`). */
|
|
38
|
+
headers: HeadersLike;
|
|
39
|
+
/** The endpoint's signing secret (shown once when the endpoint was created/rotated). */
|
|
40
|
+
secret: string;
|
|
41
|
+
/** Override "now" (tests); defaults to the current time. */
|
|
42
|
+
now?: Date;
|
|
43
|
+
/** Override the ±replay tolerance (defaults to 5 minutes). */
|
|
44
|
+
toleranceMs?: number;
|
|
45
|
+
/**
|
|
46
|
+
* The exact URL Atlas POSTed to (your endpoint's `url`). When given, `v2`
|
|
47
|
+
* signature entries — which also cover the URL, for endpoints with
|
|
48
|
+
* `signature_versions` including `v2` — are checked too.
|
|
49
|
+
*/
|
|
50
|
+
url?: string;
|
|
51
|
+
/** Accept only a `v2` entry (needs `url`): a delivery replayed to another URL then fails. */
|
|
52
|
+
requireV2?: boolean;
|
|
53
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ATLAS_WEBHOOK_HEADERS = exports.REPLAY_TOLERANCE_MS = exports.SIGNATURE_VERSION = void 0;
|
|
4
|
+
exports.readHeader = readHeader;
|
|
5
|
+
exports.parseSignatures = parseSignatures;
|
|
6
|
+
/** What both Atlas webhook verifiers share: headers, constants, the result shape and the options. No Node APIs. */
|
|
7
|
+
exports.SIGNATURE_VERSION = 'v1';
|
|
8
|
+
exports.REPLAY_TOLERANCE_MS = 5 * 60_000;
|
|
9
|
+
/** Header names Atlas sends on every delivery (lower-case; match case-insensitively). */
|
|
10
|
+
exports.ATLAS_WEBHOOK_HEADERS = {
|
|
11
|
+
id: 'atlas-id',
|
|
12
|
+
timestamp: 'atlas-timestamp',
|
|
13
|
+
signature: 'atlas-signature',
|
|
14
|
+
};
|
|
15
|
+
/** Read a header case-insensitively from a plain object or a Fetch `Headers`. */
|
|
16
|
+
function readHeader(headers, name) {
|
|
17
|
+
if (typeof headers.get === 'function') {
|
|
18
|
+
return headers.get(name) ?? undefined;
|
|
19
|
+
}
|
|
20
|
+
const bag = headers;
|
|
21
|
+
const direct = bag[name] ?? bag[name.toLowerCase()];
|
|
22
|
+
const v = Array.isArray(direct) ? direct[0] : direct;
|
|
23
|
+
if (v !== undefined)
|
|
24
|
+
return v;
|
|
25
|
+
// Fall back to a case-insensitive scan (Node lower-cases, but be safe).
|
|
26
|
+
const hit = Object.keys(bag).find((k) => k.toLowerCase() === name);
|
|
27
|
+
const found = hit ? bag[hit] : undefined;
|
|
28
|
+
return Array.isArray(found) ? found[0] : found;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The `v1` signatures in an `atlas-signature` header. The header carries one
|
|
32
|
+
* `v1,<base64>` entry, or several separated by spaces (while an endpoint
|
|
33
|
+
* secret rotates, Atlas signs with the old and the new secret). Entries of
|
|
34
|
+
* another version are skipped, so a future scheme never breaks this verifier.
|
|
35
|
+
*/
|
|
36
|
+
function parseSignatures(header, version = exports.SIGNATURE_VERSION) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const entry of header.trim().split(/\s+/)) {
|
|
39
|
+
const comma = entry.indexOf(',');
|
|
40
|
+
if (comma <= 0)
|
|
41
|
+
continue;
|
|
42
|
+
const value = entry.slice(comma + 1);
|
|
43
|
+
if (entry.slice(0, comma) === version && value)
|
|
44
|
+
out.push(value);
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=webhook-common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-common.js","sourceRoot":"","sources":["../src/webhook-common.ts"],"names":[],"mappings":";;;AAkCA,gCAYC;AAQD,0CASC;AA/DD,mHAAmH;AACtG,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC;AAE9C,yFAAyF;AAC5E,QAAA,qBAAqB,GAAG;IACnC,EAAE,EAAE,UAAU;IACd,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,iBAAiB;CACpB,CAAC;AAwBX,iFAAiF;AACjF,SAAgB,UAAU,CAAC,OAAoB,EAAE,IAAY;IAC3D,IAAI,OAAQ,OAAmB,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACnD,OAAQ,OAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IACrD,CAAC;IACD,MAAM,GAAG,GAAG,OAAwD,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAC9B,wEAAwE;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,MAAc,EAAE,UAAkB,yBAAiB;IACjF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,OAAO,IAAI,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|