@maronn-openid-connect/experimental 0.0.5 → 0.0.7
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 +3 -5
- package/dist/ciba/backchannel-authentication-request.d.ts +31 -0
- package/dist/ciba/backchannel-authentication-request.d.ts.map +1 -0
- package/dist/ciba/backchannel-authentication-request.js +132 -0
- package/dist/ciba/backchannel-authentication-request.js.map +1 -0
- package/dist/ciba/ciba-grant.d.ts +17 -0
- package/dist/ciba/ciba-grant.d.ts.map +1 -0
- package/dist/ciba/ciba-grant.js +55 -0
- package/dist/ciba/ciba-grant.js.map +1 -0
- package/dist/ciba/errors.d.ts +19 -0
- package/dist/ciba/errors.d.ts.map +1 -0
- package/dist/ciba/errors.js +38 -0
- package/dist/ciba/errors.js.map +1 -0
- package/dist/ciba/index.d.ts +10 -0
- package/dist/ciba/index.d.ts.map +1 -0
- package/dist/ciba/index.js +6 -0
- package/dist/ciba/index.js.map +1 -0
- package/dist/ciba/store.d.ts +44 -0
- package/dist/ciba/store.d.ts.map +1 -0
- package/dist/ciba/store.js +73 -0
- package/dist/ciba/store.js.map +1 -0
- package/dist/ciba/verification.d.ts +37 -0
- package/dist/ciba/verification.d.ts.map +1 -0
- package/dist/ciba/verification.js +105 -0
- package/dist/ciba/verification.js.map +1 -0
- package/dist/device-authorization-grant/device-code-grant.js.map +1 -1
- package/dist/device-authorization-grant/errors.d.ts.map +1 -1
- package/dist/device-authorization-grant/verification.d.ts.map +1 -1
- package/dist/device-authorization-grant/verification.js.map +1 -1
- package/dist/id-jag/errors.d.ts +11 -0
- package/dist/id-jag/errors.d.ts.map +1 -0
- package/dist/id-jag/errors.js +19 -0
- package/dist/id-jag/errors.js.map +1 -0
- package/dist/id-jag/index.d.ts +4 -0
- package/dist/id-jag/index.d.ts.map +1 -0
- package/dist/id-jag/index.js +4 -0
- package/dist/id-jag/index.js.map +1 -0
- package/dist/id-jag/issue-id-jag.d.ts +138 -0
- package/dist/id-jag/issue-id-jag.d.ts.map +1 -0
- package/dist/id-jag/issue-id-jag.js +359 -0
- package/dist/id-jag/issue-id-jag.js.map +1 -0
- package/dist/id-jag/redeem-id-jag.d.ts +65 -0
- package/dist/id-jag/redeem-id-jag.d.ts.map +1 -0
- package/dist/id-jag/redeem-id-jag.js +305 -0
- package/dist/id-jag/redeem-id-jag.js.map +1 -0
- package/dist/jarm/response-mode.d.ts +1 -1
- package/dist/jarm/response-mode.d.ts.map +1 -1
- package/dist/jwt-introspection-response/accept.d.ts +3 -0
- package/dist/jwt-introspection-response/accept.d.ts.map +1 -0
- package/dist/jwt-introspection-response/accept.js +11 -0
- package/dist/jwt-introspection-response/accept.js.map +1 -0
- package/dist/jwt-introspection-response/audience.d.ts +3 -0
- package/dist/jwt-introspection-response/audience.d.ts.map +1 -0
- package/dist/jwt-introspection-response/audience.js +17 -0
- package/dist/jwt-introspection-response/audience.js.map +1 -0
- package/dist/jwt-introspection-response/index.d.ts +4 -0
- package/dist/jwt-introspection-response/index.d.ts.map +1 -0
- package/dist/jwt-introspection-response/index.js +4 -0
- package/dist/jwt-introspection-response/index.js.map +1 -0
- package/dist/jwt-introspection-response/response-jwt.d.ts +10 -0
- package/dist/jwt-introspection-response/response-jwt.d.ts.map +1 -0
- package/dist/jwt-introspection-response/response-jwt.js +32 -0
- package/dist/jwt-introspection-response/response-jwt.js.map +1 -0
- package/dist/par/par-request.d.ts.map +1 -1
- package/dist/par/par-request.js.map +1 -1
- package/dist/par/resolve-request-uri.d.ts.map +1 -1
- package/dist/token-exchange/token-exchange-request.d.ts.map +1 -1
- package/package.json +18 -6
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { IdTokenHintError, TokenError, generateRandomString, resolveRefreshToken, validateIdTokenHint, validateRefreshTokenClient, validateRefreshTokenExpiration, validateRefreshTokenSession, validateRefreshTokenUnused, } from '@maronn-openid-connect/core';
|
|
2
|
+
import { ACTOR_TOKEN_INVALID_DESCRIPTION, IdJagError, SUBJECT_TOKEN_INVALID_DESCRIPTION, } from './errors.js';
|
|
3
|
+
export const TOKEN_EXCHANGE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange';
|
|
4
|
+
export const ID_JAG_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:id-jag';
|
|
5
|
+
export const TOKEN_TYPE_ID_TOKEN = 'urn:ietf:params:oauth:token-type:id_token';
|
|
6
|
+
export const TOKEN_TYPE_REFRESH_TOKEN = 'urn:ietf:params:oauth:token-type:refresh_token';
|
|
7
|
+
export const TOKEN_TYPE_ACCESS_TOKEN = 'urn:ietf:params:oauth:token-type:access_token';
|
|
8
|
+
export const TOKEN_TYPE_JWT = 'urn:ietf:params:oauth:token-type:jwt';
|
|
9
|
+
export const TOKEN_TYPE_SAML1 = 'urn:ietf:params:oauth:token-type:saml1';
|
|
10
|
+
export const TOKEN_TYPE_SAML2 = 'urn:ietf:params:oauth:token-type:saml2';
|
|
11
|
+
export const ACTOR_TOKEN_TYPES_SUPPORTED = [
|
|
12
|
+
TOKEN_TYPE_ACCESS_TOKEN,
|
|
13
|
+
TOKEN_TYPE_REFRESH_TOKEN,
|
|
14
|
+
TOKEN_TYPE_ID_TOKEN,
|
|
15
|
+
TOKEN_TYPE_JWT,
|
|
16
|
+
TOKEN_TYPE_SAML1,
|
|
17
|
+
TOKEN_TYPE_SAML2,
|
|
18
|
+
];
|
|
19
|
+
export const ID_JAG_JWT_TYP = 'oauth-id-jag+jwt';
|
|
20
|
+
export const ID_JAG_GRANT_PROFILE = 'urn:ietf:params:oauth:grant-profile:id-jag';
|
|
21
|
+
const ID_JAG_SIGNING_ALG = 'RS256';
|
|
22
|
+
const WEB_CRYPTO_ALGORITHM = 'RSASSA-PKCS1-v1_5';
|
|
23
|
+
export function matchesIdJagIssuanceRequest(params) {
|
|
24
|
+
return (params['grant_type'] === TOKEN_EXCHANGE_GRANT_TYPE &&
|
|
25
|
+
optional(params['requested_token_type']) === ID_JAG_TOKEN_TYPE);
|
|
26
|
+
}
|
|
27
|
+
export function authorizeIdJagIssuanceClient(client) {
|
|
28
|
+
const grantTypes = client.grantTypes ?? ['authorization_code'];
|
|
29
|
+
if (!grantTypes.includes(TOKEN_EXCHANGE_GRANT_TYPE)) {
|
|
30
|
+
throw new IdJagError('unauthorized_client', 'The client is not authorized to use the token-exchange grant type');
|
|
31
|
+
}
|
|
32
|
+
if (client.tokenEndpointAuthMethod === 'none') {
|
|
33
|
+
throw new IdJagError('unauthorized_client', 'Public clients are not allowed to request an ID-JAG');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function parseIdJagIssuanceParams(params, options = {}) {
|
|
37
|
+
const subjectToken = optional(params['subject_token']);
|
|
38
|
+
if (subjectToken === undefined) {
|
|
39
|
+
throw new IdJagError('invalid_request', 'subject_token is required');
|
|
40
|
+
}
|
|
41
|
+
const subjectTokenType = optional(params['subject_token_type']);
|
|
42
|
+
if (subjectTokenType === undefined) {
|
|
43
|
+
throw new IdJagError('invalid_request', 'subject_token_type is required');
|
|
44
|
+
}
|
|
45
|
+
const supportedSubjectTypes = [
|
|
46
|
+
TOKEN_TYPE_ID_TOKEN,
|
|
47
|
+
...(options.allowRefreshTokenSubjects === true ? [TOKEN_TYPE_REFRESH_TOKEN] : []),
|
|
48
|
+
];
|
|
49
|
+
if (!supportedSubjectTypes.includes(subjectTokenType)) {
|
|
50
|
+
throw new IdJagError('invalid_request', `Unsupported subject_token_type for ID-JAG issuance. Only ${supportedSubjectTypes.join(' or ')} is supported.`);
|
|
51
|
+
}
|
|
52
|
+
const audience = optional(params['audience']);
|
|
53
|
+
if (audience === undefined) {
|
|
54
|
+
throw new IdJagError('invalid_request', 'audience is required');
|
|
55
|
+
}
|
|
56
|
+
const resource = optional(params['resource']);
|
|
57
|
+
if (resource !== undefined && !isAbsoluteUriWithoutFragment(resource)) {
|
|
58
|
+
throw new IdJagError('invalid_request', 'resource must be an absolute URI without a fragment component');
|
|
59
|
+
}
|
|
60
|
+
const actorToken = optional(params['actor_token']);
|
|
61
|
+
const actorTokenType = optional(params['actor_token_type']);
|
|
62
|
+
if (options.allowActorTokens !== true) {
|
|
63
|
+
if (actorToken !== undefined || actorTokenType !== undefined) {
|
|
64
|
+
throw new IdJagError('invalid_request', 'actor_token is not supported for ID-JAG issuance');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (actorToken !== undefined && actorTokenType === undefined) {
|
|
69
|
+
throw new IdJagError('invalid_request', 'actor_token_type is required when actor_token is present');
|
|
70
|
+
}
|
|
71
|
+
if (actorToken === undefined && actorTokenType !== undefined) {
|
|
72
|
+
throw new IdJagError('invalid_request', 'actor_token_type must not be present without actor_token');
|
|
73
|
+
}
|
|
74
|
+
if (actorTokenType !== undefined &&
|
|
75
|
+
!ACTOR_TOKEN_TYPES_SUPPORTED.includes(actorTokenType)) {
|
|
76
|
+
throw new IdJagError('invalid_request', `Unsupported actor_token_type for ID-JAG issuance. Supported values are ${ACTOR_TOKEN_TYPES_SUPPORTED.join(', ')}.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (optional(params['authorization_details']) !== undefined) {
|
|
80
|
+
throw new IdJagError('invalid_request', 'authorization_details is not supported for ID-JAG issuance');
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
subjectToken,
|
|
84
|
+
subjectTokenType: subjectTokenType,
|
|
85
|
+
audience,
|
|
86
|
+
scope: optional(params['scope']),
|
|
87
|
+
resource,
|
|
88
|
+
...(actorToken === undefined
|
|
89
|
+
? {}
|
|
90
|
+
: { actorToken, actorTokenType: actorTokenType }),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export async function resolveIdJagSubject(options) {
|
|
94
|
+
let payload;
|
|
95
|
+
try {
|
|
96
|
+
payload = await validateIdTokenHint(options.subjectToken, {
|
|
97
|
+
expectedIss: options.issuer,
|
|
98
|
+
expectedAud: options.clientId,
|
|
99
|
+
jwks: options.jwks,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof IdTokenHintError) {
|
|
104
|
+
throw new IdJagError('invalid_request', SUBJECT_TOKEN_INVALID_DESCRIPTION);
|
|
105
|
+
}
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
const authTime = typeof payload['auth_time'] === 'number' ? payload['auth_time'] : undefined;
|
|
109
|
+
const acr = typeof payload['acr'] === 'string' ? payload['acr'] : undefined;
|
|
110
|
+
const amr = Array.isArray(payload['amr']) && payload['amr'].every((v) => typeof v === 'string')
|
|
111
|
+
? payload['amr']
|
|
112
|
+
: undefined;
|
|
113
|
+
return {
|
|
114
|
+
sub: payload.sub,
|
|
115
|
+
...(authTime === undefined ? {} : { authTime }),
|
|
116
|
+
...(acr === undefined ? {} : { acr }),
|
|
117
|
+
...(amr === undefined ? {} : { amr }),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export async function resolveIdJagSubjectFromRefreshToken(options) {
|
|
121
|
+
let info;
|
|
122
|
+
try {
|
|
123
|
+
const resolved = await resolveRefreshToken({
|
|
124
|
+
grant_type: 'refresh_token',
|
|
125
|
+
refresh_token: options.refreshToken,
|
|
126
|
+
}, options.refreshTokenResolver);
|
|
127
|
+
info = resolved.refreshTokenInfo;
|
|
128
|
+
await validateRefreshTokenUnused(info, options.refreshTokenResolver);
|
|
129
|
+
validateRefreshTokenClient(info, options.clientId);
|
|
130
|
+
validateRefreshTokenExpiration(info, Math.floor((options.now ?? new Date()).getTime() / 1000));
|
|
131
|
+
await validateRefreshTokenSession(info, options.authenticationSessionResolver);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof TokenError) {
|
|
135
|
+
throw invalidSubjectToken();
|
|
136
|
+
}
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
if (!info.scope.includes('openid')) {
|
|
140
|
+
throw invalidSubjectToken();
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
sub: info.subject,
|
|
144
|
+
authTime: info.authTime,
|
|
145
|
+
...(info.acr === undefined ? {} : { acr: info.acr }),
|
|
146
|
+
...(info.amr === undefined ? {} : { amr: info.amr }),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export async function resolveIdJagActor(options) {
|
|
150
|
+
let payload;
|
|
151
|
+
try {
|
|
152
|
+
payload = await validateIdTokenHint(options.actorToken, {
|
|
153
|
+
expectedIss: options.issuer,
|
|
154
|
+
expectedAud: options.clientId,
|
|
155
|
+
jwks: options.jwks,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (error instanceof IdTokenHintError) {
|
|
160
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
return { sub: payload.sub };
|
|
165
|
+
}
|
|
166
|
+
export async function resolveIdJagActorToken(options) {
|
|
167
|
+
if (options.resolver === undefined) {
|
|
168
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
169
|
+
}
|
|
170
|
+
const resolved = await options.resolver({
|
|
171
|
+
actorToken: options.actorToken,
|
|
172
|
+
actorTokenType: options.actorTokenType,
|
|
173
|
+
clientId: options.clientId,
|
|
174
|
+
issuer: options.issuer,
|
|
175
|
+
jwks: options.jwks,
|
|
176
|
+
});
|
|
177
|
+
if (resolved === null) {
|
|
178
|
+
throw new IdJagError('invalid_request', ACTOR_TOKEN_INVALID_DESCRIPTION);
|
|
179
|
+
}
|
|
180
|
+
const actor = copyActorChain(resolved);
|
|
181
|
+
if (actor === undefined) {
|
|
182
|
+
throw new Error('The actorTokenResolver returned a malformed actor: sub must be a non-empty string at every level of the act chain');
|
|
183
|
+
}
|
|
184
|
+
return actor;
|
|
185
|
+
}
|
|
186
|
+
function copyActorChain(value) {
|
|
187
|
+
if (typeof value !== 'object' || value === null) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
const record = value;
|
|
191
|
+
const sub = record['sub'];
|
|
192
|
+
if (typeof sub !== 'string' || sub.length === 0) {
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
if (record['act'] === undefined) {
|
|
196
|
+
return { sub };
|
|
197
|
+
}
|
|
198
|
+
const act = copyActorChain(record['act']);
|
|
199
|
+
return act === undefined ? undefined : { sub, act };
|
|
200
|
+
}
|
|
201
|
+
export function validateIdJagAudience(options) {
|
|
202
|
+
if (options.audience === options.issuer) {
|
|
203
|
+
throw new IdJagError('invalid_target', 'The requested audience must belong to a different trust domain than this authorization server');
|
|
204
|
+
}
|
|
205
|
+
if (!options.allowedAudiences.includes(options.audience)) {
|
|
206
|
+
throw new IdJagError('invalid_target', 'The requested audience is not allowed for ID-JAG issuance');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
export function validateIdJagScope(requestedScope, allowedScopes) {
|
|
210
|
+
const requested = splitScope(requestedScope);
|
|
211
|
+
if (allowedScopes === undefined) {
|
|
212
|
+
return requested;
|
|
213
|
+
}
|
|
214
|
+
for (const value of requested) {
|
|
215
|
+
if (!allowedScopes.includes(value)) {
|
|
216
|
+
throw new IdJagError('invalid_scope', 'The requested scope exceeds the scopes allowed for ID-JAG issuance');
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return requested;
|
|
220
|
+
}
|
|
221
|
+
export function buildIdJagClaims(options) {
|
|
222
|
+
if (!Number.isInteger(options.lifetimeSeconds) || options.lifetimeSeconds <= 0) {
|
|
223
|
+
throw new RangeError(`lifetimeSeconds must be a positive integer, received ${options.lifetimeSeconds}`);
|
|
224
|
+
}
|
|
225
|
+
const issuedAt = Math.floor((options.now ?? new Date()).getTime() / 1000);
|
|
226
|
+
return {
|
|
227
|
+
iss: options.issuer,
|
|
228
|
+
sub: options.subject.sub,
|
|
229
|
+
aud: options.audience,
|
|
230
|
+
client_id: options.clientId,
|
|
231
|
+
jti: generateRandomString(32),
|
|
232
|
+
exp: issuedAt + options.lifetimeSeconds,
|
|
233
|
+
iat: issuedAt,
|
|
234
|
+
...(options.scope.length === 0 ? {} : { scope: options.scope.join(' ') }),
|
|
235
|
+
...(options.resource === undefined ? {} : { resource: options.resource }),
|
|
236
|
+
...(options.subject.authTime === undefined ? {} : { auth_time: options.subject.authTime }),
|
|
237
|
+
...(options.subject.acr === undefined ? {} : { acr: options.subject.acr }),
|
|
238
|
+
...(options.subject.amr === undefined ? {} : { amr: options.subject.amr }),
|
|
239
|
+
...(options.actor === undefined ? {} : { act: options.actor }),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export async function createIdJagJwt(options) {
|
|
243
|
+
const encodedHeader = base64UrlFromJson({
|
|
244
|
+
alg: ID_JAG_SIGNING_ALG,
|
|
245
|
+
typ: ID_JAG_JWT_TYP,
|
|
246
|
+
kid: options.signingKey.keyId,
|
|
247
|
+
});
|
|
248
|
+
const encodedPayload = base64UrlFromJson(options.claims);
|
|
249
|
+
const signingInput = `${encodedHeader}.${encodedPayload}`;
|
|
250
|
+
const signature = await crypto.subtle.sign(WEB_CRYPTO_ALGORITHM, options.signingKey.privateKey, new TextEncoder().encode(signingInput));
|
|
251
|
+
return `${signingInput}.${base64UrlFromBytes(new Uint8Array(signature))}`;
|
|
252
|
+
}
|
|
253
|
+
export function buildIdJagIssuanceResponse(options) {
|
|
254
|
+
return {
|
|
255
|
+
access_token: options.idJag,
|
|
256
|
+
issued_token_type: ID_JAG_TOKEN_TYPE,
|
|
257
|
+
token_type: 'N_A',
|
|
258
|
+
expires_in: options.expiresIn,
|
|
259
|
+
scope: options.scope.join(' '),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
export async function processIdJagIssuanceRequest(context) {
|
|
263
|
+
authorizeIdJagIssuanceClient(context.client);
|
|
264
|
+
const parsed = parseIdJagIssuanceParams(context.params, {
|
|
265
|
+
allowRefreshTokenSubjects: context.refreshTokenResolver !== undefined,
|
|
266
|
+
allowActorTokens: context.allowActorTokens === true,
|
|
267
|
+
});
|
|
268
|
+
const subject = parsed.subjectTokenType === TOKEN_TYPE_REFRESH_TOKEN
|
|
269
|
+
? await resolveIdJagSubjectFromRefreshToken({
|
|
270
|
+
refreshToken: parsed.subjectToken,
|
|
271
|
+
clientId: context.client.clientId,
|
|
272
|
+
refreshTokenResolver: context.refreshTokenResolver,
|
|
273
|
+
...(context.authenticationSessionResolver === undefined
|
|
274
|
+
? {}
|
|
275
|
+
: { authenticationSessionResolver: context.authenticationSessionResolver }),
|
|
276
|
+
...(context.now === undefined ? {} : { now: context.now }),
|
|
277
|
+
})
|
|
278
|
+
: await resolveIdJagSubject({
|
|
279
|
+
subjectToken: parsed.subjectToken,
|
|
280
|
+
issuer: context.issuer,
|
|
281
|
+
clientId: context.client.clientId,
|
|
282
|
+
jwks: context.jwks,
|
|
283
|
+
});
|
|
284
|
+
const actor = parsed.actorToken === undefined
|
|
285
|
+
? undefined
|
|
286
|
+
: await resolveIdJagActorToken({
|
|
287
|
+
actorToken: parsed.actorToken,
|
|
288
|
+
actorTokenType: parsed.actorTokenType,
|
|
289
|
+
clientId: context.client.clientId,
|
|
290
|
+
issuer: context.issuer,
|
|
291
|
+
jwks: context.jwks,
|
|
292
|
+
...(context.actorTokenResolver === undefined
|
|
293
|
+
? {}
|
|
294
|
+
: { resolver: context.actorTokenResolver }),
|
|
295
|
+
});
|
|
296
|
+
validateIdJagAudience({
|
|
297
|
+
audience: parsed.audience,
|
|
298
|
+
issuer: context.issuer,
|
|
299
|
+
allowedAudiences: context.allowedAudiences,
|
|
300
|
+
});
|
|
301
|
+
const scope = validateIdJagScope(parsed.scope, context.allowedScopes);
|
|
302
|
+
const claims = buildIdJagClaims({
|
|
303
|
+
issuer: context.issuer,
|
|
304
|
+
subject,
|
|
305
|
+
audience: parsed.audience,
|
|
306
|
+
clientId: context.client.clientId,
|
|
307
|
+
scope,
|
|
308
|
+
...(parsed.resource === undefined ? {} : { resource: parsed.resource }),
|
|
309
|
+
...(actor === undefined ? {} : { actor }),
|
|
310
|
+
lifetimeSeconds: context.lifetimeSeconds,
|
|
311
|
+
...(context.now === undefined ? {} : { now: context.now }),
|
|
312
|
+
});
|
|
313
|
+
const idJag = await createIdJagJwt({
|
|
314
|
+
claims,
|
|
315
|
+
signingKey: context.signingKey,
|
|
316
|
+
});
|
|
317
|
+
return buildIdJagIssuanceResponse({
|
|
318
|
+
idJag,
|
|
319
|
+
expiresIn: context.lifetimeSeconds,
|
|
320
|
+
scope,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
function optional(value) {
|
|
324
|
+
if (value === undefined)
|
|
325
|
+
return undefined;
|
|
326
|
+
const trimmed = value.trim();
|
|
327
|
+
return trimmed.length === 0 ? undefined : trimmed;
|
|
328
|
+
}
|
|
329
|
+
function invalidSubjectToken() {
|
|
330
|
+
return new IdJagError('invalid_request', SUBJECT_TOKEN_INVALID_DESCRIPTION);
|
|
331
|
+
}
|
|
332
|
+
function splitScope(scope) {
|
|
333
|
+
if (scope === undefined)
|
|
334
|
+
return [];
|
|
335
|
+
return [...new Set(scope.split(/\s+/).filter((value) => value.length > 0))];
|
|
336
|
+
}
|
|
337
|
+
function isAbsoluteUriWithoutFragment(value) {
|
|
338
|
+
if (value.includes('#'))
|
|
339
|
+
return false;
|
|
340
|
+
let parsed;
|
|
341
|
+
try {
|
|
342
|
+
parsed = new URL(value);
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
return parsed.protocol.length > 0;
|
|
348
|
+
}
|
|
349
|
+
function base64UrlFromBytes(bytes) {
|
|
350
|
+
let binary = '';
|
|
351
|
+
for (const byte of bytes) {
|
|
352
|
+
binary += String.fromCharCode(byte);
|
|
353
|
+
}
|
|
354
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
355
|
+
}
|
|
356
|
+
function base64UrlFromJson(value) {
|
|
357
|
+
return base64UrlFromBytes(new TextEncoder().encode(JSON.stringify(value)));
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=issue-id-jag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-id-jag.js","sourceRoot":"","sources":["../../src/id-jag/issue-id-jag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type AccessTokenInfo, type JwkSet, type TokenClientInfo } from '@maronn-openid-connect/core';
|
|
2
|
+
import { type IdJagActor } from './issue-id-jag.js';
|
|
3
|
+
export declare const JWT_BEARER_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
4
|
+
export declare const DEFAULT_ASSERTION_CLOCK_SKEW_SEC = 60;
|
|
5
|
+
export interface IdJagTrustedIdentityProvider {
|
|
6
|
+
issuer: string;
|
|
7
|
+
jwks: JwkSet;
|
|
8
|
+
}
|
|
9
|
+
export interface ParsedIdJagRedemptionParams {
|
|
10
|
+
assertion: string;
|
|
11
|
+
scope?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IdJagAssertionPayload {
|
|
14
|
+
iss: string;
|
|
15
|
+
sub: string;
|
|
16
|
+
aud: string | string[];
|
|
17
|
+
client_id: string;
|
|
18
|
+
jti: string;
|
|
19
|
+
exp: number;
|
|
20
|
+
iat: number;
|
|
21
|
+
scope?: string;
|
|
22
|
+
resource?: string | string[];
|
|
23
|
+
auth_time?: number;
|
|
24
|
+
acr?: string;
|
|
25
|
+
amr?: string[];
|
|
26
|
+
act?: IdJagActor;
|
|
27
|
+
}
|
|
28
|
+
export interface IdJagRedemptionGrant {
|
|
29
|
+
subject: string;
|
|
30
|
+
clientId: string;
|
|
31
|
+
scope: string[];
|
|
32
|
+
requestedResources?: string[];
|
|
33
|
+
expiresIn: number;
|
|
34
|
+
idpIssuer: string;
|
|
35
|
+
jti: string;
|
|
36
|
+
authTime?: number;
|
|
37
|
+
acr?: string;
|
|
38
|
+
amr?: string[];
|
|
39
|
+
actor?: IdJagActor;
|
|
40
|
+
}
|
|
41
|
+
export type IdJagAccessTokenInfo = AccessTokenInfo & {
|
|
42
|
+
act?: IdJagActor;
|
|
43
|
+
};
|
|
44
|
+
export interface IdJagRedemptionContext {
|
|
45
|
+
params: Record<string, string>;
|
|
46
|
+
client: TokenClientInfo;
|
|
47
|
+
issuer: string;
|
|
48
|
+
identityProviders: IdJagTrustedIdentityProvider[];
|
|
49
|
+
configuredExpiresIn: number;
|
|
50
|
+
now?: Date;
|
|
51
|
+
clockSkewToleranceSec?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function authorizeIdJagRedemptionClient(client: TokenClientInfo): void;
|
|
54
|
+
export declare function parseIdJagRedemptionParams(params: Record<string, string>): ParsedIdJagRedemptionParams;
|
|
55
|
+
export declare function verifyIdJagAssertion(options: {
|
|
56
|
+
assertion: string;
|
|
57
|
+
issuer: string;
|
|
58
|
+
clientId: string;
|
|
59
|
+
identityProviders: IdJagTrustedIdentityProvider[];
|
|
60
|
+
now?: Date;
|
|
61
|
+
clockSkewToleranceSec?: number;
|
|
62
|
+
}): Promise<IdJagAssertionPayload>;
|
|
63
|
+
export declare function resolveIdJagGrantScope(requestedScope: string | undefined, assertionScope: string | undefined): string[];
|
|
64
|
+
export declare function processIdJagRedemptionRequest(context: IdJagRedemptionContext): Promise<IdJagRedemptionGrant>;
|
|
65
|
+
//# sourceMappingURL=redeem-id-jag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redeem-id-jag.d.ts","sourceRoot":"","sources":["../../src/id-jag/redeem-id-jag.ts"],"names":[],"mappings":"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"}
|