oidc-auth-client 0.0.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/LICENSE +21 -0
- package/README.md +240 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/src/auth/Client.d.ts +135 -0
- package/dist/src/auth/Client.d.ts.map +1 -0
- package/dist/src/auth/Client.js +734 -0
- package/dist/src/auth/Client.js.map +1 -0
- package/dist/src/auth/Events.d.ts +51 -0
- package/dist/src/auth/Events.d.ts.map +1 -0
- package/dist/src/auth/Events.js +139 -0
- package/dist/src/auth/Events.js.map +1 -0
- package/dist/src/auth/Session.d.ts +132 -0
- package/dist/src/auth/Session.d.ts.map +1 -0
- package/dist/src/auth/Session.js +355 -0
- package/dist/src/auth/Session.js.map +1 -0
- package/dist/src/auth/Settings.d.ts +178 -0
- package/dist/src/auth/Settings.d.ts.map +1 -0
- package/dist/src/auth/Settings.js +210 -0
- package/dist/src/auth/Settings.js.map +1 -0
- package/dist/src/crypto/Crypto.d.ts +14 -0
- package/dist/src/crypto/Crypto.d.ts.map +1 -0
- package/dist/src/crypto/Crypto.js +107 -0
- package/dist/src/crypto/Crypto.js.map +1 -0
- package/dist/src/models/User.d.ts +31 -0
- package/dist/src/models/User.d.ts.map +1 -0
- package/dist/src/models/User.js +57 -0
- package/dist/src/models/User.js.map +1 -0
- package/dist/src/navigation/Navigator.d.ts +106 -0
- package/dist/src/navigation/Navigator.d.ts.map +1 -0
- package/dist/src/navigation/Navigator.js +441 -0
- package/dist/src/navigation/Navigator.js.map +1 -0
- package/dist/src/protocol/Requests.d.ts +50 -0
- package/dist/src/protocol/Requests.d.ts.map +1 -0
- package/dist/src/protocol/Requests.js +109 -0
- package/dist/src/protocol/Requests.js.map +1 -0
- package/dist/src/protocol/ResponseValidator.d.ts +39 -0
- package/dist/src/protocol/ResponseValidator.d.ts.map +1 -0
- package/dist/src/protocol/ResponseValidator.js +366 -0
- package/dist/src/protocol/ResponseValidator.js.map +1 -0
- package/dist/src/protocol/Responses.d.ts +44 -0
- package/dist/src/protocol/Responses.d.ts.map +1 -0
- package/dist/src/protocol/Responses.js +77 -0
- package/dist/src/protocol/Responses.js.map +1 -0
- package/dist/src/protocol/TokenService.d.ts +38 -0
- package/dist/src/protocol/TokenService.d.ts.map +1 -0
- package/dist/src/protocol/TokenService.js +259 -0
- package/dist/src/protocol/TokenService.js.map +1 -0
- package/dist/src/services/Http.d.ts +55 -0
- package/dist/src/services/Http.d.ts.map +1 -0
- package/dist/src/services/Http.js +276 -0
- package/dist/src/services/Http.js.map +1 -0
- package/dist/src/services/Timer.d.ts +18 -0
- package/dist/src/services/Timer.d.ts.map +1 -0
- package/dist/src/services/Timer.js +56 -0
- package/dist/src/services/Timer.js.map +1 -0
- package/dist/src/storage/Storage.d.ts +23 -0
- package/dist/src/storage/Storage.d.ts.map +1 -0
- package/dist/src/storage/Storage.js +65 -0
- package/dist/src/storage/Storage.js.map +1 -0
- package/dist/src/types/crypto.d.ts +32 -0
- package/dist/src/types/crypto.d.ts.map +1 -0
- package/dist/src/types/crypto.js +3 -0
- package/dist/src/types/crypto.js.map +1 -0
- package/dist/src/types/navigator.d.ts +33 -0
- package/dist/src/types/navigator.d.ts.map +1 -0
- package/dist/src/types/navigator.js +3 -0
- package/dist/src/types/navigator.js.map +1 -0
- package/dist/src/types/storage.d.ts +7 -0
- package/dist/src/types/storage.d.ts.map +1 -0
- package/dist/src/types/storage.js +3 -0
- package/dist/src/types/storage.js.map +1 -0
- package/dist/src/types/user.d.ts +6 -0
- package/dist/src/types/user.d.ts.map +1 -0
- package/dist/src/types/user.js +3 -0
- package/dist/src/types/user.js.map +1 -0
- package/dist/src/utils/Event.d.ts +10 -0
- package/dist/src/utils/Event.d.ts.map +1 -0
- package/dist/src/utils/Event.js +24 -0
- package/dist/src/utils/Event.js.map +1 -0
- package/dist/src/utils/Global.d.ts +14 -0
- package/dist/src/utils/Global.d.ts.map +1 -0
- package/dist/src/utils/Global.js +50 -0
- package/dist/src/utils/Global.js.map +1 -0
- package/dist/src/utils/Log.d.ts +30 -0
- package/dist/src/utils/Log.d.ts.map +1 -0
- package/dist/src/utils/Log.js +68 -0
- package/dist/src/utils/Log.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
|
|
2
|
+
import { Log } from '../utils/Log.js';
|
|
3
|
+
import { Global } from '../utils/Global.js';
|
|
4
|
+
import { JsonService, MetadataService } from '../services/Http.js';
|
|
5
|
+
import { JoseUtil } from '../crypto/Crypto.js';
|
|
6
|
+
//=============================================================================
|
|
7
|
+
// TokenClient
|
|
8
|
+
//=============================================================================
|
|
9
|
+
export class TokenClient {
|
|
10
|
+
constructor(settings, JsonServiceCtor = JsonService, MetadataServiceCtor = MetadataService) {
|
|
11
|
+
if (!settings) {
|
|
12
|
+
Log.error('TokenClient.ctor: No settings passed');
|
|
13
|
+
throw new Error('settings');
|
|
14
|
+
}
|
|
15
|
+
this._settings = settings;
|
|
16
|
+
this._jsonService = new JsonServiceCtor();
|
|
17
|
+
this._metadataService = new MetadataServiceCtor(this._settings);
|
|
18
|
+
}
|
|
19
|
+
exchangeCode(args = {}) {
|
|
20
|
+
args = Object.assign({}, args);
|
|
21
|
+
args.grant_type = args.grant_type || 'authorization_code';
|
|
22
|
+
args.client_id = args.client_id || this._settings.client_id;
|
|
23
|
+
args.client_secret = args.client_secret || this._settings.client_secret;
|
|
24
|
+
args.redirect_uri = args.redirect_uri || this._settings.redirect_uri;
|
|
25
|
+
let basicAuth;
|
|
26
|
+
const client_authentication = args._client_authentication || this._settings.client_authentication;
|
|
27
|
+
delete args._client_authentication;
|
|
28
|
+
if (!args.code) {
|
|
29
|
+
Log.error('TokenClient.exchangeCode: No code passed');
|
|
30
|
+
return Promise.reject(new Error('A code is required'));
|
|
31
|
+
}
|
|
32
|
+
if (!args.redirect_uri) {
|
|
33
|
+
Log.error('TokenClient.exchangeCode: No redirect_uri passed');
|
|
34
|
+
return Promise.reject(new Error('A redirect_uri is required'));
|
|
35
|
+
}
|
|
36
|
+
if (!args.code_verifier) {
|
|
37
|
+
Log.error('TokenClient.exchangeCode: No code_verifier passed');
|
|
38
|
+
return Promise.reject(new Error('A code_verifier is required'));
|
|
39
|
+
}
|
|
40
|
+
if (!args.client_id) {
|
|
41
|
+
Log.error('TokenClient.exchangeCode: No client_id passed');
|
|
42
|
+
return Promise.reject(new Error('A client_id is required'));
|
|
43
|
+
}
|
|
44
|
+
if (!args.client_secret && client_authentication === 'client_secret_basic') {
|
|
45
|
+
Log.error('TokenClient.exchangeCode: No client_secret passed');
|
|
46
|
+
return Promise.reject(new Error('A client_secret is required'));
|
|
47
|
+
}
|
|
48
|
+
if (client_authentication === 'client_secret_basic') {
|
|
49
|
+
basicAuth = args.client_id + ':' + args.client_secret;
|
|
50
|
+
delete args.client_id;
|
|
51
|
+
delete args.client_secret;
|
|
52
|
+
}
|
|
53
|
+
return this._metadataService.getTokenEndpoint(false).then(url => {
|
|
54
|
+
Log.debug('TokenClient.exchangeCode: Received token endpoint');
|
|
55
|
+
return this._jsonService.postForm(url, args, basicAuth).then(response => {
|
|
56
|
+
Log.debug('TokenClient.exchangeCode: response received');
|
|
57
|
+
return response;
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
exchangeRefreshToken(args = {}) {
|
|
62
|
+
args = Object.assign({}, args);
|
|
63
|
+
args.grant_type = args.grant_type || 'refresh_token';
|
|
64
|
+
args.client_id = args.client_id || this._settings.client_id;
|
|
65
|
+
args.client_secret = args.client_secret || this._settings.client_secret;
|
|
66
|
+
let basicAuth;
|
|
67
|
+
const client_authentication = args._client_authentication || this._settings.client_authentication;
|
|
68
|
+
delete args._client_authentication;
|
|
69
|
+
if (!args.refresh_token) {
|
|
70
|
+
Log.error('TokenClient.exchangeRefreshToken: No refresh_token passed');
|
|
71
|
+
return Promise.reject(new Error('A refresh_token is required'));
|
|
72
|
+
}
|
|
73
|
+
if (!args.client_id) {
|
|
74
|
+
Log.error('TokenClient.exchangeRefreshToken: No client_id passed');
|
|
75
|
+
return Promise.reject(new Error('A client_id is required'));
|
|
76
|
+
}
|
|
77
|
+
if (client_authentication === 'client_secret_basic') {
|
|
78
|
+
basicAuth = args.client_id + ':' + args.client_secret;
|
|
79
|
+
delete args.client_id;
|
|
80
|
+
delete args.client_secret;
|
|
81
|
+
}
|
|
82
|
+
return this._metadataService.getTokenEndpoint(false).then(url => {
|
|
83
|
+
Log.debug('TokenClient.exchangeRefreshToken: Received token endpoint');
|
|
84
|
+
return this._jsonService.postForm(url, args, basicAuth).then(response => {
|
|
85
|
+
Log.debug('TokenClient.exchangeRefreshToken: response received');
|
|
86
|
+
return response;
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//=============================================================================
|
|
92
|
+
// TokenRevocationClient
|
|
93
|
+
//=============================================================================
|
|
94
|
+
const AccessTokenTypeHint = 'access_token';
|
|
95
|
+
const RefreshTokenTypeHint = 'refresh_token';
|
|
96
|
+
export class TokenRevocationClient {
|
|
97
|
+
constructor(settings, XMLHttpRequestCtor = Global.XMLHttpRequest, MetadataServiceCtor = MetadataService) {
|
|
98
|
+
if (!settings) {
|
|
99
|
+
Log.error('TokenRevocationClient.ctor: No settings provided');
|
|
100
|
+
throw new Error('No settings provided.');
|
|
101
|
+
}
|
|
102
|
+
this._settings = settings;
|
|
103
|
+
this._XMLHttpRequestCtor = XMLHttpRequestCtor;
|
|
104
|
+
this._metadataService = new MetadataServiceCtor(this._settings);
|
|
105
|
+
}
|
|
106
|
+
revoke(token, required, type = 'access_token') {
|
|
107
|
+
if (!token) {
|
|
108
|
+
Log.error('TokenRevocationClient.revoke: No token provided');
|
|
109
|
+
throw new Error('No token provided.');
|
|
110
|
+
}
|
|
111
|
+
if (type !== AccessTokenTypeHint && type !== RefreshTokenTypeHint) {
|
|
112
|
+
Log.error('TokenRevocationClient.revoke: Invalid token type');
|
|
113
|
+
throw new Error('Invalid token type.');
|
|
114
|
+
}
|
|
115
|
+
return this._metadataService.getRevocationEndpoint().then(url => {
|
|
116
|
+
if (!url) {
|
|
117
|
+
if (required) {
|
|
118
|
+
Log.error('TokenRevocationClient.revoke: Revocation not supported');
|
|
119
|
+
throw new Error('Revocation not supported');
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
Log.debug('TokenRevocationClient.revoke: Revoking ' + type);
|
|
124
|
+
return this._revoke(url, this._settings.client_id, this._settings.client_secret, token, type);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
_revoke(url, client_id, client_secret, token, type) {
|
|
128
|
+
return new Promise((resolve, reject) => {
|
|
129
|
+
const xhr = new this._XMLHttpRequestCtor();
|
|
130
|
+
xhr.open('POST', url);
|
|
131
|
+
xhr.onload = () => {
|
|
132
|
+
Log.debug('TokenRevocationClient.revoke: HTTP response received, status', xhr.status);
|
|
133
|
+
if (xhr.status === 200) {
|
|
134
|
+
resolve();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
reject(Error(xhr.statusText + ' (' + xhr.status + ')'));
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
xhr.onerror = () => {
|
|
141
|
+
Log.debug('TokenRevocationClient.revoke: Network Error.');
|
|
142
|
+
reject('Network Error');
|
|
143
|
+
};
|
|
144
|
+
let body = 'client_id=' + encodeURIComponent(client_id);
|
|
145
|
+
if (client_secret)
|
|
146
|
+
body += '&client_secret=' + encodeURIComponent(client_secret);
|
|
147
|
+
body += '&token_type_hint=' + encodeURIComponent(type);
|
|
148
|
+
body += '&token=' + encodeURIComponent(token);
|
|
149
|
+
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
150
|
+
xhr.send(body);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//=============================================================================
|
|
155
|
+
// UserInfoService
|
|
156
|
+
//=============================================================================
|
|
157
|
+
export class UserInfoService {
|
|
158
|
+
constructor(settings, JsonServiceCtor = JsonService, MetadataServiceCtor = MetadataService, joseUtil = JoseUtil) {
|
|
159
|
+
if (!settings) {
|
|
160
|
+
Log.error('UserInfoService.ctor: No settings passed');
|
|
161
|
+
throw new Error('settings');
|
|
162
|
+
}
|
|
163
|
+
this._settings = settings;
|
|
164
|
+
this._jsonService = new JsonServiceCtor(undefined, undefined, this._getClaimsFromJwt.bind(this));
|
|
165
|
+
this._metadataService = new MetadataServiceCtor(this._settings);
|
|
166
|
+
this._joseUtil = joseUtil;
|
|
167
|
+
}
|
|
168
|
+
getClaims(token) {
|
|
169
|
+
if (!token) {
|
|
170
|
+
Log.error('UserInfoService.getClaims: No token passed');
|
|
171
|
+
return Promise.reject(new Error('A token is required'));
|
|
172
|
+
}
|
|
173
|
+
return this._metadataService.getUserInfoEndpoint().then(url => {
|
|
174
|
+
Log.debug('UserInfoService.getClaims: received userinfo url', url);
|
|
175
|
+
return this._jsonService.getJson(url, token).then(claims => {
|
|
176
|
+
Log.debug('UserInfoService.getClaims: claims received', claims);
|
|
177
|
+
return claims;
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
_getClaimsFromJwt(req) {
|
|
182
|
+
try {
|
|
183
|
+
const jwt = this._joseUtil.parseJwt(req.responseText);
|
|
184
|
+
if (!jwt?.header || !jwt?.payload) {
|
|
185
|
+
Log.error('UserInfoService._getClaimsFromJwt: Failed to parse JWT', jwt);
|
|
186
|
+
return Promise.reject(new Error('Failed to parse id_token'));
|
|
187
|
+
}
|
|
188
|
+
const kid = jwt.header.kid;
|
|
189
|
+
let issuerPromise;
|
|
190
|
+
switch (this._settings.userInfoJwtIssuer) {
|
|
191
|
+
case 'OP':
|
|
192
|
+
issuerPromise = this._metadataService.getIssuer();
|
|
193
|
+
break;
|
|
194
|
+
case 'ANY':
|
|
195
|
+
issuerPromise = Promise.resolve(jwt.payload.iss);
|
|
196
|
+
break;
|
|
197
|
+
default:
|
|
198
|
+
issuerPromise = Promise.resolve(this._settings.userInfoJwtIssuer);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
return issuerPromise.then(issuer => {
|
|
202
|
+
Log.debug('UserInfoService._getClaimsFromJwt: Received issuer:' + issuer);
|
|
203
|
+
return this._metadataService.getSigningKeys().then(keys => {
|
|
204
|
+
if (!keys) {
|
|
205
|
+
Log.error('UserInfoService._getClaimsFromJwt: No signing keys from metadata');
|
|
206
|
+
return Promise.reject(new Error('No signing keys from metadata'));
|
|
207
|
+
}
|
|
208
|
+
Log.debug('UserInfoService._getClaimsFromJwt: Received signing keys');
|
|
209
|
+
let key;
|
|
210
|
+
if (!kid) {
|
|
211
|
+
keys = this._filterByAlg(keys, jwt.header.alg ?? '');
|
|
212
|
+
if (keys.length > 1) {
|
|
213
|
+
Log.error('UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata');
|
|
214
|
+
return Promise.reject(new Error('No kid found in id_token and more than one key found in metadata'));
|
|
215
|
+
}
|
|
216
|
+
key = keys[0];
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
key = keys.find((k) => k.kid === kid);
|
|
220
|
+
}
|
|
221
|
+
if (!key) {
|
|
222
|
+
Log.error('UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys');
|
|
223
|
+
return Promise.reject(new Error('No key matching kid or alg found in signing keys'));
|
|
224
|
+
}
|
|
225
|
+
const audience = this._settings.client_id;
|
|
226
|
+
const clockSkewInSeconds = this._settings.clockSkew;
|
|
227
|
+
Log.debug('UserInfoService._getClaimsFromJwt: Validating JWT; using clock skew (in seconds) of: ', clockSkewInSeconds);
|
|
228
|
+
return this._joseUtil.validateJwt(req.responseText, key, issuer, audience, clockSkewInSeconds, undefined, true)
|
|
229
|
+
.then(() => {
|
|
230
|
+
Log.debug('UserInfoService._getClaimsFromJwt: JWT validation successful');
|
|
231
|
+
return jwt.payload;
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
Log.error('UserInfoService._getClaimsFromJwt: Error parsing JWT response', e.message);
|
|
238
|
+
return Promise.reject(e);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
_filterByAlg(keys, alg) {
|
|
242
|
+
let kty = null;
|
|
243
|
+
if (alg.startsWith('RS'))
|
|
244
|
+
kty = 'RSA';
|
|
245
|
+
else if (alg.startsWith('PS'))
|
|
246
|
+
kty = 'PS';
|
|
247
|
+
else if (alg.startsWith('ES'))
|
|
248
|
+
kty = 'EC';
|
|
249
|
+
else {
|
|
250
|
+
Log.debug('UserInfoService._filterByAlg: alg not supported: ', alg);
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
Log.debug('UserInfoService._filterByAlg: Looking for keys that match kty: ', kty);
|
|
254
|
+
keys = keys.filter(k => k.kty === kty);
|
|
255
|
+
Log.debug('UserInfoService._filterByAlg: Number of keys that match kty: ', kty, keys.length);
|
|
256
|
+
return keys;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=TokenService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenService.js","sourceRoot":"","sources":["../../../src/protocol/TokenService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { JwkKey } from '../types/crypto.js';
|
|
2
|
+
export declare class UrlUtility {
|
|
3
|
+
static addQueryParam(url: string, name: string, value: string): string;
|
|
4
|
+
static parseUrlFragment(value: string | undefined, delimiter?: string, global?: {
|
|
5
|
+
location?: Location;
|
|
6
|
+
}): Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
type JwtHandler = (req: XMLHttpRequest) => Promise<any>;
|
|
9
|
+
export declare class JsonService {
|
|
10
|
+
private _contentTypes;
|
|
11
|
+
private _XMLHttpRequest;
|
|
12
|
+
private _jwtHandler;
|
|
13
|
+
constructor(additionalContentTypes?: string[] | null, XMLHttpRequestCtor?: typeof XMLHttpRequest, jwtHandler?: JwtHandler | null);
|
|
14
|
+
getJson(url: string, token?: string): Promise<any>;
|
|
15
|
+
postForm(url: string, payload: Record<string, any>, basicAuth?: string): Promise<any>;
|
|
16
|
+
}
|
|
17
|
+
export interface OidcMetadata {
|
|
18
|
+
issuer: string;
|
|
19
|
+
authorization_endpoint: string;
|
|
20
|
+
token_endpoint?: string;
|
|
21
|
+
userinfo_endpoint?: string;
|
|
22
|
+
end_session_endpoint?: string;
|
|
23
|
+
check_session_iframe?: string;
|
|
24
|
+
revocation_endpoint?: string;
|
|
25
|
+
jwks_uri?: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface MetadataSettings {
|
|
29
|
+
authority?: string;
|
|
30
|
+
metadataUrl?: string;
|
|
31
|
+
metadata?: OidcMetadata;
|
|
32
|
+
metadataSeed?: Partial<OidcMetadata>;
|
|
33
|
+
signingKeys?: JwkKey[];
|
|
34
|
+
}
|
|
35
|
+
export declare class MetadataService {
|
|
36
|
+
private _settings;
|
|
37
|
+
private _jsonService;
|
|
38
|
+
private _metadataUrl;
|
|
39
|
+
constructor(settings: MetadataSettings, JsonServiceCtor?: typeof JsonService);
|
|
40
|
+
get metadataUrl(): string | undefined;
|
|
41
|
+
resetSigningKeys(): void;
|
|
42
|
+
getMetadata(): Promise<OidcMetadata>;
|
|
43
|
+
getIssuer(): Promise<string>;
|
|
44
|
+
getAuthorizationEndpoint(): Promise<string>;
|
|
45
|
+
getUserInfoEndpoint(): Promise<string>;
|
|
46
|
+
getTokenEndpoint(optional?: boolean): Promise<string | undefined>;
|
|
47
|
+
getCheckSessionIframe(): Promise<string | undefined>;
|
|
48
|
+
getEndSessionEndpoint(): Promise<string | undefined>;
|
|
49
|
+
getRevocationEndpoint(): Promise<string | undefined>;
|
|
50
|
+
getKeysEndpoint(): Promise<string | undefined>;
|
|
51
|
+
private _getMetadataProperty;
|
|
52
|
+
getSigningKeys(): Promise<any[]>;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=Http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../../src/services/Http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
|
|
2
|
+
import { Log } from '../utils/Log.js';
|
|
3
|
+
import { Global } from '../utils/Global.js';
|
|
4
|
+
//=============================================================================
|
|
5
|
+
// UrlUtility
|
|
6
|
+
//=============================================================================
|
|
7
|
+
export class UrlUtility {
|
|
8
|
+
static addQueryParam(url, name, value) {
|
|
9
|
+
if (url.indexOf('?') < 0) {
|
|
10
|
+
url += '?';
|
|
11
|
+
}
|
|
12
|
+
if (url[url.length - 1] !== '?') {
|
|
13
|
+
url += '&';
|
|
14
|
+
}
|
|
15
|
+
url += encodeURIComponent(name) + '=' + encodeURIComponent(value);
|
|
16
|
+
return url;
|
|
17
|
+
}
|
|
18
|
+
static parseUrlFragment(value, delimiter = '#', global = Global) {
|
|
19
|
+
if (typeof value !== 'string') {
|
|
20
|
+
value = global.location?.href ?? '';
|
|
21
|
+
}
|
|
22
|
+
let idx = value.lastIndexOf(delimiter);
|
|
23
|
+
if (idx >= 0) {
|
|
24
|
+
value = value.substring(idx + 1);
|
|
25
|
+
}
|
|
26
|
+
if (delimiter === '?') {
|
|
27
|
+
idx = value.indexOf('#');
|
|
28
|
+
if (idx >= 0) {
|
|
29
|
+
value = value.substring(0, idx);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const params = {};
|
|
33
|
+
const regex = /([^&=]+)=([^&]*)/g;
|
|
34
|
+
let m;
|
|
35
|
+
let counter = 0;
|
|
36
|
+
while ((m = regex.exec(value))) {
|
|
37
|
+
params[decodeURIComponent(m[1])] = decodeURIComponent(m[2].replace(/\+/g, ' '));
|
|
38
|
+
if (counter++ > 50) {
|
|
39
|
+
Log.error('UrlUtility.parseUrlFragment: response exceeded expected number of parameters', value);
|
|
40
|
+
return { error: 'Response exceeded expected number of parameters' };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return params;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class JsonService {
|
|
47
|
+
constructor(additionalContentTypes = null, XMLHttpRequestCtor = Global.XMLHttpRequest, jwtHandler = null) {
|
|
48
|
+
this._contentTypes = additionalContentTypes ? [...additionalContentTypes] : [];
|
|
49
|
+
this._contentTypes.push('application/json');
|
|
50
|
+
if (jwtHandler) {
|
|
51
|
+
this._contentTypes.push('application/jwt');
|
|
52
|
+
}
|
|
53
|
+
this._XMLHttpRequest = XMLHttpRequestCtor;
|
|
54
|
+
this._jwtHandler = jwtHandler;
|
|
55
|
+
}
|
|
56
|
+
getJson(url, token) {
|
|
57
|
+
if (!url) {
|
|
58
|
+
Log.error('JsonService.getJson: No url passed');
|
|
59
|
+
throw new Error('url');
|
|
60
|
+
}
|
|
61
|
+
Log.debug('JsonService.getJson, url: ', url);
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
const req = new this._XMLHttpRequest();
|
|
64
|
+
const _url = new URL(url);
|
|
65
|
+
_url.searchParams.append('_ts', String(Date.now()));
|
|
66
|
+
Log.debug('JsonService.getJson, cache buster url: ', _url.toString());
|
|
67
|
+
req.open('GET', _url.toString());
|
|
68
|
+
const allowedContentTypes = this._contentTypes;
|
|
69
|
+
const jwtHandler = this._jwtHandler;
|
|
70
|
+
req.onload = function () {
|
|
71
|
+
Log.debug('JsonService.getJson: HTTP response received, status', req.status);
|
|
72
|
+
if (req.status === 200) {
|
|
73
|
+
const contentType = req.getResponseHeader('Content-Type');
|
|
74
|
+
if (contentType) {
|
|
75
|
+
const found = allowedContentTypes.find(item => contentType.startsWith(item));
|
|
76
|
+
if (found === 'application/jwt') {
|
|
77
|
+
jwtHandler(req).then(resolve, reject);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (found) {
|
|
81
|
+
try {
|
|
82
|
+
resolve(JSON.parse(req.responseText));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
Log.error('JsonService.getJson: Error parsing JSON response', e.message);
|
|
87
|
+
reject(e);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
reject(Error('Invalid response Content-Type: ' + contentType + ', from URL: ' + url));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
reject(Error(req.statusText + ' (' + req.status + ')'));
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
req.onerror = function () {
|
|
99
|
+
Log.error('JsonService.getJson: network error');
|
|
100
|
+
reject(Error('Network Error'));
|
|
101
|
+
};
|
|
102
|
+
if (token) {
|
|
103
|
+
Log.debug('JsonService.getJson: token passed, setting Authorization header');
|
|
104
|
+
req.setRequestHeader('Authorization', 'Bearer ' + token);
|
|
105
|
+
}
|
|
106
|
+
req.send();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
postForm(url, payload, basicAuth) {
|
|
110
|
+
if (!url) {
|
|
111
|
+
Log.error('JsonService.postForm: No url passed');
|
|
112
|
+
throw new Error('url');
|
|
113
|
+
}
|
|
114
|
+
Log.debug('JsonService.postForm, url: ', url);
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
const req = new this._XMLHttpRequest();
|
|
117
|
+
req.open('POST', url);
|
|
118
|
+
const allowedContentTypes = this._contentTypes;
|
|
119
|
+
req.onload = function () {
|
|
120
|
+
Log.debug('JsonService.postForm: HTTP response received, status', req.status);
|
|
121
|
+
if (req.status === 200) {
|
|
122
|
+
const contentType = req.getResponseHeader('Content-Type');
|
|
123
|
+
if (contentType) {
|
|
124
|
+
const found = allowedContentTypes.find(item => contentType.startsWith(item));
|
|
125
|
+
if (found) {
|
|
126
|
+
try {
|
|
127
|
+
resolve(JSON.parse(req.responseText));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
Log.error('JsonService.postForm: Error parsing JSON response', e.message);
|
|
132
|
+
reject(e);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
reject(Error('Invalid response Content-Type: ' + contentType + ', from URL: ' + url));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (req.status === 400) {
|
|
141
|
+
const contentType = req.getResponseHeader('Content-Type');
|
|
142
|
+
if (contentType) {
|
|
143
|
+
const found = allowedContentTypes.find(item => contentType.startsWith(item));
|
|
144
|
+
if (found) {
|
|
145
|
+
try {
|
|
146
|
+
const body = JSON.parse(req.responseText);
|
|
147
|
+
if (body?.error) {
|
|
148
|
+
Log.error('JsonService.postForm: Error from server: ', body.error);
|
|
149
|
+
reject(new Error(body.error));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
Log.error('JsonService.postForm: Error parsing JSON response', e.message);
|
|
155
|
+
reject(e);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
reject(Error(req.statusText + ' (' + req.status + ')'));
|
|
162
|
+
};
|
|
163
|
+
req.onerror = function () {
|
|
164
|
+
Log.error('JsonService.postForm: network error');
|
|
165
|
+
reject(Error('Network Error'));
|
|
166
|
+
};
|
|
167
|
+
let body = '';
|
|
168
|
+
for (const key in payload) {
|
|
169
|
+
const value = payload[key];
|
|
170
|
+
if (value) {
|
|
171
|
+
if (body.length > 0)
|
|
172
|
+
body += '&';
|
|
173
|
+
body += encodeURIComponent(key) + '=' + encodeURIComponent(value);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
177
|
+
if (basicAuth !== undefined) {
|
|
178
|
+
req.setRequestHeader('Authorization', 'Basic ' + btoa(basicAuth));
|
|
179
|
+
}
|
|
180
|
+
req.send(body);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//=============================================================================
|
|
185
|
+
// MetadataService
|
|
186
|
+
//=============================================================================
|
|
187
|
+
const OidcMetadataUrlPath = '.well-known/openid-configuration';
|
|
188
|
+
export class MetadataService {
|
|
189
|
+
constructor(settings, JsonServiceCtor = JsonService) {
|
|
190
|
+
if (!settings) {
|
|
191
|
+
Log.error('MetadataService: No settings passed to MetadataService');
|
|
192
|
+
throw new Error('settings');
|
|
193
|
+
}
|
|
194
|
+
this._settings = settings;
|
|
195
|
+
this._jsonService = new JsonServiceCtor(['application/jwk-set+json']);
|
|
196
|
+
}
|
|
197
|
+
get metadataUrl() {
|
|
198
|
+
if (!this._metadataUrl) {
|
|
199
|
+
if (this._settings.metadataUrl) {
|
|
200
|
+
this._metadataUrl = this._settings.metadataUrl;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this._metadataUrl = this._settings.authority;
|
|
204
|
+
if (this._metadataUrl && this._metadataUrl.indexOf(OidcMetadataUrlPath) < 0) {
|
|
205
|
+
if (this._metadataUrl[this._metadataUrl.length - 1] !== '/') {
|
|
206
|
+
this._metadataUrl += '/';
|
|
207
|
+
}
|
|
208
|
+
this._metadataUrl += OidcMetadataUrlPath;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return this._metadataUrl;
|
|
213
|
+
}
|
|
214
|
+
resetSigningKeys() {
|
|
215
|
+
this._settings.signingKeys = undefined;
|
|
216
|
+
}
|
|
217
|
+
getMetadata() {
|
|
218
|
+
if (this._settings.metadata) {
|
|
219
|
+
Log.debug('MetadataService.getMetadata: Returning metadata from settings');
|
|
220
|
+
return Promise.resolve(this._settings.metadata);
|
|
221
|
+
}
|
|
222
|
+
if (!this.metadataUrl) {
|
|
223
|
+
Log.error('MetadataService.getMetadata: No authority or metadataUrl configured on settings');
|
|
224
|
+
return Promise.reject(new Error('No authority or metadataUrl configured on settings'));
|
|
225
|
+
}
|
|
226
|
+
Log.debug('MetadataService.getMetadata: getting metadata from', this.metadataUrl);
|
|
227
|
+
return this._jsonService.getJson(this.metadataUrl).then(metadata => {
|
|
228
|
+
Log.debug('MetadataService.getMetadata: json received');
|
|
229
|
+
const seed = this._settings.metadataSeed || {};
|
|
230
|
+
this._settings.metadata = Object.assign({}, seed, metadata);
|
|
231
|
+
return this._settings.metadata;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
getIssuer() { return this._getMetadataProperty('issuer'); }
|
|
235
|
+
getAuthorizationEndpoint() { return this._getMetadataProperty('authorization_endpoint'); }
|
|
236
|
+
getUserInfoEndpoint() { return this._getMetadataProperty('userinfo_endpoint'); }
|
|
237
|
+
getTokenEndpoint(optional = true) { return this._getMetadataProperty('token_endpoint', optional); }
|
|
238
|
+
getCheckSessionIframe() { return this._getMetadataProperty('check_session_iframe', true); }
|
|
239
|
+
getEndSessionEndpoint() { return this._getMetadataProperty('end_session_endpoint', true); }
|
|
240
|
+
getRevocationEndpoint() { return this._getMetadataProperty('revocation_endpoint', true); }
|
|
241
|
+
getKeysEndpoint() { return this._getMetadataProperty('jwks_uri', true); }
|
|
242
|
+
_getMetadataProperty(name, optional = false) {
|
|
243
|
+
Log.debug('MetadataService.getMetadataProperty for: ' + name);
|
|
244
|
+
return this.getMetadata().then(metadata => {
|
|
245
|
+
Log.debug('MetadataService.getMetadataProperty: metadata received');
|
|
246
|
+
if (metadata[name] === undefined) {
|
|
247
|
+
if (optional) {
|
|
248
|
+
Log.warn('MetadataService.getMetadataProperty: Metadata does not contain optional property ' + name);
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
Log.error('MetadataService.getMetadataProperty: Metadata does not contain property ' + name);
|
|
252
|
+
throw new Error('Metadata does not contain property ' + name);
|
|
253
|
+
}
|
|
254
|
+
return metadata[name];
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
getSigningKeys() {
|
|
258
|
+
if (this._settings.signingKeys) {
|
|
259
|
+
Log.debug('MetadataService.getSigningKeys: Returning signingKeys from settings');
|
|
260
|
+
return Promise.resolve(this._settings.signingKeys);
|
|
261
|
+
}
|
|
262
|
+
return this._getMetadataProperty('jwks_uri').then((jwks_uri) => {
|
|
263
|
+
Log.debug('MetadataService.getSigningKeys: jwks_uri received', jwks_uri);
|
|
264
|
+
return this._jsonService.getJson(jwks_uri).then(keySet => {
|
|
265
|
+
Log.debug('MetadataService.getSigningKeys: key set received', keySet);
|
|
266
|
+
if (!keySet.keys) {
|
|
267
|
+
Log.error('MetadataService.getSigningKeys: Missing keys on keyset');
|
|
268
|
+
throw new Error('Missing keys on keyset');
|
|
269
|
+
}
|
|
270
|
+
this._settings.signingKeys = keySet.keys;
|
|
271
|
+
return this._settings.signingKeys;
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=Http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Http.js","sourceRoot":"","sources":["../../../src/services/Http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TimerService } from '../utils/Global.js';
|
|
2
|
+
import { Event } from '../utils/Event.js';
|
|
3
|
+
export declare class Timer extends Event {
|
|
4
|
+
private _timer;
|
|
5
|
+
private _nowFunc;
|
|
6
|
+
private _expiration;
|
|
7
|
+
private _timerHandle;
|
|
8
|
+
constructor(name: string, timer?: TimerService, nowFunc?: () => number);
|
|
9
|
+
get now(): number;
|
|
10
|
+
get expiration(): number;
|
|
11
|
+
init(duration: number): void;
|
|
12
|
+
cancel(): void;
|
|
13
|
+
private _callback;
|
|
14
|
+
}
|
|
15
|
+
export declare class ClockService {
|
|
16
|
+
getEpochTime(): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=Timer.d.ts.map
|