@atrib/verify 0.5.1 → 0.6.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/README.md +80 -1
- package/dist/authorization-evidence.d.ts +155 -0
- package/dist/authorization-evidence.d.ts.map +1 -0
- package/dist/authorization-evidence.js +423 -0
- package/dist/authorization-evidence.js.map +1 -0
- package/dist/dpop-replay-cache.d.ts +35 -0
- package/dist/dpop-replay-cache.d.ts.map +1 -0
- package/dist/dpop-replay-cache.js +50 -0
- package/dist/dpop-replay-cache.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/oauth-introspection.d.ts +38 -0
- package/dist/oauth-introspection.d.ts.map +1 -0
- package/dist/oauth-introspection.js +118 -0
- package/dist/oauth-introspection.js.map +1 -0
- package/dist/resolve-identity.js +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/verifier.d.ts +6 -0
- package/dist/verifier.d.ts.map +1 -1
- package/dist/verifier.js +55 -0
- package/dist/verifier.js.map +1 -1
- package/dist/verify-record.d.ts +38 -6
- package/dist/verify-record.d.ts.map +1 -1
- package/dist/verify-record.js +99 -21
- package/dist/verify-record.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { base64urlEncode, sha256 } from '@atrib/mcp';
|
|
3
|
+
import { calculateJwkThumbprint, createLocalJWKSet, decodeJwt, decodeProtectedHeader, importJWK, jwtVerify, } from 'jose';
|
|
4
|
+
function asArray(value) {
|
|
5
|
+
if (typeof value === 'string')
|
|
6
|
+
return [value];
|
|
7
|
+
if (Array.isArray(value))
|
|
8
|
+
return value.filter((entry) => typeof entry === 'string');
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
function asRecord(value) {
|
|
12
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
13
|
+
return null;
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
function accessTokenHash(accessToken) {
|
|
17
|
+
return base64urlEncode(sha256(new TextEncoder().encode(accessToken)));
|
|
18
|
+
}
|
|
19
|
+
function normalizeScopes(claims) {
|
|
20
|
+
if (!claims)
|
|
21
|
+
return [];
|
|
22
|
+
const scopeValues = [
|
|
23
|
+
...asArray(claims.scope)
|
|
24
|
+
.flatMap((entry) => entry.split(/\s+/))
|
|
25
|
+
.filter(Boolean),
|
|
26
|
+
...asArray(claims.scp)
|
|
27
|
+
.flatMap((entry) => entry.split(/\s+/))
|
|
28
|
+
.filter(Boolean),
|
|
29
|
+
];
|
|
30
|
+
return Array.from(new Set(scopeValues)).sort();
|
|
31
|
+
}
|
|
32
|
+
function normalizeAudience(claims) {
|
|
33
|
+
if (!claims)
|
|
34
|
+
return [];
|
|
35
|
+
return asArray(claims.aud).sort();
|
|
36
|
+
}
|
|
37
|
+
function normalizeResource(claims) {
|
|
38
|
+
if (!claims)
|
|
39
|
+
return [];
|
|
40
|
+
return asArray(claims.resource).sort();
|
|
41
|
+
}
|
|
42
|
+
function normalizeJwks(jwks) {
|
|
43
|
+
return Array.isArray(jwks) ? { keys: jwks } : jwks;
|
|
44
|
+
}
|
|
45
|
+
function claimsFromIntrospection(introspection) {
|
|
46
|
+
const claims = {};
|
|
47
|
+
if (typeof introspection.iss === 'string')
|
|
48
|
+
claims.iss = introspection.iss;
|
|
49
|
+
if (typeof introspection.sub === 'string')
|
|
50
|
+
claims.sub = introspection.sub;
|
|
51
|
+
if (introspection.aud !== undefined)
|
|
52
|
+
claims.aud = introspection.aud;
|
|
53
|
+
if (typeof introspection.exp === 'number')
|
|
54
|
+
claims.exp = introspection.exp;
|
|
55
|
+
if (typeof introspection.iat === 'number')
|
|
56
|
+
claims.iat = introspection.iat;
|
|
57
|
+
if (typeof introspection.nbf === 'number')
|
|
58
|
+
claims.nbf = introspection.nbf;
|
|
59
|
+
if (typeof introspection.jti === 'string')
|
|
60
|
+
claims.jti = introspection.jti;
|
|
61
|
+
if (typeof introspection.scope === 'string')
|
|
62
|
+
claims.scope = introspection.scope;
|
|
63
|
+
if (typeof introspection.client_id === 'string')
|
|
64
|
+
claims.client_id = introspection.client_id;
|
|
65
|
+
if (introspection.resource !== undefined)
|
|
66
|
+
claims.resource = introspection.resource;
|
|
67
|
+
if (introspection.authorization_details !== undefined) {
|
|
68
|
+
claims.authorization_details = introspection.authorization_details;
|
|
69
|
+
}
|
|
70
|
+
if (introspection.cnf !== undefined)
|
|
71
|
+
claims.cnf = introspection.cnf;
|
|
72
|
+
if (introspection.act !== undefined)
|
|
73
|
+
claims.act = introspection.act;
|
|
74
|
+
if (introspection.may_act !== undefined)
|
|
75
|
+
claims.may_act = introspection.may_act;
|
|
76
|
+
return claims;
|
|
77
|
+
}
|
|
78
|
+
function check(type, status, expected, actual, reason) {
|
|
79
|
+
const result = { type, status };
|
|
80
|
+
if (expected !== undefined)
|
|
81
|
+
result.expected = expected;
|
|
82
|
+
if (actual !== undefined)
|
|
83
|
+
result.actual = actual;
|
|
84
|
+
if (reason !== undefined)
|
|
85
|
+
result.reason = reason;
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
async function resolveClaims(input) {
|
|
89
|
+
const signaturePolicy = input.signaturePolicy ?? 'require';
|
|
90
|
+
const token = {
|
|
91
|
+
jwt_present: typeof input.accessTokenJwt === 'string',
|
|
92
|
+
introspection_present: input.introspection !== undefined,
|
|
93
|
+
verified: null,
|
|
94
|
+
alg: null,
|
|
95
|
+
kid: null,
|
|
96
|
+
claims_verified: input.claimsVerified === true,
|
|
97
|
+
};
|
|
98
|
+
if (input.accessTokenJwt) {
|
|
99
|
+
try {
|
|
100
|
+
const header = decodeProtectedHeader(input.accessTokenJwt);
|
|
101
|
+
token.alg = typeof header.alg === 'string' ? header.alg : null;
|
|
102
|
+
token.kid = typeof header.kid === 'string' ? header.kid : null;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
token.alg = null;
|
|
106
|
+
token.kid = null;
|
|
107
|
+
}
|
|
108
|
+
if (input.jwks && signaturePolicy !== 'off') {
|
|
109
|
+
const verifyOptions = {};
|
|
110
|
+
if (input.issuer)
|
|
111
|
+
verifyOptions.issuer = input.issuer;
|
|
112
|
+
if (input.audience)
|
|
113
|
+
verifyOptions.audience = input.audience;
|
|
114
|
+
if (input.clockSkewSeconds !== undefined)
|
|
115
|
+
verifyOptions.clockTolerance = input.clockSkewSeconds;
|
|
116
|
+
if (input.nowSeconds !== undefined) {
|
|
117
|
+
verifyOptions.currentDate = new Date(input.nowSeconds * 1000);
|
|
118
|
+
}
|
|
119
|
+
const verified = await jwtVerify(input.accessTokenJwt, createLocalJWKSet(normalizeJwks(input.jwks)), verifyOptions);
|
|
120
|
+
token.verified = true;
|
|
121
|
+
token.claims_verified = true;
|
|
122
|
+
return { claims: verified.payload, token };
|
|
123
|
+
}
|
|
124
|
+
const decoded = decodeJwt(input.accessTokenJwt);
|
|
125
|
+
token.verified = false;
|
|
126
|
+
token.claims_verified = signaturePolicy === 'off';
|
|
127
|
+
return { claims: decoded, token };
|
|
128
|
+
}
|
|
129
|
+
if (input.introspection) {
|
|
130
|
+
token.verified = input.introspectionVerified === true;
|
|
131
|
+
token.claims_verified = input.introspectionVerified === true;
|
|
132
|
+
return {
|
|
133
|
+
claims: claimsFromIntrospection(input.introspection),
|
|
134
|
+
token,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
claims: input.claims ?? null,
|
|
139
|
+
token,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function pushScopeChecks(checks, scopes, requiredScopes) {
|
|
143
|
+
if (!requiredScopes || requiredScopes.length === 0) {
|
|
144
|
+
checks.push(check('scope', 'not_checked'));
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const missing = requiredScopes.filter((scope) => !scopes.includes(scope));
|
|
148
|
+
checks.push(check('scope', missing.length === 0 ? 'passed' : 'failed', requiredScopes, scopes, missing.length === 0 ? undefined : `missing scopes: ${missing.join(', ')}`));
|
|
149
|
+
return missing.length === 0;
|
|
150
|
+
}
|
|
151
|
+
function pushAudienceChecks(checks, claims, input) {
|
|
152
|
+
const audience = normalizeAudience(claims);
|
|
153
|
+
const expectedAudience = asArray(input.audience);
|
|
154
|
+
if (expectedAudience.length > 0) {
|
|
155
|
+
const missing = expectedAudience.filter((entry) => !audience.includes(entry));
|
|
156
|
+
checks.push(check('audience', missing.length === 0 ? 'passed' : 'failed', expectedAudience, audience, missing.length === 0 ? undefined : `missing audience: ${missing.join(', ')}`));
|
|
157
|
+
}
|
|
158
|
+
const expectedResource = input.resource ?? input.protectedResourceMetadata?.resource;
|
|
159
|
+
if (expectedResource) {
|
|
160
|
+
const resources = normalizeResource(claims);
|
|
161
|
+
const matchesAudience = audience.includes(expectedResource);
|
|
162
|
+
const matchesResource = resources.includes(expectedResource);
|
|
163
|
+
checks.push(check('resource', matchesAudience || matchesResource ? 'passed' : 'failed', expectedResource, { aud: audience, resource: resources }, matchesAudience || matchesResource
|
|
164
|
+
? undefined
|
|
165
|
+
: 'resource not present in aud or resource claims'));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function pushMetadataChecks(checks, claims, metadata) {
|
|
169
|
+
if (!metadata)
|
|
170
|
+
return;
|
|
171
|
+
if (metadata.authorization_servers && metadata.authorization_servers.length > 0) {
|
|
172
|
+
const issuer = typeof claims?.iss === 'string' ? claims.iss : null;
|
|
173
|
+
checks.push(check('protected_resource.authorization_servers', issuer && metadata.authorization_servers.includes(issuer) ? 'passed' : 'failed', metadata.authorization_servers, issuer));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function pushAuthorizationDetailsChecks(checks, claims, required) {
|
|
177
|
+
if (!required || required.length === 0) {
|
|
178
|
+
checks.push(check('authorization_details', 'not_checked'));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const presented = Array.isArray(claims?.authorization_details) ? claims.authorization_details : [];
|
|
182
|
+
for (const constraint of required) {
|
|
183
|
+
const match = presented.some((entry) => authorizationDetailMatches(entry, constraint));
|
|
184
|
+
checks.push(check('authorization_details', match ? 'passed' : 'failed', constraint, presented, match ? undefined : `missing authorization_details type: ${constraint.type}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function authorizationDetailMatches(entry, constraint) {
|
|
188
|
+
if (entry === null || typeof entry !== 'object' || Array.isArray(entry))
|
|
189
|
+
return false;
|
|
190
|
+
const record = entry;
|
|
191
|
+
if (record['type'] !== constraint.type)
|
|
192
|
+
return false;
|
|
193
|
+
if (constraint.actions && constraint.actions.length > 0) {
|
|
194
|
+
const actions = asArray(record['actions']);
|
|
195
|
+
if (constraint.actions.some((action) => !actions.includes(action)))
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
if (constraint.locations && constraint.locations.length > 0) {
|
|
199
|
+
const locations = asArray(record['locations']);
|
|
200
|
+
if (constraint.locations.some((location) => !locations.includes(location)))
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
function pushIdentityChecks(checks, claims, input) {
|
|
206
|
+
let delegationOk = null;
|
|
207
|
+
if (input.issuer) {
|
|
208
|
+
checks.push(check('issuer', claims?.iss === input.issuer ? 'passed' : 'failed', input.issuer, claims?.iss ?? null));
|
|
209
|
+
}
|
|
210
|
+
if (input.expectedSubject) {
|
|
211
|
+
checks.push(check('subject', claims?.sub === input.expectedSubject ? 'passed' : 'failed', input.expectedSubject, claims?.sub ?? null));
|
|
212
|
+
}
|
|
213
|
+
if (input.expectedClientId) {
|
|
214
|
+
checks.push(check('client_id', claims?.client_id === input.expectedClientId ? 'passed' : 'failed', input.expectedClientId, claims?.client_id ?? null));
|
|
215
|
+
}
|
|
216
|
+
if (input.expectedActorSubject) {
|
|
217
|
+
const actorSubject = claims?.act?.sub ?? claims?.may_act?.sub ?? null;
|
|
218
|
+
delegationOk = actorSubject === input.expectedActorSubject;
|
|
219
|
+
checks.push(check('actor_subject', delegationOk ? 'passed' : 'failed', input.expectedActorSubject, actorSubject));
|
|
220
|
+
}
|
|
221
|
+
if (input.requireCnf || input.requiredCnfJkt) {
|
|
222
|
+
const actual = claims?.cnf?.jkt ?? null;
|
|
223
|
+
const expected = input.requiredCnfJkt ?? 'present';
|
|
224
|
+
const passed = input.requiredCnfJkt
|
|
225
|
+
? actual === input.requiredCnfJkt
|
|
226
|
+
: typeof actual === 'string';
|
|
227
|
+
checks.push(check('cnf.jkt', passed ? 'passed' : 'failed', expected, actual));
|
|
228
|
+
}
|
|
229
|
+
return delegationOk;
|
|
230
|
+
}
|
|
231
|
+
async function verifyDpopProof(input, claims, requiredCnfJkt, replayCache) {
|
|
232
|
+
const constraints = [];
|
|
233
|
+
const errors = [];
|
|
234
|
+
const dpop = {
|
|
235
|
+
jwt_present: typeof input.proofJwt === 'string' && input.proofJwt.length > 0,
|
|
236
|
+
verified: false,
|
|
237
|
+
alg: null,
|
|
238
|
+
jkt: null,
|
|
239
|
+
jti: null,
|
|
240
|
+
htm: null,
|
|
241
|
+
htu: null,
|
|
242
|
+
};
|
|
243
|
+
try {
|
|
244
|
+
const header = decodeProtectedHeader(input.proofJwt);
|
|
245
|
+
dpop.alg = typeof header.alg === 'string' ? header.alg : null;
|
|
246
|
+
const headerRecord = header;
|
|
247
|
+
const publicJwk = asRecord(headerRecord['jwk']);
|
|
248
|
+
if (!publicJwk) {
|
|
249
|
+
constraints.push(check('dpop.jwk', 'failed', 'present', null, 'missing public jwk'));
|
|
250
|
+
return { dpop, constraints, errors };
|
|
251
|
+
}
|
|
252
|
+
if (header.typ !== 'dpop+jwt') {
|
|
253
|
+
constraints.push(check('dpop.typ', 'failed', 'dpop+jwt', header.typ ?? null));
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
constraints.push(check('dpop.typ', 'passed', 'dpop+jwt', header.typ));
|
|
257
|
+
}
|
|
258
|
+
const key = await importJWK(publicJwk, dpop.alg ?? undefined);
|
|
259
|
+
const verifyOptions = {};
|
|
260
|
+
const nowSeconds = input.nowSeconds;
|
|
261
|
+
if (nowSeconds !== undefined)
|
|
262
|
+
verifyOptions.currentDate = new Date(nowSeconds * 1000);
|
|
263
|
+
if (input.clockSkewSeconds !== undefined) {
|
|
264
|
+
verifyOptions.clockTolerance = input.clockSkewSeconds;
|
|
265
|
+
}
|
|
266
|
+
const verified = await jwtVerify(input.proofJwt, key, verifyOptions);
|
|
267
|
+
dpop.verified = true;
|
|
268
|
+
const payload = verified.payload;
|
|
269
|
+
dpop.htm = typeof payload.htm === 'string' ? payload.htm : null;
|
|
270
|
+
dpop.htu = typeof payload.htu === 'string' ? payload.htu : null;
|
|
271
|
+
dpop.jti = typeof payload.jti === 'string' ? payload.jti : null;
|
|
272
|
+
dpop.jkt = await calculateJwkThumbprint(publicJwk, 'sha256');
|
|
273
|
+
const expectedMethod = input.method.toUpperCase();
|
|
274
|
+
constraints.push(check('dpop.htm', dpop.htm === expectedMethod ? 'passed' : 'failed', expectedMethod, dpop.htm));
|
|
275
|
+
constraints.push(check('dpop.htu', dpop.htu === input.url ? 'passed' : 'failed', input.url, dpop.htu));
|
|
276
|
+
const jtiSeen = dpop.jti !== null && input.seenJtis?.includes(dpop.jti) === true
|
|
277
|
+
? true
|
|
278
|
+
: dpop.jti !== null && replayCache !== undefined
|
|
279
|
+
? !(await replayCache.checkAndRemember(replayKey(dpop.jti, dpop, claims), dpopReplayExpiresAtSeconds(payload, input)))
|
|
280
|
+
: false;
|
|
281
|
+
constraints.push(check('dpop.jti', dpop.jti && !jtiSeen ? 'passed' : 'failed', 'present and unseen', dpop.jti, jtiSeen ? 'jti already seen' : dpop.jti ? undefined : 'missing jti'));
|
|
282
|
+
const now = input.nowSeconds ?? Math.floor(Date.now() / 1000);
|
|
283
|
+
const skew = input.clockSkewSeconds ?? 0;
|
|
284
|
+
const maxAge = input.maxAgeSeconds ?? 300;
|
|
285
|
+
const iat = typeof payload.iat === 'number' ? payload.iat : null;
|
|
286
|
+
const iatPassed = iat !== null && iat <= now + skew && now - iat <= maxAge + skew;
|
|
287
|
+
constraints.push(check('dpop.iat', iatPassed ? 'passed' : 'failed', { maxAgeSeconds: maxAge, nowSeconds: now, clockSkewSeconds: skew }, iat));
|
|
288
|
+
const expectedAth = input.expectedAth ?? (input.accessToken ? accessTokenHash(input.accessToken) : undefined);
|
|
289
|
+
if (expectedAth) {
|
|
290
|
+
constraints.push(check('dpop.ath', payload.ath === expectedAth ? 'passed' : 'failed', expectedAth, payload.ath ?? null));
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
constraints.push(check('dpop.ath', 'not_checked'));
|
|
294
|
+
}
|
|
295
|
+
if (input.expectedNonce) {
|
|
296
|
+
constraints.push(check('dpop.nonce', payload.nonce === input.expectedNonce ? 'passed' : 'failed', input.expectedNonce, payload.nonce ?? null));
|
|
297
|
+
}
|
|
298
|
+
const expectedJkt = requiredCnfJkt ?? claims?.cnf?.jkt;
|
|
299
|
+
if (expectedJkt) {
|
|
300
|
+
constraints.push(check('dpop.cnf.jkt', dpop.jkt === expectedJkt ? 'passed' : 'failed', expectedJkt, dpop.jkt));
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
constraints.push(check('dpop.cnf.jkt', 'unresolved', 'access token cnf.jkt', dpop.jkt));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
errors.push(`oauth_evidence dpop proof error: ${err.message}`);
|
|
308
|
+
}
|
|
309
|
+
return { dpop, constraints, errors };
|
|
310
|
+
}
|
|
311
|
+
function replayKey(jti, dpop, claims) {
|
|
312
|
+
return {
|
|
313
|
+
jti,
|
|
314
|
+
...(dpop.jkt !== null ? { jkt: dpop.jkt } : {}),
|
|
315
|
+
...(dpop.htm !== null ? { htm: dpop.htm } : {}),
|
|
316
|
+
...(dpop.htu !== null ? { htu: dpop.htu } : {}),
|
|
317
|
+
...(typeof claims?.iss === 'string' ? { issuer: claims.iss } : {}),
|
|
318
|
+
...(typeof claims?.client_id === 'string' ? { client_id: claims.client_id } : {}),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function dpopReplayExpiresAtSeconds(payload, input) {
|
|
322
|
+
const now = input.nowSeconds ?? Math.floor(Date.now() / 1000);
|
|
323
|
+
const skew = input.clockSkewSeconds ?? 0;
|
|
324
|
+
const maxAge = input.maxAgeSeconds ?? 300;
|
|
325
|
+
const iat = typeof payload.iat === 'number' ? payload.iat : now;
|
|
326
|
+
return iat + maxAge + skew;
|
|
327
|
+
}
|
|
328
|
+
export async function verifyOAuthAuthorizationEvidence(input) {
|
|
329
|
+
const errors = [];
|
|
330
|
+
const warnings = [];
|
|
331
|
+
const constraints = [];
|
|
332
|
+
let claims = null;
|
|
333
|
+
let token = {
|
|
334
|
+
jwt_present: false,
|
|
335
|
+
introspection_present: false,
|
|
336
|
+
verified: null,
|
|
337
|
+
alg: null,
|
|
338
|
+
kid: null,
|
|
339
|
+
claims_verified: false,
|
|
340
|
+
};
|
|
341
|
+
let dpop = null;
|
|
342
|
+
try {
|
|
343
|
+
const resolved = await resolveClaims(input);
|
|
344
|
+
claims = resolved.claims;
|
|
345
|
+
token = resolved.token;
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
errors.push(`oauth_evidence token verification error: ${err.message}`);
|
|
349
|
+
}
|
|
350
|
+
const signaturePolicy = input.signaturePolicy ?? 'require';
|
|
351
|
+
if (!claims) {
|
|
352
|
+
errors.push('oauth_evidence missing access token claims');
|
|
353
|
+
}
|
|
354
|
+
else if (input.introspection && input.introspection.active !== true) {
|
|
355
|
+
errors.push('oauth_evidence introspection inactive');
|
|
356
|
+
}
|
|
357
|
+
else if (!token.claims_verified) {
|
|
358
|
+
if (signaturePolicy === 'require') {
|
|
359
|
+
errors.push('oauth_evidence claims were not verified');
|
|
360
|
+
}
|
|
361
|
+
else if (signaturePolicy === 'best-effort') {
|
|
362
|
+
warnings.push('oauth_evidence claims were not verified');
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
const scopes = normalizeScopes(claims);
|
|
366
|
+
const attenuationOk = pushScopeChecks(constraints, scopes, input.requiredScopes);
|
|
367
|
+
pushAudienceChecks(constraints, claims, input);
|
|
368
|
+
pushMetadataChecks(constraints, claims, input.protectedResourceMetadata);
|
|
369
|
+
pushAuthorizationDetailsChecks(constraints, claims, input.requiredAuthorizationDetails);
|
|
370
|
+
const delegationOk = pushIdentityChecks(constraints, claims, input);
|
|
371
|
+
if (input.dpopProof) {
|
|
372
|
+
const dpopProofInput = {
|
|
373
|
+
...input.dpopProof,
|
|
374
|
+
...(input.dpopProof.nowSeconds === undefined && input.nowSeconds !== undefined
|
|
375
|
+
? { nowSeconds: input.nowSeconds }
|
|
376
|
+
: {}),
|
|
377
|
+
...(input.dpopProof.clockSkewSeconds === undefined && input.clockSkewSeconds !== undefined
|
|
378
|
+
? { clockSkewSeconds: input.clockSkewSeconds }
|
|
379
|
+
: {}),
|
|
380
|
+
};
|
|
381
|
+
const dpopResult = await verifyDpopProof(dpopProofInput, claims, input.requiredCnfJkt, input.dpopReplayCache);
|
|
382
|
+
dpop = dpopResult.dpop;
|
|
383
|
+
constraints.push(...dpopResult.constraints);
|
|
384
|
+
errors.push(...dpopResult.errors);
|
|
385
|
+
}
|
|
386
|
+
for (const constraint of constraints) {
|
|
387
|
+
if (constraint.status === 'failed') {
|
|
388
|
+
errors.push(`oauth_evidence constraint failed: ${constraint.type}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
const audience = normalizeAudience(claims);
|
|
392
|
+
const resource = normalizeResource(claims);
|
|
393
|
+
const issuer = typeof claims?.iss === 'string' ? claims.iss : null;
|
|
394
|
+
const subject = typeof claims?.sub === 'string' ? claims.sub : null;
|
|
395
|
+
const clientId = typeof claims?.client_id === 'string' ? claims.client_id : null;
|
|
396
|
+
return {
|
|
397
|
+
protocol: input.protocol ?? 'oauth2',
|
|
398
|
+
valid: errors.length === 0,
|
|
399
|
+
issuer,
|
|
400
|
+
subject,
|
|
401
|
+
scope: scopes,
|
|
402
|
+
attenuation_ok: attenuationOk,
|
|
403
|
+
delegation_ok: delegationOk,
|
|
404
|
+
constraints,
|
|
405
|
+
errors,
|
|
406
|
+
warnings,
|
|
407
|
+
details: {
|
|
408
|
+
token,
|
|
409
|
+
dpop,
|
|
410
|
+
audience,
|
|
411
|
+
resource,
|
|
412
|
+
client_id: clientId,
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
export async function verifyAuthorizationEvidence(evidence) {
|
|
417
|
+
if ('oauth' in evidence) {
|
|
418
|
+
const protocol = evidence.protocol ?? evidence.oauth.protocol;
|
|
419
|
+
return verifyOAuthAuthorizationEvidence(protocol ? { ...evidence.oauth, protocol } : { ...evidence.oauth });
|
|
420
|
+
}
|
|
421
|
+
return verifyOAuthAuthorizationEvidence(evidence);
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=authorization-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-evidence.js","sourceRoot":"","sources":["../src/authorization-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface DpopReplayCacheKey {
|
|
2
|
+
jti: string;
|
|
3
|
+
jkt?: string | null;
|
|
4
|
+
htm?: string | null;
|
|
5
|
+
htu?: string | null;
|
|
6
|
+
issuer?: string | null;
|
|
7
|
+
client_id?: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface DpopReplayCache {
|
|
10
|
+
/**
|
|
11
|
+
* Atomically remember this proof key until `expiresAtSeconds`.
|
|
12
|
+
*
|
|
13
|
+
* Returns true when the key was new and is now stored. Returns false when
|
|
14
|
+
* the key was already present and unexpired. Deployments can back this with
|
|
15
|
+
* Redis, Durable Objects, Postgres, or any other shared compare-and-set
|
|
16
|
+
* primitive. The in-memory implementation below is process-local only.
|
|
17
|
+
*/
|
|
18
|
+
checkAndRemember(key: DpopReplayCacheKey, expiresAtSeconds: number): boolean | Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
export interface MemoryDpopReplayCacheOptions {
|
|
21
|
+
maxEntries?: number;
|
|
22
|
+
nowSeconds?: () => number;
|
|
23
|
+
}
|
|
24
|
+
export declare class MemoryDpopReplayCache implements DpopReplayCache {
|
|
25
|
+
private readonly entries;
|
|
26
|
+
private readonly maxEntries;
|
|
27
|
+
private readonly nowSeconds;
|
|
28
|
+
constructor(options?: MemoryDpopReplayCacheOptions);
|
|
29
|
+
checkAndRemember(key: DpopReplayCacheKey, expiresAtSeconds: number): boolean;
|
|
30
|
+
size(): number;
|
|
31
|
+
private prune;
|
|
32
|
+
private pruneToMax;
|
|
33
|
+
}
|
|
34
|
+
export declare function dpopReplayCacheKeyId(key: DpopReplayCacheKey): string;
|
|
35
|
+
//# sourceMappingURL=dpop-replay-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dpop-replay-cache.d.ts","sourceRoot":"","sources":["../src/dpop-replay-cache.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,gBAAgB,CACd,GAAG,EAAE,kBAAkB,EACvB,gBAAgB,EAAE,MAAM,GACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAA;CAC1B;AAED,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;gBAE7B,OAAO,GAAE,4BAAiC;IAKtD,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAW5E,IAAI,IAAI,MAAM;IAKd,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,UAAU;CAOnB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CASpE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
export class MemoryDpopReplayCache {
|
|
3
|
+
entries = new Map();
|
|
4
|
+
maxEntries;
|
|
5
|
+
nowSeconds;
|
|
6
|
+
constructor(options = {}) {
|
|
7
|
+
this.maxEntries = options.maxEntries ?? 10_000;
|
|
8
|
+
this.nowSeconds = options.nowSeconds ?? (() => Math.floor(Date.now() / 1000));
|
|
9
|
+
}
|
|
10
|
+
checkAndRemember(key, expiresAtSeconds) {
|
|
11
|
+
const now = this.nowSeconds();
|
|
12
|
+
this.prune(now);
|
|
13
|
+
const id = dpopReplayCacheKeyId(key);
|
|
14
|
+
const existingExpiry = this.entries.get(id);
|
|
15
|
+
if (existingExpiry !== undefined && existingExpiry > now)
|
|
16
|
+
return false;
|
|
17
|
+
this.entries.set(id, Math.max(expiresAtSeconds, now + 1));
|
|
18
|
+
this.pruneToMax();
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
size() {
|
|
22
|
+
this.prune(this.nowSeconds());
|
|
23
|
+
return this.entries.size;
|
|
24
|
+
}
|
|
25
|
+
prune(now) {
|
|
26
|
+
for (const [key, expiresAt] of this.entries) {
|
|
27
|
+
if (expiresAt <= now)
|
|
28
|
+
this.entries.delete(key);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
pruneToMax() {
|
|
32
|
+
while (this.entries.size > this.maxEntries) {
|
|
33
|
+
const oldest = this.entries.keys().next().value;
|
|
34
|
+
if (oldest === undefined)
|
|
35
|
+
return;
|
|
36
|
+
this.entries.delete(oldest);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function dpopReplayCacheKeyId(key) {
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
issuer: key.issuer ?? null,
|
|
43
|
+
client_id: key.client_id ?? null,
|
|
44
|
+
jkt: key.jkt ?? null,
|
|
45
|
+
htm: key.htm ?? null,
|
|
46
|
+
htu: key.htu ?? null,
|
|
47
|
+
jti: key.jti,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dpop-replay-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dpop-replay-cache.js","sourceRoot":"","sources":["../src/dpop-replay-cache.ts"],"names":[],"mappings":"AAAA,sCAAsC;AA+BtC,MAAM,OAAO,qBAAqB;IACf,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACnC,UAAU,CAAQ;IAClB,UAAU,CAAc;IAEzC,YAAY,UAAwC,EAAE;QACpD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAA;QAC9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,gBAAgB,CAAC,GAAuB,EAAE,gBAAwB;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACf,MAAM,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC3C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,GAAG;YAAE,OAAO,KAAK,CAAA;QACtE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAEO,KAAK,CAAC,GAAW;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,SAAS,IAAI,GAAG;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;YAC/C,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAM;YAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAuB;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;QAChC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;KACb,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export { AtribVerifier } from './verifier.js';
|
|
2
2
|
export type { AtribVerifierOptions, CalculateOptions, VerifyRecommendationOptions, } from './verifier.js';
|
|
3
3
|
export { verifyRecord } from './verify-record.js';
|
|
4
|
-
export type { RecordVerificationResult, ProvenanceAnnotation, VerifyRecordOptions, CrossAttestationAnnotation, } from './verify-record.js';
|
|
4
|
+
export type { RecordVerificationResult, ProvenanceAnnotation, VerifyRecordOptions, ResolvedCapabilityFacts, CrossAttestationAnnotation, } from './verify-record.js';
|
|
5
|
+
export { verifyAuthorizationEvidence, verifyOAuthAuthorizationEvidence, } from './authorization-evidence.js';
|
|
6
|
+
export type { AuthorizationEvidenceInput, EvidenceCheckStatus, EvidenceConstraintCheck, EvidenceVerificationBlock, OAuthAccessTokenClaims, OAuthAuthorizationDetailConstraint, OAuthAuthorizationEvidenceInput, OAuthAuthorizationEvidenceVerification, OAuthDpopCheck, OAuthDpopProofInput, OAuthEvidenceProtocol, OAuthProtectedResourceMetadata, OAuthSignaturePolicy, OAuthTokenIntrospectionResponse, OAuthTokenCheck, } from './authorization-evidence.js';
|
|
7
|
+
export { MemoryDpopReplayCache, dpopReplayCacheKeyId, } from './dpop-replay-cache.js';
|
|
8
|
+
export type { DpopReplayCache, DpopReplayCacheKey, MemoryDpopReplayCacheOptions, } from './dpop-replay-cache.js';
|
|
9
|
+
export { introspectOAuthToken, oauthEvidenceFromIntrospectionResult, } from './oauth-introspection.js';
|
|
10
|
+
export type { OAuthIntrospectionClientAuthentication, OAuthIntrospectionOptions, OAuthIntrospectionResult, } from './oauth-introspection.js';
|
|
5
11
|
export { handoffClaimsFromEvidencePacket, verifyHandoffClaims } from './handoff.js';
|
|
6
12
|
export type { HandoffBodyVerification, HandoffClaimsFromEvidenceOptions, HandoffClaimInput, HandoffClaimVerification, HandoffEvidenceEntry, HandoffEvidencePacket, HandoffProofVerification, HandoffRejectionReason, HandoffVerificationResult, VerifyHandoffClaimsOptions, } from './handoff.js';
|
|
7
13
|
export { calculate, DEFAULT_POLICY, isValidPolicy } from './calculate.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,eAAe,CAAA;AAKtB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,10 @@ export { AtribVerifier } from './verifier.js';
|
|
|
6
6
|
// AtribVerifier.verify which operates on a settlement RecommendationDocument.
|
|
7
7
|
// Surfaces the implemented D044, D041, D045, D051, D052, and D094 annotations.
|
|
8
8
|
export { verifyRecord } from './verify-record.js';
|
|
9
|
+
// Generic external authorization evidence checks. Off the atrib record-validity path.
|
|
10
|
+
export { verifyAuthorizationEvidence, verifyOAuthAuthorizationEvidence, } from './authorization-evidence.js';
|
|
11
|
+
export { MemoryDpopReplayCache, dpopReplayCacheKeyId, } from './dpop-replay-cache.js';
|
|
12
|
+
export { introspectOAuthToken, oauthEvidenceFromIntrospectionResult, } from './oauth-introspection.js';
|
|
9
13
|
// Cross-agent handoff claim verification. Used when one agent receives a
|
|
10
14
|
// record_hash claim plus private body material from another agent and must
|
|
11
15
|
// decide whether to link its next record through informed_by.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,+CAA+C;AAE/C,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAO7C,8DAA8D;AAC9D,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,+CAA+C;AAE/C,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAO7C,8DAA8D;AAC9D,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AASjD,sFAAsF;AACtF,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,6BAA6B,CAAA;AAmBpC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAO/B,OAAO,EACL,oBAAoB,EACpB,oCAAoC,GACrC,MAAM,0BAA0B,CAAA;AAOjC,yEAAyE;AACzE,2EAA2E;AAC3E,8DAA8D;AAC9D,OAAO,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAcnF,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEzE,sDAAsD;AACtD,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE7D,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,6BAA6B;AAC7B,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG3E,6EAA6E;AAC7E,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAA;AA6B7B,0DAA0D;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAgCvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OAuthAuthorizationEvidenceInput, OAuthTokenIntrospectionResponse } from './authorization-evidence.js';
|
|
2
|
+
export type OAuthIntrospectionClientAuthentication = {
|
|
3
|
+
method: 'none';
|
|
4
|
+
} | {
|
|
5
|
+
method: 'basic';
|
|
6
|
+
clientId: string;
|
|
7
|
+
clientSecret: string;
|
|
8
|
+
} | {
|
|
9
|
+
method: 'bearer';
|
|
10
|
+
token: string;
|
|
11
|
+
} | {
|
|
12
|
+
method: 'headers';
|
|
13
|
+
headers: Record<string, string>;
|
|
14
|
+
};
|
|
15
|
+
export interface OAuthIntrospectionOptions {
|
|
16
|
+
endpoint: string;
|
|
17
|
+
token: string;
|
|
18
|
+
tokenTypeHint?: string;
|
|
19
|
+
clientAuthentication?: OAuthIntrospectionClientAuthentication;
|
|
20
|
+
extraParams?: Record<string, string>;
|
|
21
|
+
expectedIssuer?: string;
|
|
22
|
+
expectedAudience?: string | string[];
|
|
23
|
+
expectedResource?: string;
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
fetchImpl?: typeof fetch;
|
|
27
|
+
}
|
|
28
|
+
export interface OAuthIntrospectionResult {
|
|
29
|
+
ok: boolean;
|
|
30
|
+
endpoint: string;
|
|
31
|
+
introspection?: OAuthTokenIntrospectionResponse;
|
|
32
|
+
introspectionVerified: boolean;
|
|
33
|
+
errors: string[];
|
|
34
|
+
warnings: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare function introspectOAuthToken(options: OAuthIntrospectionOptions): Promise<OAuthIntrospectionResult>;
|
|
37
|
+
export declare function oauthEvidenceFromIntrospectionResult(introspection: OAuthIntrospectionResult, base?: Omit<OAuthAuthorizationEvidenceInput, 'introspection' | 'introspectionVerified'>): OAuthAuthorizationEvidenceInput;
|
|
38
|
+
//# sourceMappingURL=oauth-introspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-introspection.d.ts","sourceRoot":"","sources":["../src/oauth-introspection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,6BAA6B,CAAA;AAEpC,MAAM,MAAM,sCAAsC,GAC9C;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAE1D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,sCAAsC,CAAA;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,+BAA+B,CAAA;IAC/C,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAiDnC;AAED,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,wBAAwB,EACvC,IAAI,GAAE,IAAI,CAAC,+BAA+B,EAAE,eAAe,GAAG,uBAAuB,CAAM,GAC1F,+BAA+B,CASjC"}
|