@_mustachio/openauth 0.10.0 → 0.11.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/dist/esm/adapters/memory/session-store.js +22 -0
- package/dist/esm/adapters/memory/token-store.js +13 -0
- package/dist/esm/client.js +9 -2
- package/dist/esm/domain/authorize.js +5 -0
- package/dist/esm/domain/callback.js +3 -0
- package/dist/esm/domain/discovery.js +44 -2
- package/dist/esm/domain/dpop.js +122 -0
- package/dist/esm/domain/id-token.js +94 -0
- package/dist/esm/domain/introspect.js +5 -1
- package/dist/esm/domain/jwt.js +28 -0
- package/dist/esm/domain/logout.js +75 -0
- package/dist/esm/domain/method-route.js +3 -0
- package/dist/esm/domain/par.js +51 -0
- package/dist/esm/domain/refresh.js +12 -1
- package/dist/esm/domain/register.js +74 -0
- package/dist/esm/domain/token-exchange.js +1 -0
- package/dist/esm/domain/token.js +48 -7
- package/dist/esm/domain/userinfo.js +38 -3
- package/dist/esm/http/handlers/authorize.js +90 -3
- package/dist/esm/http/handlers/end-session.js +64 -0
- package/dist/esm/http/handlers/metadata.js +5 -2
- package/dist/esm/http/handlers/par.js +53 -0
- package/dist/esm/http/handlers/register.js +46 -0
- package/dist/esm/http/handlers/token.js +36 -6
- package/dist/esm/http/handlers/userinfo.js +35 -29
- package/dist/esm/http/router.js +10 -0
- package/dist/esm/http/schemas/authorize.js +7 -1
- package/dist/esm/http/schemas/end-session.js +13 -0
- package/dist/esm/http/schemas/par.js +9 -0
- package/dist/esm/http/schemas/register.js +16 -0
- package/dist/esm/index.js +7 -2
- package/dist/esm/types/error.js +5 -0
- package/dist/types/adapters/memory/session-store.d.ts +3 -1
- package/dist/types/adapters/memory/session-store.d.ts.map +1 -1
- package/dist/types/adapters/memory/token-store.d.ts +1 -0
- package/dist/types/adapters/memory/token-store.d.ts.map +1 -1
- package/dist/types/client.d.ts +19 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/domain/authorize.d.ts.map +1 -1
- package/dist/types/domain/client-credentials.d.ts +2 -0
- package/dist/types/domain/client-credentials.d.ts.map +1 -1
- package/dist/types/domain/discovery.d.ts +37 -0
- package/dist/types/domain/discovery.d.ts.map +1 -1
- package/dist/types/domain/dpop.d.ts +61 -0
- package/dist/types/domain/dpop.d.ts.map +1 -0
- package/dist/types/domain/id-token.d.ts +83 -0
- package/dist/types/domain/id-token.d.ts.map +1 -0
- package/dist/types/domain/introspect.d.ts +8 -0
- package/dist/types/domain/introspect.d.ts.map +1 -1
- package/dist/types/domain/jwt.d.ts +27 -1
- package/dist/types/domain/jwt.d.ts.map +1 -1
- package/dist/types/domain/logout.d.ts +69 -0
- package/dist/types/domain/logout.d.ts.map +1 -0
- package/dist/types/domain/par.d.ts +62 -0
- package/dist/types/domain/par.d.ts.map +1 -0
- package/dist/types/domain/refresh.d.ts +9 -0
- package/dist/types/domain/refresh.d.ts.map +1 -1
- package/dist/types/domain/register.d.ts +33 -0
- package/dist/types/domain/register.d.ts.map +1 -0
- package/dist/types/domain/token-exchange.d.ts +2 -0
- package/dist/types/domain/token-exchange.d.ts.map +1 -1
- package/dist/types/domain/token.d.ts +41 -1
- package/dist/types/domain/token.d.ts.map +1 -1
- package/dist/types/domain/userinfo.d.ts +44 -5
- package/dist/types/domain/userinfo.d.ts.map +1 -1
- package/dist/types/http/context.d.ts +4 -1
- package/dist/types/http/context.d.ts.map +1 -1
- package/dist/types/http/handlers/authorize.d.ts.map +1 -1
- package/dist/types/http/handlers/end-session.d.ts +3 -0
- package/dist/types/http/handlers/end-session.d.ts.map +1 -0
- package/dist/types/http/handlers/metadata.d.ts +1 -1
- package/dist/types/http/handlers/metadata.d.ts.map +1 -1
- package/dist/types/http/handlers/par.d.ts +3 -0
- package/dist/types/http/handlers/par.d.ts.map +1 -0
- package/dist/types/http/handlers/register.d.ts +3 -0
- package/dist/types/http/handlers/register.d.ts.map +1 -0
- package/dist/types/http/handlers/token.d.ts.map +1 -1
- package/dist/types/http/handlers/userinfo.d.ts.map +1 -1
- package/dist/types/http/router.d.ts.map +1 -1
- package/dist/types/http/schemas/authorize.d.ts +40 -0
- package/dist/types/http/schemas/authorize.d.ts.map +1 -1
- package/dist/types/http/schemas/end-session.d.ts +31 -0
- package/dist/types/http/schemas/end-session.d.ts.map +1 -0
- package/dist/types/http/schemas/par.d.ts +20 -0
- package/dist/types/http/schemas/par.d.ts.map +1 -0
- package/dist/types/http/schemas/register.d.ts +42 -0
- package/dist/types/http/schemas/register.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/ports/audit-log.d.ts +27 -0
- package/dist/types/ports/audit-log.d.ts.map +1 -1
- package/dist/types/ports/session-store.d.ts +27 -0
- package/dist/types/ports/session-store.d.ts.map +1 -1
- package/dist/types/ports/token-store.d.ts +12 -0
- package/dist/types/ports/token-store.d.ts.map +1 -1
- package/dist/types/types/authorization.d.ts +23 -0
- package/dist/types/types/authorization.d.ts.map +1 -1
- package/dist/types/types/error.d.ts +9 -0
- package/dist/types/types/error.d.ts.map +1 -1
- package/dist/types/types/flow.d.ts +10 -0
- package/dist/types/types/flow.d.ts.map +1 -1
- package/dist/types/types/idp.d.ts +91 -1
- package/dist/types/types/idp.d.ts.map +1 -1
- package/dist/types/types/tenant.d.ts +37 -0
- package/dist/types/types/tenant.d.ts.map +1 -1
- package/dist/types/types/token.d.ts +128 -0
- package/dist/types/types/token.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adapters/memory/session-store.ts +44 -1
- package/src/adapters/memory/token-store.ts +16 -0
- package/src/client.ts +32 -0
- package/src/domain/authorize.ts +9 -0
- package/src/domain/callback.ts +5 -0
- package/src/domain/client-credentials.ts +2 -0
- package/src/domain/discovery.ts +80 -2
- package/src/domain/dpop.ts +293 -0
- package/src/domain/id-token.ts +213 -0
- package/src/domain/introspect.ts +10 -0
- package/src/domain/jwt.ts +80 -1
- package/src/domain/logout.ts +180 -0
- package/src/domain/method-route.ts +5 -0
- package/src/domain/par.ts +141 -0
- package/src/domain/refresh.ts +41 -0
- package/src/domain/register.ts +168 -0
- package/src/domain/token-exchange.ts +11 -0
- package/src/domain/token.ts +134 -8
- package/src/domain/userinfo.ts +121 -6
- package/src/http/context.ts +4 -0
- package/src/http/handlers/authorize.ts +144 -3
- package/src/http/handlers/end-session.ts +106 -0
- package/src/http/handlers/metadata.ts +7 -2
- package/src/http/handlers/par.ts +84 -0
- package/src/http/handlers/register.ts +70 -0
- package/src/http/handlers/token.ts +56 -0
- package/src/http/handlers/userinfo.ts +62 -38
- package/src/http/router.ts +19 -0
- package/src/http/schemas/authorize.ts +27 -0
- package/src/http/schemas/end-session.ts +23 -0
- package/src/http/schemas/par.ts +23 -0
- package/src/http/schemas/register.ts +29 -0
- package/src/index.ts +18 -1
- package/src/ports/CONSISTENCY.md +52 -21
- package/src/ports/audit-log.ts +29 -0
- package/src/ports/session-store.ts +33 -0
- package/src/ports/token-store.ts +13 -0
- package/src/types/authorization.ts +25 -0
- package/src/types/error.ts +23 -0
- package/src/types/flow.ts +10 -0
- package/src/types/idp.ts +96 -0
- package/src/types/tenant.ts +37 -0
- package/src/types/token.ts +135 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idp.d.ts","sourceRoot":"","sources":["../../../src/types/idp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"idp.d.ts","sourceRoot":"","sources":["../../../src/types/idp.ts"],"names":[],"mappings":"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"}
|
|
@@ -112,6 +112,26 @@ export type PublicClientConfig = {
|
|
|
112
112
|
scopes: string[];
|
|
113
113
|
/** Must be `true` for public clients per OAuth 2.1 §2.1.1. */
|
|
114
114
|
pkceRequired: true;
|
|
115
|
+
/**
|
|
116
|
+
* Registered URIs to which `/end_session` may redirect after RP-initiated
|
|
117
|
+
* logout (OIDC RP-Initiated Logout 1.0 §2). Exact-match. If absent, the
|
|
118
|
+
* `/end_session` endpoint refuses any `post_logout_redirect_uri`.
|
|
119
|
+
*/
|
|
120
|
+
postLogoutRedirectUris?: string[];
|
|
121
|
+
/**
|
|
122
|
+
* RFC 9126 §2: when `true`, the client MUST use Pushed Authorization
|
|
123
|
+
* Requests; a direct `GET /authorize` call without `request_uri` is
|
|
124
|
+
* rejected with `invalid_request`.
|
|
125
|
+
*/
|
|
126
|
+
requirePushedAuthorizationRequests?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* OIDC Core §8.1 — when set, the subject identifier (`sub`) is derived
|
|
129
|
+
* as a pairwise pseudonym keyed by this string. Two clients sharing
|
|
130
|
+
* the same `sectorIdentifier` will see the same `sub`; different
|
|
131
|
+
* values yield different `sub`s for the same end user. Absent =
|
|
132
|
+
* public subject (sub is identical across all RPs).
|
|
133
|
+
*/
|
|
134
|
+
sectorIdentifier?: string;
|
|
115
135
|
/** Phase 8. */
|
|
116
136
|
dpopRequired?: boolean;
|
|
117
137
|
};
|
|
@@ -129,6 +149,23 @@ export type ConfidentialClientConfig = {
|
|
|
129
149
|
* strongly discouraged; OAuth 2.1 §2.1.1 recommends PKCE for every client.
|
|
130
150
|
*/
|
|
131
151
|
pkceRequired: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Registered URIs to which `/end_session` may redirect after RP-initiated
|
|
154
|
+
* logout (OIDC RP-Initiated Logout 1.0 §2). Exact-match.
|
|
155
|
+
*/
|
|
156
|
+
postLogoutRedirectUris?: string[];
|
|
157
|
+
/**
|
|
158
|
+
* RFC 9126 §2: when `true`, the client MUST use Pushed Authorization
|
|
159
|
+
* Requests; a direct `GET /authorize` call without `request_uri` is
|
|
160
|
+
* rejected with `invalid_request`.
|
|
161
|
+
*/
|
|
162
|
+
requirePushedAuthorizationRequests?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* OIDC Core §8.1 — see `PublicClientConfig.sectorIdentifier` for
|
|
165
|
+
* semantics. Same field; duplicated on each branch because the
|
|
166
|
+
* `ClientConfig` discriminated union doesn't share optional fields.
|
|
167
|
+
*/
|
|
168
|
+
sectorIdentifier?: string;
|
|
132
169
|
/** Phase 8. */
|
|
133
170
|
dpopRequired?: boolean;
|
|
134
171
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../src/types/tenant.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../src/types/tenant.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Per AD9, access tokens are JWTs (ES256 by default, Ed25519 optional per
|
|
7
7
|
* AD11) and refresh tokens are opaque server-side records.
|
|
8
8
|
*/
|
|
9
|
+
import type { ClaimsRequest } from "./authorization";
|
|
9
10
|
import type { SubjectClaim } from "./subject";
|
|
10
11
|
import type { TenantId } from "./tenant";
|
|
11
12
|
/**
|
|
@@ -39,9 +40,98 @@ export type CodePayload = {
|
|
|
39
40
|
providerSubject: string;
|
|
40
41
|
/** Typed-per-method properties from `MethodResult.success`. */
|
|
41
42
|
properties: unknown;
|
|
43
|
+
/**
|
|
44
|
+
* Relying party's OIDC `nonce` (OIDC Core §3.1.2.1). Snapshotted from
|
|
45
|
+
* `FlowRecord.appNonce`. Echoed into the issued `id_token` when present.
|
|
46
|
+
*/
|
|
47
|
+
appNonce?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Seconds-since-epoch when end-user authentication completed
|
|
50
|
+
* (OIDC Core §2 `auth_time`). Stamped at the moment the method's
|
|
51
|
+
* `MethodResult.success` fires. Carried into the `id_token` and forward
|
|
52
|
+
* across refresh-token rotations.
|
|
53
|
+
*/
|
|
54
|
+
authTime: number;
|
|
55
|
+
/** OIDC Core §5.5 — RP-requested claims; honored at id_token + /userinfo. */
|
|
56
|
+
claimsRequest?: ClaimsRequest;
|
|
42
57
|
/** Auth-code TTL is 60 s — framework refuses anything longer. */
|
|
43
58
|
expiresAt: number;
|
|
44
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* OIDC Core §5.1 `address` claim. Structured object value rather than a
|
|
62
|
+
* scalar — distinct from the rest of the profile fields.
|
|
63
|
+
*/
|
|
64
|
+
export type AddressClaim = {
|
|
65
|
+
formatted?: string;
|
|
66
|
+
street_address?: string;
|
|
67
|
+
locality?: string;
|
|
68
|
+
region?: string;
|
|
69
|
+
postal_code?: string;
|
|
70
|
+
country?: string;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* OIDC Core §5.1 profile / email / phone / address claims, gated by the
|
|
74
|
+
* `profile` / `email` / `phone` / `address` scopes via §5.4. Reused by
|
|
75
|
+
* `IdTokenClaims` and the `/userinfo` response so the two surfaces share
|
|
76
|
+
* exactly one source of truth for scope→claim mapping.
|
|
77
|
+
*
|
|
78
|
+
* Every field is optional: presence depends on (a) which scopes were
|
|
79
|
+
* granted and (b) whether the host populated the matching key in
|
|
80
|
+
* `SubjectClaim.properties`.
|
|
81
|
+
*/
|
|
82
|
+
export type ScopedProfileClaims = {
|
|
83
|
+
name?: string;
|
|
84
|
+
given_name?: string;
|
|
85
|
+
family_name?: string;
|
|
86
|
+
middle_name?: string;
|
|
87
|
+
nickname?: string;
|
|
88
|
+
preferred_username?: string;
|
|
89
|
+
profile?: string;
|
|
90
|
+
picture?: string;
|
|
91
|
+
website?: string;
|
|
92
|
+
gender?: string;
|
|
93
|
+
birthdate?: string;
|
|
94
|
+
zoneinfo?: string;
|
|
95
|
+
locale?: string;
|
|
96
|
+
updated_at?: number;
|
|
97
|
+
email?: string;
|
|
98
|
+
email_verified?: boolean;
|
|
99
|
+
phone_number?: string;
|
|
100
|
+
phone_number_verified?: boolean;
|
|
101
|
+
address?: AddressClaim;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* OIDC `id_token` JWT claims this IdP issues at `/token` when `openid`
|
|
105
|
+
* scope is granted (OIDC Core §2). Distinct from access-token claims:
|
|
106
|
+
*
|
|
107
|
+
* - `aud` is the relying-party `client_id` (not the API audience).
|
|
108
|
+
* - `nonce` echoes the RP's `/authorize` `nonce` parameter when present.
|
|
109
|
+
* - `auth_time` is stable across refresh-token rotations (OIDC Core §12).
|
|
110
|
+
* - `at_hash` is recommended whenever an id_token and access_token are
|
|
111
|
+
* returned in the same response (§3.1.3.6).
|
|
112
|
+
*
|
|
113
|
+
* Standard OIDC claim names use snake_case on the wire; TypeScript field
|
|
114
|
+
* names match to keep the marshalling 1:1.
|
|
115
|
+
*/
|
|
116
|
+
export type IdTokenClaims = ScopedProfileClaims & {
|
|
117
|
+
iss: string;
|
|
118
|
+
sub: string;
|
|
119
|
+
aud: string;
|
|
120
|
+
exp: number;
|
|
121
|
+
iat: number;
|
|
122
|
+
/** Seconds-since-epoch when end-user auth completed. */
|
|
123
|
+
auth_time?: number;
|
|
124
|
+
/** RP-supplied OIDC nonce, when present. MUST equal the `/authorize` value. */
|
|
125
|
+
nonce?: string;
|
|
126
|
+
/** Authentication Methods References (RFC 8176). */
|
|
127
|
+
amr?: string[];
|
|
128
|
+
/** Authentication Context Class Reference. */
|
|
129
|
+
acr?: string;
|
|
130
|
+
/** Authorized party — the client_id of the party the id_token is for. */
|
|
131
|
+
azp?: string;
|
|
132
|
+
/** Access-token hash (OIDC Core §3.1.3.6). */
|
|
133
|
+
at_hash?: string;
|
|
134
|
+
};
|
|
45
135
|
/** Access-token JWT claims this IdP issues. */
|
|
46
136
|
export type AccessTokenClaims = {
|
|
47
137
|
iss: string;
|
|
@@ -56,10 +146,30 @@ export type AccessTokenClaims = {
|
|
|
56
146
|
/** Factory kind that originated this token. */
|
|
57
147
|
mkind?: string;
|
|
58
148
|
scope?: string;
|
|
149
|
+
/**
|
|
150
|
+
* Seconds-since-epoch when the end-user originally authenticated
|
|
151
|
+
* (OIDC Core §2). Stable across refresh-token rotation and across
|
|
152
|
+
* RFC 8693 token-exchange (§12 — exchanging an audience does NOT
|
|
153
|
+
* re-authenticate the user). Absent on `client_credentials` grants
|
|
154
|
+
* where there is no end-user.
|
|
155
|
+
*
|
|
156
|
+
* Carried on the access token so RFC 8693 `subject_token` consumers
|
|
157
|
+
* can propagate it without needing the original id_token. Resource
|
|
158
|
+
* servers typically ignore it; it's there for the IdP's own
|
|
159
|
+
* downstream issuance.
|
|
160
|
+
*/
|
|
161
|
+
auth_time?: number;
|
|
59
162
|
/** DPoP confirmation claim (Phase 8). */
|
|
60
163
|
cnf?: {
|
|
61
164
|
jkt: string;
|
|
62
165
|
};
|
|
166
|
+
/**
|
|
167
|
+
* OIDC Core §5.5 — list of claim names the RP requested for the
|
|
168
|
+
* `/userinfo` response via the `claims` parameter. The resource server
|
|
169
|
+
* surface uses this to bypass scope-gating per §5.5; it is empty /
|
|
170
|
+
* absent when the RP did not use the `claims` parameter.
|
|
171
|
+
*/
|
|
172
|
+
uic?: string[];
|
|
63
173
|
/** The structured subject (matches `SubjectClaim`). Inlined for resource servers. */
|
|
64
174
|
claim: SubjectClaim;
|
|
65
175
|
};
|
|
@@ -87,6 +197,24 @@ export type RefreshTokenPayload = {
|
|
|
87
197
|
methodId: string;
|
|
88
198
|
/** Factory kind (`MethodConfig.kind`) that originated the chain. */
|
|
89
199
|
methodKind: string;
|
|
200
|
+
/**
|
|
201
|
+
* Seconds-since-epoch when end-user authentication originally completed
|
|
202
|
+
* (OIDC Core §2 `auth_time`). Stable across refresh-token rotations —
|
|
203
|
+
* `auth_time` does **not** advance on refresh, only on re-authentication.
|
|
204
|
+
*/
|
|
205
|
+
authTime: number;
|
|
206
|
+
/**
|
|
207
|
+
* RFC 7638 JWK thumbprint of the client's DPoP key (RFC 9449 §6.1).
|
|
208
|
+
* Present when the original token grant was DPoP-bound. Refresh-grant
|
|
209
|
+
* rotation REQUIRES a fresh DPoP proof whose thumbprint matches; absent
|
|
210
|
+
* = the token is plain Bearer and Bearer is acceptable on refresh.
|
|
211
|
+
*/
|
|
212
|
+
dpopJkt?: string;
|
|
213
|
+
/**
|
|
214
|
+
* OIDC Core §12 — the original RP-requested claims, preserved so
|
|
215
|
+
* refresh-grant id_token + /userinfo responses keep returning them.
|
|
216
|
+
*/
|
|
217
|
+
claimsRequest?: ClaimsRequest;
|
|
90
218
|
/** Wall-clock issuance and absolute-expiry timestamps. */
|
|
91
219
|
issuedAt: number;
|
|
92
220
|
expiresAt: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/types/token.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,UAAU,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAA;IAChB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACxC,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAA;IACvB,+DAA+D;IAC/D,UAAU,EAAE,OAAO,CAAA;IACnB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,GAAG,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACrB,qFAAqF;IACrF,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA"}
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/types/token.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { authError } from "../../types/error"
|
|
10
10
|
import type { FlowRecord } from "../../types/flow"
|
|
11
|
-
import type {
|
|
11
|
+
import type {
|
|
12
|
+
ParRecord,
|
|
13
|
+
SessionRecord,
|
|
14
|
+
SessionStore,
|
|
15
|
+
} from "../../ports/session-store"
|
|
12
16
|
import type { Result } from "../../types/result"
|
|
13
17
|
import { err, ok } from "../../types/result"
|
|
14
18
|
import type { Clock } from "./clock"
|
|
@@ -19,6 +23,11 @@ type StoredFlow = {
|
|
|
19
23
|
expiresAt: number
|
|
20
24
|
}
|
|
21
25
|
|
|
26
|
+
type StoredPar = {
|
|
27
|
+
record: ParRecord
|
|
28
|
+
expiresAt: number
|
|
29
|
+
}
|
|
30
|
+
|
|
22
31
|
export type MemorySessionStoreOptions = {
|
|
23
32
|
clock?: Clock
|
|
24
33
|
}
|
|
@@ -27,6 +36,7 @@ export class MemorySessionStore implements SessionStore {
|
|
|
27
36
|
#clock: Clock
|
|
28
37
|
#flows = new Map<string, StoredFlow>()
|
|
29
38
|
#sessions = new Map<string, SessionRecord>()
|
|
39
|
+
#par = new Map<string, StoredPar>()
|
|
30
40
|
|
|
31
41
|
constructor(opts: MemorySessionStoreOptions = {}) {
|
|
32
42
|
this.#clock = opts.clock ?? realClock
|
|
@@ -125,4 +135,37 @@ export class MemorySessionStore implements SessionStore {
|
|
|
125
135
|
this.#sessions.delete(sessionId)
|
|
126
136
|
return ok(undefined)
|
|
127
137
|
}
|
|
138
|
+
|
|
139
|
+
async savePar(
|
|
140
|
+
requestUri: string,
|
|
141
|
+
payload: ParRecord,
|
|
142
|
+
ttl: number,
|
|
143
|
+
): Promise<Result<void>> {
|
|
144
|
+
if (ttl <= 0) {
|
|
145
|
+
return err(
|
|
146
|
+
authError.internalError(`savePar: ttl must be positive, got ${ttl}`),
|
|
147
|
+
)
|
|
148
|
+
}
|
|
149
|
+
this.#par.set(requestUri, {
|
|
150
|
+
record: payload,
|
|
151
|
+
expiresAt: this.#clock() + ttl,
|
|
152
|
+
})
|
|
153
|
+
return ok(undefined)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async consumePar(requestUri: string): Promise<Result<ParRecord>> {
|
|
157
|
+
const stored = this.#par.get(requestUri)
|
|
158
|
+
if (!stored) {
|
|
159
|
+
return err(
|
|
160
|
+
authError.unknownState(
|
|
161
|
+
`par "${requestUri}" unknown or already consumed`,
|
|
162
|
+
),
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
this.#par.delete(requestUri)
|
|
166
|
+
if (this.#clock() >= stored.expiresAt) {
|
|
167
|
+
return err(authError.unknownState(`par "${requestUri}" expired`))
|
|
168
|
+
}
|
|
169
|
+
return ok(stored.record)
|
|
170
|
+
}
|
|
128
171
|
}
|
|
@@ -43,6 +43,8 @@ export class MemoryTokenStore implements TokenStore {
|
|
|
43
43
|
#clock: Clock
|
|
44
44
|
#codes = new Map<string, StoredCode>()
|
|
45
45
|
#refresh = new Map<string, StoredRefresh>()
|
|
46
|
+
/** DPoP proof `jti` replay-protection map. Value is expiry timestamp. */
|
|
47
|
+
#dpopJtis = new Map<string, number>()
|
|
46
48
|
|
|
47
49
|
constructor(opts: MemoryTokenStoreOptions = {}) {
|
|
48
50
|
this.#clock = opts.clock ?? realClock
|
|
@@ -162,4 +164,18 @@ export class MemoryTokenStore implements TokenStore {
|
|
|
162
164
|
}
|
|
163
165
|
return ok(undefined)
|
|
164
166
|
}
|
|
167
|
+
|
|
168
|
+
async recordDpopJti(jti: string, ttlMs: number): Promise<Result<void>> {
|
|
169
|
+
const now = this.#clock()
|
|
170
|
+
// Sweep expired entries opportunistically — keeps the map bounded
|
|
171
|
+
// under sustained load without a separate GC pass.
|
|
172
|
+
for (const [k, exp] of this.#dpopJtis) {
|
|
173
|
+
if (exp <= now) this.#dpopJtis.delete(k)
|
|
174
|
+
}
|
|
175
|
+
if (this.#dpopJtis.has(jti)) {
|
|
176
|
+
return err(authError.invalidGrant(`dpop jti "${jti}" replayed`))
|
|
177
|
+
}
|
|
178
|
+
this.#dpopJtis.set(jti, now + ttlMs)
|
|
179
|
+
return ok(undefined)
|
|
180
|
+
}
|
|
165
181
|
}
|
package/src/client.ts
CHANGED
|
@@ -91,6 +91,14 @@ export interface Tokens {
|
|
|
91
91
|
* The number of seconds until the access token expires.
|
|
92
92
|
*/
|
|
93
93
|
expiresIn: number
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The OIDC `id_token` (signed JWT), present when `scope=openid` was granted.
|
|
97
|
+
*
|
|
98
|
+
* Refresh-grant rotation reissues this with a stable `auth_time` per
|
|
99
|
+
* OIDC Core §12 and deliberately omits the original `nonce`.
|
|
100
|
+
*/
|
|
101
|
+
idToken?: string
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
interface ResponseLike {
|
|
@@ -178,6 +186,18 @@ export interface AuthorizeOptions {
|
|
|
178
186
|
* If there's only one provider configured, the user will be redirected to that.
|
|
179
187
|
*/
|
|
180
188
|
provider?: string
|
|
189
|
+
/**
|
|
190
|
+
* OAuth scopes to request, e.g. `["openid", "email", "profile"]`.
|
|
191
|
+
*
|
|
192
|
+
* Pass `openid` to request an `id_token` at `/token` (OIDC Core §2). Pass
|
|
193
|
+
* `email` / `profile` / `phone` / `address` to opt into the standard §5.4
|
|
194
|
+
* profile claim sets on the id_token and `/userinfo` response.
|
|
195
|
+
*
|
|
196
|
+
* Accepts an array or a pre-joined space-separated string. When omitted,
|
|
197
|
+
* no `scope` is sent — the IdP's default grant applies, which typically
|
|
198
|
+
* does NOT include `openid` and therefore does NOT issue an id_token.
|
|
199
|
+
*/
|
|
200
|
+
scope?: string | string[]
|
|
181
201
|
}
|
|
182
202
|
|
|
183
203
|
export interface AuthorizeResult {
|
|
@@ -588,6 +608,12 @@ export function createClient(input: ClientInput): Client {
|
|
|
588
608
|
result.searchParams.set("response_type", response)
|
|
589
609
|
result.searchParams.set("state", challenge.state)
|
|
590
610
|
if (opts?.provider) result.searchParams.set("provider", opts.provider)
|
|
611
|
+
if (opts?.scope !== undefined) {
|
|
612
|
+
const scope = Array.isArray(opts.scope)
|
|
613
|
+
? opts.scope.join(" ")
|
|
614
|
+
: opts.scope
|
|
615
|
+
if (scope) result.searchParams.set("scope", scope)
|
|
616
|
+
}
|
|
591
617
|
if (opts?.pkce && response === "code") {
|
|
592
618
|
const pkce = await generatePKCE()
|
|
593
619
|
result.searchParams.set("code_challenge_method", "S256")
|
|
@@ -648,6 +674,9 @@ export function createClient(input: ClientInput): Client {
|
|
|
648
674
|
access: json.access_token as string,
|
|
649
675
|
refresh: json.refresh_token as string,
|
|
650
676
|
expiresIn: json.expires_in as number,
|
|
677
|
+
...(typeof json.id_token === "string"
|
|
678
|
+
? { idToken: json.id_token as string }
|
|
679
|
+
: {}),
|
|
651
680
|
},
|
|
652
681
|
}
|
|
653
682
|
},
|
|
@@ -691,6 +720,9 @@ export function createClient(input: ClientInput): Client {
|
|
|
691
720
|
access: json.access_token as string,
|
|
692
721
|
refresh: json.refresh_token as string,
|
|
693
722
|
expiresIn: json.expires_in as number,
|
|
723
|
+
...(typeof json.id_token === "string"
|
|
724
|
+
? { idToken: json.id_token as string }
|
|
725
|
+
: {}),
|
|
694
726
|
},
|
|
695
727
|
}
|
|
696
728
|
},
|
package/src/domain/authorize.ts
CHANGED
|
@@ -221,6 +221,10 @@ export async function startAuthorize(
|
|
|
221
221
|
prompt: req.prompt,
|
|
222
222
|
uiLocales: req.uiLocales,
|
|
223
223
|
nonce,
|
|
224
|
+
...(req.nonce !== undefined ? { appNonce: req.nonce } : {}),
|
|
225
|
+
...(req.claimsRequest !== undefined
|
|
226
|
+
? { claimsRequest: req.claimsRequest }
|
|
227
|
+
: {}),
|
|
224
228
|
clientPkce: req.codeChallenge
|
|
225
229
|
? { challenge: req.codeChallenge, method: "S256" }
|
|
226
230
|
: undefined,
|
|
@@ -387,6 +391,11 @@ async function issueCodeFromInlineSuccess(
|
|
|
387
391
|
context: flow.context ?? null,
|
|
388
392
|
providerSubject: result.providerSubject,
|
|
389
393
|
properties: result.properties,
|
|
394
|
+
...(flow.appNonce !== undefined ? { appNonce: flow.appNonce } : {}),
|
|
395
|
+
...(flow.claimsRequest !== undefined
|
|
396
|
+
? { claimsRequest: flow.claimsRequest }
|
|
397
|
+
: {}),
|
|
398
|
+
authTime: Math.floor(now / 1000),
|
|
390
399
|
expiresAt: now + AUTH_CODE_TTL_MS,
|
|
391
400
|
},
|
|
392
401
|
AUTH_CODE_TTL_MS,
|
package/src/domain/callback.ts
CHANGED
|
@@ -207,6 +207,11 @@ async function translate(
|
|
|
207
207
|
context: flow.context ?? null,
|
|
208
208
|
providerSubject: result.providerSubject,
|
|
209
209
|
properties: result.properties,
|
|
210
|
+
...(flow.appNonce !== undefined ? { appNonce: flow.appNonce } : {}),
|
|
211
|
+
...(flow.claimsRequest !== undefined
|
|
212
|
+
? { claimsRequest: flow.claimsRequest }
|
|
213
|
+
: {}),
|
|
214
|
+
authTime: Math.floor(now / 1000),
|
|
210
215
|
expiresAt: now + AUTH_CODE_TTL_MS,
|
|
211
216
|
},
|
|
212
217
|
AUTH_CODE_TTL_MS,
|
|
@@ -54,6 +54,8 @@ export type ClientCredentialsDeps = {
|
|
|
54
54
|
issuerUrl: string
|
|
55
55
|
clock: () => number
|
|
56
56
|
newRefreshFamily?: () => string
|
|
57
|
+
/** See `IdPOptions.customScopeClaims`. Forwarded to `mintTokens`. */
|
|
58
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
export async function clientCredentialsGrant(
|
package/src/domain/discovery.ts
CHANGED
|
@@ -19,11 +19,37 @@ export type DiscoveryDocument = {
|
|
|
19
19
|
jwks_uri: string
|
|
20
20
|
revocation_endpoint: string
|
|
21
21
|
introspection_endpoint: string
|
|
22
|
+
/** OIDC RP-Initiated Logout 1.0 §2. */
|
|
23
|
+
end_session_endpoint: string
|
|
24
|
+
/** RFC 7591 §3.1. */
|
|
25
|
+
registration_endpoint: string
|
|
26
|
+
/** RFC 9126 §5. */
|
|
27
|
+
pushed_authorization_request_endpoint: string
|
|
28
|
+
/**
|
|
29
|
+
* RFC 9126 §5. True iff every client on this tenant is required to use
|
|
30
|
+
* PAR. We advertise `false` at the tenant level — the per-client toggle
|
|
31
|
+
* is read at request time.
|
|
32
|
+
*/
|
|
33
|
+
require_pushed_authorization_requests: boolean
|
|
34
|
+
/** RFC 9449 §5.1 — DPoP algorithms accepted on proof JWTs. */
|
|
35
|
+
dpop_signing_alg_values_supported: string[]
|
|
22
36
|
response_types_supported: string[]
|
|
23
37
|
grant_types_supported: string[]
|
|
24
38
|
subject_types_supported: string[]
|
|
25
39
|
id_token_signing_alg_values_supported: string[]
|
|
26
40
|
scopes_supported: string[]
|
|
41
|
+
/** OIDC Core §3 — registered claim names the IdP can return. */
|
|
42
|
+
claims_supported: string[]
|
|
43
|
+
/** OIDC Core §5.5 — `claims` request parameter is honored. */
|
|
44
|
+
claims_parameter_supported: boolean
|
|
45
|
+
/** OIDC Core §6.1 — JAR (`request` parameter). Not implemented. */
|
|
46
|
+
request_parameter_supported: boolean
|
|
47
|
+
/** OIDC Core §6.2 — JAR (`request_uri` parameter). Not implemented. */
|
|
48
|
+
request_uri_parameter_supported: boolean
|
|
49
|
+
/** OIDC Core §6.2 — whether `request_uri` values must be pre-registered. */
|
|
50
|
+
require_request_uri_registration: boolean
|
|
51
|
+
/** OIDC Core §3.1.2.1 — UI locales the OP can render. */
|
|
52
|
+
ui_locales_supported?: string[]
|
|
27
53
|
token_endpoint_auth_methods_supported: string[]
|
|
28
54
|
code_challenge_methods_supported: string[]
|
|
29
55
|
}
|
|
@@ -38,14 +64,30 @@ export type DiscoveryDeps = {
|
|
|
38
64
|
jwks: string
|
|
39
65
|
revoke: string
|
|
40
66
|
introspect: string
|
|
67
|
+
endSession: string
|
|
68
|
+
par: string
|
|
69
|
+
register: string
|
|
41
70
|
}>
|
|
42
71
|
/** Advertised scopes. Defaults to `["openid", "email", "profile"]`. */
|
|
43
72
|
scopes?: string[]
|
|
73
|
+
/** Advertised UI locales. Defaults to `["en"]`. */
|
|
74
|
+
uiLocales?: string[]
|
|
75
|
+
/**
|
|
76
|
+
* Host-supplied scope → claim-names map. Each key adds a scope to
|
|
77
|
+
* `scopes_supported`; the union of values augments `claims_supported`.
|
|
78
|
+
* Mirrors `IdPOptions.customScopeClaims`.
|
|
79
|
+
*/
|
|
80
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>
|
|
44
81
|
}
|
|
45
82
|
|
|
46
83
|
export function buildDiscoveryDocument(deps: DiscoveryDeps): DiscoveryDocument {
|
|
47
84
|
const base = deps.issuerUrl.replace(/\/+$/, "")
|
|
48
85
|
const p = deps.paths ?? {}
|
|
86
|
+
const customScopeKeys = Object.keys(deps.customScopeClaims ?? {})
|
|
87
|
+
const customClaimNames = new Set<string>()
|
|
88
|
+
for (const list of Object.values(deps.customScopeClaims ?? {})) {
|
|
89
|
+
for (const name of list) customClaimNames.add(name)
|
|
90
|
+
}
|
|
49
91
|
return {
|
|
50
92
|
issuer: deps.issuerUrl,
|
|
51
93
|
authorization_endpoint: `${base}${p.authorize ?? "/authorize"}`,
|
|
@@ -54,15 +96,51 @@ export function buildDiscoveryDocument(deps: DiscoveryDeps): DiscoveryDocument {
|
|
|
54
96
|
jwks_uri: `${base}${p.jwks ?? "/.well-known/jwks.json"}`,
|
|
55
97
|
revocation_endpoint: `${base}${p.revoke ?? "/revoke"}`,
|
|
56
98
|
introspection_endpoint: `${base}${p.introspect ?? "/introspect"}`,
|
|
99
|
+
end_session_endpoint: `${base}${p.endSession ?? "/end_session"}`,
|
|
100
|
+
registration_endpoint: `${base}${p.register ?? "/register"}`,
|
|
101
|
+
pushed_authorization_request_endpoint: `${base}${p.par ?? "/par"}`,
|
|
102
|
+
require_pushed_authorization_requests: false,
|
|
103
|
+
dpop_signing_alg_values_supported: ["ES256", "EdDSA"],
|
|
57
104
|
response_types_supported: ["code"],
|
|
58
105
|
grant_types_supported: [
|
|
59
106
|
"authorization_code",
|
|
60
107
|
"refresh_token",
|
|
61
108
|
"client_credentials",
|
|
62
109
|
],
|
|
63
|
-
subject_types_supported: ["public"],
|
|
110
|
+
subject_types_supported: ["public", "pairwise"],
|
|
64
111
|
id_token_signing_alg_values_supported: ["ES256", "EdDSA"],
|
|
65
|
-
scopes_supported:
|
|
112
|
+
scopes_supported: [
|
|
113
|
+
...(deps.scopes ?? ["openid", "email", "profile"]),
|
|
114
|
+
...customScopeKeys,
|
|
115
|
+
],
|
|
116
|
+
claims_supported: [
|
|
117
|
+
"sub",
|
|
118
|
+
"iss",
|
|
119
|
+
"aud",
|
|
120
|
+
"exp",
|
|
121
|
+
"iat",
|
|
122
|
+
"auth_time",
|
|
123
|
+
"nonce",
|
|
124
|
+
"amr",
|
|
125
|
+
"at_hash",
|
|
126
|
+
"email",
|
|
127
|
+
"email_verified",
|
|
128
|
+
"name",
|
|
129
|
+
"given_name",
|
|
130
|
+
"family_name",
|
|
131
|
+
"preferred_username",
|
|
132
|
+
"picture",
|
|
133
|
+
"locale",
|
|
134
|
+
"phone_number",
|
|
135
|
+
"phone_number_verified",
|
|
136
|
+
"address",
|
|
137
|
+
...customClaimNames,
|
|
138
|
+
],
|
|
139
|
+
claims_parameter_supported: true,
|
|
140
|
+
request_parameter_supported: false,
|
|
141
|
+
request_uri_parameter_supported: false,
|
|
142
|
+
require_request_uri_registration: false,
|
|
143
|
+
ui_locales_supported: deps.uiLocales ?? ["en"],
|
|
66
144
|
token_endpoint_auth_methods_supported: [
|
|
67
145
|
"client_secret_basic",
|
|
68
146
|
"client_secret_post",
|