@kaapi/oauth2-auth-design 0.0.13
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 +3 -0
- package/lib/flows/auth-code/authorization-route.d.ts +53 -0
- package/lib/flows/auth-code/authorization-route.js +202 -0
- package/lib/flows/auth-code/authorization-route.js.map +1 -0
- package/lib/flows/auth-code/open-id.d.ts +53 -0
- package/lib/flows/auth-code/open-id.js +199 -0
- package/lib/flows/auth-code/open-id.js.map +1 -0
- package/lib/flows/auth-code/token-route.d.ts +35 -0
- package/lib/flows/auth-code/token-route.js +61 -0
- package/lib/flows/auth-code/token-route.js.map +1 -0
- package/lib/flows/auth-code.ts/open-id.d.ts +52 -0
- package/lib/flows/auth-code.ts/open-id.js +169 -0
- package/lib/flows/auth-code.ts/open-id.js.map +1 -0
- package/lib/flows/authentication-code.d.ts +53 -0
- package/lib/flows/authentication-code.js +380 -0
- package/lib/flows/authentication-code.js.map +1 -0
- package/lib/flows/client-credentials.d.ts +55 -0
- package/lib/flows/client-credentials.js +318 -0
- package/lib/flows/client-credentials.js.map +1 -0
- package/lib/flows/common.d.ts +139 -0
- package/lib/flows/common.js +235 -0
- package/lib/flows/common.js.map +1 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +16 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/cache-set.d.ts +12 -0
- package/lib/utils/cache-set.js +35 -0
- package/lib/utils/cache-set.js.map +1 -0
- package/lib/utils/client-auth-methods.d.ts +77 -0
- package/lib/utils/client-auth-methods.js +225 -0
- package/lib/utils/client-auth-methods.js.map +1 -0
- package/lib/utils/in-memory-cache.d.ts +5 -0
- package/lib/utils/in-memory-cache.js +30 -0
- package/lib/utils/in-memory-cache.js.map +1 -0
- package/lib/utils/in-memory-jwks-store.d.ts +12 -0
- package/lib/utils/in-memory-jwks-store.js +46 -0
- package/lib/utils/in-memory-jwks-store.js.map +1 -0
- package/lib/utils/jwks-generator.d.ts +58 -0
- package/lib/utils/jwks-generator.js +141 -0
- package/lib/utils/jwks-generator.js.map +1 -0
- package/lib/utils/jwks-store.d.ts +13 -0
- package/lib/utils/jwks-store.js +3 -0
- package/lib/utils/jwks-store.js.map +1 -0
- package/lib/utils/token-types.d.ts +46 -0
- package/lib/utils/token-types.js +143 -0
- package/lib/utils/token-types.js.map +1 -0
- package/package.json +44 -0
- package/types/overrides.d.ts +14 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _OAuth2WithJWKSAuthDesign_jwksGenerator;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.OAuth2WithJWKSAuthDesign = exports.OAuth2AuthDesign = exports.OAuth2TokenResponse = exports.OAuth2RefreshTokenRoute = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const kaapi_1 = require("@kaapi/kaapi");
|
|
7
|
+
const in_memory_jwks_store_1 = require("../utils/in-memory-jwks-store");
|
|
8
|
+
const jwks_generator_1 = require("../utils/jwks-generator");
|
|
9
|
+
const token_types_1 = require("../utils/token-types");
|
|
10
|
+
const client_auth_methods_1 = require("../utils/client-auth-methods");
|
|
11
|
+
class OAuth2RefreshTokenRoute {
|
|
12
|
+
get path() {
|
|
13
|
+
return this._path;
|
|
14
|
+
}
|
|
15
|
+
get handler() {
|
|
16
|
+
return this._handler;
|
|
17
|
+
}
|
|
18
|
+
constructor(path, handler) {
|
|
19
|
+
this._path = path;
|
|
20
|
+
this._handler = handler;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.OAuth2RefreshTokenRoute = OAuth2RefreshTokenRoute;
|
|
24
|
+
class OAuth2TokenResponse {
|
|
25
|
+
constructor({ access_token, expires_in, refresh_token, scope, id_token }) {
|
|
26
|
+
this.tokenType = 'bearer';
|
|
27
|
+
this.accessToken = access_token;
|
|
28
|
+
this.expiresIn = expires_in;
|
|
29
|
+
this.refreshToken = refresh_token;
|
|
30
|
+
this.scope = scope;
|
|
31
|
+
this.idToken = id_token;
|
|
32
|
+
}
|
|
33
|
+
setAccessToken(value) {
|
|
34
|
+
this.accessToken = value;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
getAccessToken() {
|
|
38
|
+
return this.accessToken;
|
|
39
|
+
}
|
|
40
|
+
setTokenType(value) {
|
|
41
|
+
this.tokenType = typeof value == 'string' ? value : value.prefix;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
getTokenType() {
|
|
45
|
+
return this.tokenType;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @param value number of seconds
|
|
49
|
+
*/
|
|
50
|
+
setExpiresIn(value) {
|
|
51
|
+
this.expiresIn = value;
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @returns number of seconds
|
|
56
|
+
*/
|
|
57
|
+
getExpiresIn() {
|
|
58
|
+
return this.expiresIn;
|
|
59
|
+
}
|
|
60
|
+
setRefreshToken(value) {
|
|
61
|
+
this.refreshToken = value;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
getRefreshToken() {
|
|
65
|
+
return this.refreshToken;
|
|
66
|
+
}
|
|
67
|
+
setScope(value) {
|
|
68
|
+
this.scope = Array.isArray(value) ? value.join(' ') : value;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
getScope() {
|
|
72
|
+
return this.scope;
|
|
73
|
+
}
|
|
74
|
+
setIDToken(value) {
|
|
75
|
+
this.idToken = value;
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
getIDToken() {
|
|
79
|
+
return this.idToken;
|
|
80
|
+
}
|
|
81
|
+
toObject() {
|
|
82
|
+
return {
|
|
83
|
+
access_token: this.getAccessToken(),
|
|
84
|
+
token_type: this.getTokenType(),
|
|
85
|
+
expires_in: this.getExpiresIn(),
|
|
86
|
+
refresh_token: this.getRefreshToken(),
|
|
87
|
+
scope: this.getScope(),
|
|
88
|
+
id_token: this.getIDToken(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
toJSON() {
|
|
92
|
+
return this.toObject();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.OAuth2TokenResponse = OAuth2TokenResponse;
|
|
96
|
+
//#endregion OAuth2TokenResponse
|
|
97
|
+
//#region OAuth2AuthDesign
|
|
98
|
+
class OAuth2AuthDesign extends kaapi_1.AuthDesign {
|
|
99
|
+
get tokenType() {
|
|
100
|
+
return this._tokenType.prefix;
|
|
101
|
+
}
|
|
102
|
+
get clientAuthMethods() {
|
|
103
|
+
const result = {
|
|
104
|
+
client_secret_basic: undefined,
|
|
105
|
+
client_secret_post: undefined,
|
|
106
|
+
client_secret_jwt: undefined,
|
|
107
|
+
private_key_jwt: undefined,
|
|
108
|
+
none: undefined
|
|
109
|
+
};
|
|
110
|
+
const keys = Object.keys(this._clientAuthMethods).map(key => {
|
|
111
|
+
const k = key;
|
|
112
|
+
result[k] = this._clientAuthMethods[k];
|
|
113
|
+
return this._clientAuthMethods[k] ? key : undefined;
|
|
114
|
+
}).filter((key) => !!key);
|
|
115
|
+
if (!keys.length) {
|
|
116
|
+
result.client_secret_basic = new client_auth_methods_1.ClientSecretBasic();
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
constructor() {
|
|
121
|
+
super();
|
|
122
|
+
this._clientAuthMethods = {
|
|
123
|
+
client_secret_basic: undefined,
|
|
124
|
+
client_secret_post: undefined,
|
|
125
|
+
client_secret_jwt: undefined,
|
|
126
|
+
private_key_jwt: undefined,
|
|
127
|
+
none: undefined
|
|
128
|
+
};
|
|
129
|
+
this._tokenType = new token_types_1.BearerToken();
|
|
130
|
+
/*{
|
|
131
|
+
prefix: 'Bearer',
|
|
132
|
+
isValid: () => ({ isValid: true })
|
|
133
|
+
}*/
|
|
134
|
+
}
|
|
135
|
+
_extractClientParams(req, authMethodsInstances, checkOrder) {
|
|
136
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
let clientId;
|
|
138
|
+
let clientSecret;
|
|
139
|
+
let error;
|
|
140
|
+
let errorDescription;
|
|
141
|
+
for (const am of checkOrder) {
|
|
142
|
+
const amInstance = authMethodsInstances[am];
|
|
143
|
+
if (amInstance) {
|
|
144
|
+
//console.log('Check', amInstance.method, '...')
|
|
145
|
+
const v = yield amInstance.extractParams(req);
|
|
146
|
+
if (v.hasAuthMethod) {
|
|
147
|
+
//console.log(amInstance.method, 'IS BEING USED')
|
|
148
|
+
clientId = v.clientId;
|
|
149
|
+
clientSecret = v.clientSecret;
|
|
150
|
+
if (!v.clientId) {
|
|
151
|
+
error = 'invalid_request';
|
|
152
|
+
errorDescription = `Error ${amInstance.method}: Missing client_id`;
|
|
153
|
+
}
|
|
154
|
+
else if (!amInstance.secretIsOptional && !v.clientSecret) {
|
|
155
|
+
error = 'invalid_request';
|
|
156
|
+
errorDescription = `Error ${amInstance.method}: Missing client_secret`;
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
//console.log(amInstance.method, 'was not used')
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
error,
|
|
167
|
+
errorDescription,
|
|
168
|
+
clientId,
|
|
169
|
+
clientSecret
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
setTokenType(value) {
|
|
174
|
+
this._tokenType = value;
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
getTokenEndpointAuthMethods() {
|
|
178
|
+
const result = Object.keys(this._clientAuthMethods).map(key => {
|
|
179
|
+
return this._clientAuthMethods[key] ? key : undefined;
|
|
180
|
+
}).filter((key) => !!key);
|
|
181
|
+
if (!result.length) {
|
|
182
|
+
result.push('client_secret_basic');
|
|
183
|
+
}
|
|
184
|
+
return (0, client_auth_methods_1.sortTokenEndpointAuthMethods)(result);
|
|
185
|
+
}
|
|
186
|
+
clientSecretBasicAuthenticationMethod() {
|
|
187
|
+
this._clientAuthMethods.client_secret_basic = new client_auth_methods_1.ClientSecretBasic();
|
|
188
|
+
return this;
|
|
189
|
+
}
|
|
190
|
+
clientSecretPostAuthenticationMethod() {
|
|
191
|
+
this._clientAuthMethods.client_secret_post = new client_auth_methods_1.ClientSecretPost();
|
|
192
|
+
return this;
|
|
193
|
+
}
|
|
194
|
+
noneAuthenticationMethod() {
|
|
195
|
+
this._clientAuthMethods.none = new client_auth_methods_1.NoneAuthMethod();
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
addClientAuthenticationMethod(value) {
|
|
199
|
+
if (value == 'client_secret_basic') {
|
|
200
|
+
this.clientSecretPostAuthenticationMethod();
|
|
201
|
+
}
|
|
202
|
+
else if (value == 'client_secret_post') {
|
|
203
|
+
this.clientSecretBasicAuthenticationMethod();
|
|
204
|
+
}
|
|
205
|
+
else if (value == 'none') {
|
|
206
|
+
this.noneAuthenticationMethod();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this._clientAuthMethods[value.method] = value;
|
|
210
|
+
}
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.OAuth2AuthDesign = OAuth2AuthDesign;
|
|
215
|
+
class OAuth2WithJWKSAuthDesign extends OAuth2AuthDesign {
|
|
216
|
+
get jwksGenerator() {
|
|
217
|
+
return tslib_1.__classPrivateFieldGet(this, _OAuth2WithJWKSAuthDesign_jwksGenerator, "f");
|
|
218
|
+
}
|
|
219
|
+
constructor(jwksStore, ttlSeconds) {
|
|
220
|
+
super();
|
|
221
|
+
_OAuth2WithJWKSAuthDesign_jwksGenerator.set(this, void 0);
|
|
222
|
+
tslib_1.__classPrivateFieldSet(this, _OAuth2WithJWKSAuthDesign_jwksGenerator, new jwks_generator_1.JWKSGenerator(jwksStore || (0, in_memory_jwks_store_1.getInMemoryJWKSStore)(), ttlSeconds), "f");
|
|
223
|
+
}
|
|
224
|
+
setTokenTTL(ttlSeconds) {
|
|
225
|
+
tslib_1.__classPrivateFieldGet(this, _OAuth2WithJWKSAuthDesign_jwksGenerator, "f").ttl = ttlSeconds;
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
getTokenTTL() {
|
|
229
|
+
return tslib_1.__classPrivateFieldGet(this, _OAuth2WithJWKSAuthDesign_jwksGenerator, "f").ttl;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.OAuth2WithJWKSAuthDesign = OAuth2WithJWKSAuthDesign;
|
|
233
|
+
_OAuth2WithJWKSAuthDesign_jwksGenerator = new WeakMap();
|
|
234
|
+
//#endregion OAuth2AuthDesign
|
|
235
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/flows/common.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import '../types/overrides.d.ts'
|
|
2
|
+
export * from './flows/common';
|
|
3
|
+
export * from './flows/auth-code/authorization-route';
|
|
4
|
+
export * from './flows/auth-code/token-route';
|
|
5
|
+
export * from './flows/auth-code/open-id';
|
|
6
|
+
export * from './flows/authentication-code';
|
|
7
|
+
export * from './flows/client-credentials';
|
|
8
|
+
export * from './utils/cache-set';
|
|
9
|
+
export * from './utils/client-auth-methods';
|
|
10
|
+
export * from './utils/in-memory-jwks-store';
|
|
11
|
+
export * from './utils/jwks-generator';
|
|
12
|
+
export * from './utils/jwks-store';
|
|
13
|
+
export * from './utils/token-types';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./flows/common"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./flows/auth-code/authorization-route"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./flows/auth-code/token-route"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./flows/auth-code/open-id"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./flows/authentication-code"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./flows/client-credentials"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./utils/cache-set"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./utils/client-auth-methods"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./utils/in-memory-jwks-store"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./utils/jwks-generator"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./utils/jwks-store"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./utils/token-types"), exports);
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAA8B;AAC9B,gFAAqD;AACrD,wEAA6C;AAC7C,oEAAyC;AACzC,sEAA2C;AAC3C,qEAA0C;AAE1C,4DAAiC;AACjC,sEAA2C;AAC3C,uEAA4C;AAC5C,iEAAsC;AACtC,6DAAkC;AAClC,8DAAmC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CacheSet<T extends string | number> {
|
|
2
|
+
has(value: T): Promise<boolean>;
|
|
3
|
+
delete(value: T): Promise<void>;
|
|
4
|
+
add(value: T, ttlSeconds: number): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare class InMemoryTmpCache<T extends string | number = string | number> implements CacheSet<T> {
|
|
7
|
+
private values;
|
|
8
|
+
has(value: T): Promise<boolean>;
|
|
9
|
+
delete(value: T): Promise<void>;
|
|
10
|
+
add(value: T, ttlSeconds: number): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export type StringCacheSet = CacheSet<string>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryTmpCache = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
class InMemoryTmpCache {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.values = {};
|
|
8
|
+
}
|
|
9
|
+
has(value) {
|
|
10
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
11
|
+
if (this.values[`${value}`]) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
delete(value) {
|
|
18
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
delete this.values[`${value}`];
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
add(value, ttlSeconds) {
|
|
23
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
const to = this.values[`${value}`];
|
|
25
|
+
if (to) {
|
|
26
|
+
clearTimeout(to);
|
|
27
|
+
}
|
|
28
|
+
this.values[`${value}`] = setTimeout(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
yield this.delete(value);
|
|
30
|
+
}), ttlSeconds * 1000);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.InMemoryTmpCache = InMemoryTmpCache;
|
|
35
|
+
//# sourceMappingURL=cache-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-set.js","sourceRoot":"","sources":["../../src/utils/cache-set.ts"],"names":[],"mappings":";;;;AAMA,MAAa,gBAAgB;IAA7B;QACY,WAAM,GAAmC,EAAE,CAAA;IAsBvD,CAAC;IApBS,GAAG,CAAC,KAAQ;;YACd,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAA;YACf,CAAC;YACD,OAAO,KAAK,CAAA;QAChB,CAAC;KAAA;IAEK,MAAM,CAAC,KAAQ;;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;QAClC,CAAC;KAAA;IAEK,GAAG,CAAC,KAAQ,EAAE,UAAkB;;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;YAClC,IAAI,EAAE,EAAE,CAAC;gBACL,YAAY,CAAC,EAAE,CAAC,CAAA;YACpB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,GAAS,EAAE;gBAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC,CAAA,EAAE,UAAU,GAAG,IAAI,CAAC,CAAA;QACzB,CAAC;KAAA;CACJ;AAvBD,4CAuBC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ReqRefDefaults, Request } from '@kaapi/kaapi';
|
|
2
|
+
import { JWTPayload, CryptoKey, KeyObject, JWK } from 'jose';
|
|
3
|
+
import { ClientAuthentication } from '@novice1/api-doc-generator';
|
|
4
|
+
export type TokenEndpointAuthMethod = 'client_secret_basic' | 'client_secret_post' | 'client_secret_jwt' | 'private_key_jwt' | 'none';
|
|
5
|
+
export type OAuth2ClientAuthentication = ClientAuthentication | TokenEndpointAuthMethod;
|
|
6
|
+
export declare function sortTokenEndpointAuthMethods(array: TokenEndpointAuthMethod[]): TokenEndpointAuthMethod[];
|
|
7
|
+
export type ClientAuthMethodResponse = {
|
|
8
|
+
/**
|
|
9
|
+
* if the authentication method is in the request
|
|
10
|
+
*/
|
|
11
|
+
hasAuthMethod: boolean;
|
|
12
|
+
clientId?: string;
|
|
13
|
+
clientSecret?: string;
|
|
14
|
+
};
|
|
15
|
+
export interface ClientAuthMethod {
|
|
16
|
+
readonly method: TokenEndpointAuthMethod;
|
|
17
|
+
readonly secretIsOptional: boolean;
|
|
18
|
+
readonly algorithms?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* Extract clientId and clientSecret from the request
|
|
21
|
+
*/
|
|
22
|
+
extractParams(request: Request<ReqRefDefaults>): Promise<ClientAuthMethodResponse> | ClientAuthMethodResponse;
|
|
23
|
+
}
|
|
24
|
+
export declare class ClientSecretBasic implements ClientAuthMethod {
|
|
25
|
+
get method(): 'client_secret_basic';
|
|
26
|
+
get secretIsOptional(): boolean;
|
|
27
|
+
extractParams(request: Request<ReqRefDefaults>): ClientAuthMethodResponse;
|
|
28
|
+
}
|
|
29
|
+
export declare class ClientSecretPost implements ClientAuthMethod {
|
|
30
|
+
get method(): 'client_secret_post';
|
|
31
|
+
get secretIsOptional(): boolean;
|
|
32
|
+
extractParams(req: Request<ReqRefDefaults>): ClientAuthMethodResponse;
|
|
33
|
+
}
|
|
34
|
+
export declare class NoneAuthMethod implements ClientAuthMethod {
|
|
35
|
+
get method(): 'none';
|
|
36
|
+
get secretIsOptional(): boolean;
|
|
37
|
+
extractParams(req: Request<ReqRefDefaults>): ClientAuthMethodResponse;
|
|
38
|
+
}
|
|
39
|
+
export declare enum ClientSecretJwtAlgorithms {
|
|
40
|
+
HS256 = "HS256",
|
|
41
|
+
HS384 = "HS384",
|
|
42
|
+
HS512 = "HS512"
|
|
43
|
+
}
|
|
44
|
+
export declare class ClientSecretJwt implements ClientAuthMethod {
|
|
45
|
+
#private;
|
|
46
|
+
static algo: typeof ClientSecretJwtAlgorithms;
|
|
47
|
+
get method(): 'client_secret_jwt';
|
|
48
|
+
get secretIsOptional(): boolean;
|
|
49
|
+
get algorithms(): ClientSecretJwtAlgorithms[];
|
|
50
|
+
constructor();
|
|
51
|
+
addAlgo(algo: ClientSecretJwtAlgorithms): this;
|
|
52
|
+
getClientSecret(handler: (clientId: string, decoded: JWTPayload, clientAssertion: string) => Promise<Uint8Array | string | null>): this;
|
|
53
|
+
extractParams(req: Request<ReqRefDefaults>): Promise<ClientAuthMethodResponse>;
|
|
54
|
+
}
|
|
55
|
+
export declare enum PrivateKeyJwtAlgorithms {
|
|
56
|
+
RS256 = "RS256",
|
|
57
|
+
RS384 = "RS384",
|
|
58
|
+
RS512 = "RS512",
|
|
59
|
+
PS256 = "PS256",
|
|
60
|
+
PS384 = "PS384",
|
|
61
|
+
PS512 = "PS512",
|
|
62
|
+
ES256 = "ES256",
|
|
63
|
+
ES384 = "ES384",
|
|
64
|
+
ES512 = "ES512",
|
|
65
|
+
EdDSA = "EdDSA"
|
|
66
|
+
}
|
|
67
|
+
export declare class PrivateKeyJwt implements ClientAuthMethod {
|
|
68
|
+
#private;
|
|
69
|
+
static algo: typeof PrivateKeyJwtAlgorithms;
|
|
70
|
+
get method(): 'private_key_jwt';
|
|
71
|
+
get secretIsOptional(): boolean;
|
|
72
|
+
get algorithms(): PrivateKeyJwtAlgorithms[];
|
|
73
|
+
constructor();
|
|
74
|
+
addAlgo(algo: PrivateKeyJwtAlgorithms): this;
|
|
75
|
+
getPublicKeyForClient(handler: (clientId: string, decoded: JWTPayload, clientAssertion: string) => Promise<CryptoKey | KeyObject | JWK | Uint8Array | string | null>): this;
|
|
76
|
+
extractParams(req: Request<ReqRefDefaults>): Promise<ClientAuthMethodResponse>;
|
|
77
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _ClientSecretJwt_algorithms, _ClientSecretJwt_handler, _PrivateKeyJwt_algorithms, _PrivateKeyJwt_handler;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PrivateKeyJwt = exports.PrivateKeyJwtAlgorithms = exports.ClientSecretJwt = exports.ClientSecretJwtAlgorithms = exports.NoneAuthMethod = exports.ClientSecretPost = exports.ClientSecretBasic = void 0;
|
|
5
|
+
exports.sortTokenEndpointAuthMethods = sortTokenEndpointAuthMethods;
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const jose_1 = require("jose");
|
|
8
|
+
const sortedTokenEndpointAuthMethods = ['client_secret_basic', 'client_secret_post', 'client_secret_jwt', 'private_key_jwt', 'none'];
|
|
9
|
+
const orderMapTokenEndpointAuthMethods = new Map(sortedTokenEndpointAuthMethods.map((item, index) => [item, index]));
|
|
10
|
+
function sortTokenEndpointAuthMethods(array) {
|
|
11
|
+
return array.sort((a, b) => {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
return ((_a = orderMapTokenEndpointAuthMethods.get(a)) !== null && _a !== void 0 ? _a : Infinity) - ((_b = orderMapTokenEndpointAuthMethods.get(b)) !== null && _b !== void 0 ? _b : Infinity);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
class ClientSecretBasic {
|
|
17
|
+
get method() {
|
|
18
|
+
return 'client_secret_basic';
|
|
19
|
+
}
|
|
20
|
+
get secretIsOptional() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
extractParams(request) {
|
|
24
|
+
const res = {
|
|
25
|
+
hasAuthMethod: false
|
|
26
|
+
};
|
|
27
|
+
const authorization = request.raw.req.headers.authorization;
|
|
28
|
+
const [authType, base64Credentials] = authorization ? authorization.split(/\s+/) : ['', ''];
|
|
29
|
+
if (authType.toLowerCase() == 'basic') {
|
|
30
|
+
res.hasAuthMethod = true;
|
|
31
|
+
const decoded = Buffer.from(base64Credentials, 'base64').toString('utf-8').split(':');
|
|
32
|
+
if (!decoded[0] || !decoded[1]) {
|
|
33
|
+
//
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
res.clientId = decoded[0];
|
|
37
|
+
res.clientSecret = decoded[1];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return res;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.ClientSecretBasic = ClientSecretBasic;
|
|
44
|
+
class ClientSecretPost {
|
|
45
|
+
get method() {
|
|
46
|
+
return 'client_secret_post';
|
|
47
|
+
}
|
|
48
|
+
get secretIsOptional() {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
extractParams(req) {
|
|
52
|
+
const res = {
|
|
53
|
+
hasAuthMethod: false
|
|
54
|
+
};
|
|
55
|
+
if (req.payload && typeof req.payload === 'object' &&
|
|
56
|
+
'client_id' in req.payload &&
|
|
57
|
+
'client_secret' in req.payload) {
|
|
58
|
+
res.hasAuthMethod = true;
|
|
59
|
+
if (typeof req.payload.client_id === 'string')
|
|
60
|
+
res.clientId = req.payload.client_id;
|
|
61
|
+
if (typeof req.payload.client_secret === 'string')
|
|
62
|
+
res.clientSecret = req.payload.client_secret;
|
|
63
|
+
}
|
|
64
|
+
return res;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.ClientSecretPost = ClientSecretPost;
|
|
68
|
+
class NoneAuthMethod {
|
|
69
|
+
get method() {
|
|
70
|
+
return 'none';
|
|
71
|
+
}
|
|
72
|
+
get secretIsOptional() {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
extractParams(req) {
|
|
76
|
+
const res = {
|
|
77
|
+
hasAuthMethod: false
|
|
78
|
+
};
|
|
79
|
+
if (req.payload && typeof req.payload === 'object' &&
|
|
80
|
+
'client_id' in req.payload) {
|
|
81
|
+
res.hasAuthMethod = true;
|
|
82
|
+
if (typeof req.payload.client_id === 'string')
|
|
83
|
+
res.clientId = req.payload.client_id;
|
|
84
|
+
}
|
|
85
|
+
return res;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.NoneAuthMethod = NoneAuthMethod;
|
|
89
|
+
var ClientSecretJwtAlgorithms;
|
|
90
|
+
(function (ClientSecretJwtAlgorithms) {
|
|
91
|
+
ClientSecretJwtAlgorithms["HS256"] = "HS256";
|
|
92
|
+
ClientSecretJwtAlgorithms["HS384"] = "HS384";
|
|
93
|
+
ClientSecretJwtAlgorithms["HS512"] = "HS512";
|
|
94
|
+
})(ClientSecretJwtAlgorithms || (exports.ClientSecretJwtAlgorithms = ClientSecretJwtAlgorithms = {}));
|
|
95
|
+
class ClientSecretJwt {
|
|
96
|
+
get method() {
|
|
97
|
+
return 'client_secret_jwt';
|
|
98
|
+
}
|
|
99
|
+
get secretIsOptional() {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
get algorithms() {
|
|
103
|
+
return tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_algorithms, "f").length ? tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_algorithms, "f") : [ClientSecretJwtAlgorithms.HS256];
|
|
104
|
+
}
|
|
105
|
+
constructor() {
|
|
106
|
+
_ClientSecretJwt_algorithms.set(this, []);
|
|
107
|
+
_ClientSecretJwt_handler.set(this, void 0);
|
|
108
|
+
tslib_1.__classPrivateFieldSet(this, _ClientSecretJwt_handler, () => tslib_1.__awaiter(this, void 0, void 0, function* () { return null; }), "f");
|
|
109
|
+
}
|
|
110
|
+
addAlgo(algo) {
|
|
111
|
+
if (!tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_algorithms, "f").includes(algo)) {
|
|
112
|
+
tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_algorithms, "f").push(algo);
|
|
113
|
+
tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_algorithms, "f").sort();
|
|
114
|
+
}
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
getClientSecret(handler) {
|
|
118
|
+
tslib_1.__classPrivateFieldSet(this, _ClientSecretJwt_handler, handler, "f");
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
extractParams(req) {
|
|
122
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const res = {
|
|
124
|
+
hasAuthMethod: false
|
|
125
|
+
};
|
|
126
|
+
if (req.payload &&
|
|
127
|
+
typeof req.payload === 'object' &&
|
|
128
|
+
'client_assertion_type' in req.payload &&
|
|
129
|
+
req.payload.client_assertion_type == 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' &&
|
|
130
|
+
'client_assertion' in req.payload &&
|
|
131
|
+
typeof req.payload.client_assertion === 'string') {
|
|
132
|
+
res.hasAuthMethod = true;
|
|
133
|
+
const decoded = (0, jose_1.decodeJwt)(req.payload.client_assertion);
|
|
134
|
+
if (decoded.aud && typeof decoded.aud === 'string') {
|
|
135
|
+
res.clientId = decoded.aud;
|
|
136
|
+
const clientSecret = yield tslib_1.__classPrivateFieldGet(this, _ClientSecretJwt_handler, "f").call(this, decoded.aud, decoded, req.payload.client_assertion);
|
|
137
|
+
if (clientSecret) {
|
|
138
|
+
const { payload } = yield (0, jose_1.jwtVerify)(req.payload.client_assertion, typeof clientSecret === 'string' ? new TextEncoder().encode(clientSecret) : clientSecret, {
|
|
139
|
+
algorithms: this.algorithms
|
|
140
|
+
});
|
|
141
|
+
if (payload) {
|
|
142
|
+
res.clientSecret = typeof clientSecret === 'string' ? clientSecret : new TextDecoder().decode(clientSecret);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return res;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.ClientSecretJwt = ClientSecretJwt;
|
|
152
|
+
_ClientSecretJwt_algorithms = new WeakMap(), _ClientSecretJwt_handler = new WeakMap();
|
|
153
|
+
ClientSecretJwt.algo = ClientSecretJwtAlgorithms;
|
|
154
|
+
var PrivateKeyJwtAlgorithms;
|
|
155
|
+
(function (PrivateKeyJwtAlgorithms) {
|
|
156
|
+
PrivateKeyJwtAlgorithms["RS256"] = "RS256";
|
|
157
|
+
PrivateKeyJwtAlgorithms["RS384"] = "RS384";
|
|
158
|
+
PrivateKeyJwtAlgorithms["RS512"] = "RS512";
|
|
159
|
+
PrivateKeyJwtAlgorithms["PS256"] = "PS256";
|
|
160
|
+
PrivateKeyJwtAlgorithms["PS384"] = "PS384";
|
|
161
|
+
PrivateKeyJwtAlgorithms["PS512"] = "PS512";
|
|
162
|
+
PrivateKeyJwtAlgorithms["ES256"] = "ES256";
|
|
163
|
+
PrivateKeyJwtAlgorithms["ES384"] = "ES384";
|
|
164
|
+
PrivateKeyJwtAlgorithms["ES512"] = "ES512";
|
|
165
|
+
PrivateKeyJwtAlgorithms["EdDSA"] = "EdDSA";
|
|
166
|
+
})(PrivateKeyJwtAlgorithms || (exports.PrivateKeyJwtAlgorithms = PrivateKeyJwtAlgorithms = {}));
|
|
167
|
+
class PrivateKeyJwt {
|
|
168
|
+
get method() {
|
|
169
|
+
return 'private_key_jwt';
|
|
170
|
+
}
|
|
171
|
+
get secretIsOptional() {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
get algorithms() {
|
|
175
|
+
return tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_algorithms, "f").length ? tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_algorithms, "f") : [PrivateKeyJwtAlgorithms.RS256];
|
|
176
|
+
}
|
|
177
|
+
constructor() {
|
|
178
|
+
_PrivateKeyJwt_algorithms.set(this, []);
|
|
179
|
+
_PrivateKeyJwt_handler.set(this, void 0);
|
|
180
|
+
tslib_1.__classPrivateFieldSet(this, _PrivateKeyJwt_handler, () => tslib_1.__awaiter(this, void 0, void 0, function* () { return null; }), "f");
|
|
181
|
+
}
|
|
182
|
+
addAlgo(algo) {
|
|
183
|
+
if (!tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_algorithms, "f").includes(algo)) {
|
|
184
|
+
tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_algorithms, "f").push(algo);
|
|
185
|
+
tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_algorithms, "f").sort();
|
|
186
|
+
}
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
getPublicKeyForClient(handler) {
|
|
190
|
+
tslib_1.__classPrivateFieldSet(this, _PrivateKeyJwt_handler, handler, "f");
|
|
191
|
+
return this;
|
|
192
|
+
}
|
|
193
|
+
extractParams(req) {
|
|
194
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
195
|
+
const res = {
|
|
196
|
+
hasAuthMethod: false
|
|
197
|
+
};
|
|
198
|
+
if (req.payload &&
|
|
199
|
+
typeof req.payload === 'object' &&
|
|
200
|
+
'client_assertion_type' in req.payload &&
|
|
201
|
+
req.payload.client_assertion_type == 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer' &&
|
|
202
|
+
'client_assertion' in req.payload &&
|
|
203
|
+
typeof req.payload.client_assertion === 'string') {
|
|
204
|
+
const decoded = (0, jose_1.decodeJwt)(req.payload.client_assertion);
|
|
205
|
+
if (decoded.aud && typeof decoded.aud === 'string') {
|
|
206
|
+
res.clientId = decoded.aud;
|
|
207
|
+
const publicKey = yield tslib_1.__classPrivateFieldGet(this, _PrivateKeyJwt_handler, "f").call(this, decoded.aud, decoded, req.payload.client_assertion);
|
|
208
|
+
if (publicKey) {
|
|
209
|
+
const { payload } = yield (0, jose_1.jwtVerify)(req.payload.client_assertion, typeof publicKey === 'string' ? new TextEncoder().encode(publicKey) : publicKey, {
|
|
210
|
+
algorithms: this.algorithms
|
|
211
|
+
});
|
|
212
|
+
if (payload) {
|
|
213
|
+
res.clientSecret = req.payload.client_assertion;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return res;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.PrivateKeyJwt = PrivateKeyJwt;
|
|
223
|
+
_PrivateKeyJwt_algorithms = new WeakMap(), _PrivateKeyJwt_handler = new WeakMap();
|
|
224
|
+
PrivateKeyJwt.algo = PrivateKeyJwtAlgorithms;
|
|
225
|
+
//# sourceMappingURL=client-auth-methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-auth-methods.js","sourceRoot":"","sources":["../../src/utils/client-auth-methods.ts"],"names":[],"mappings":"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"}
|