@venizia/ignis 0.2.0-1 → 0.2.0-3
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 +0 -1
- package/dist/base/applications/server.d.ts +1 -1
- package/dist/base/applications/server.d.ts.map +1 -1
- package/dist/base/applications/server.js +1 -1
- package/dist/base/applications/server.js.map +1 -1
- package/dist/base/controllers/grpc/abstract.d.ts +1 -1
- package/dist/base/controllers/grpc/abstract.d.ts.map +1 -1
- package/dist/base/controllers/grpc/abstract.js +12 -10
- package/dist/base/controllers/grpc/abstract.js.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts +11 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.js +13 -5
- package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -1
- package/dist/components/api-reference/common/keys.d.ts +0 -5
- package/dist/components/api-reference/common/keys.d.ts.map +1 -1
- package/dist/components/api-reference/common/keys.js +1 -7
- package/dist/components/api-reference/common/keys.js.map +1 -1
- package/dist/components/api-reference/common/types.d.ts +1 -2
- package/dist/components/api-reference/common/types.d.ts.map +1 -1
- package/dist/components/api-reference/component.d.ts +0 -4
- package/dist/components/api-reference/component.d.ts.map +1 -1
- package/dist/components/api-reference/component.js +11 -9
- package/dist/components/api-reference/component.js.map +1 -1
- package/dist/components/auth/authenticate/component.d.ts +10 -1
- package/dist/components/auth/authenticate/component.d.ts.map +1 -1
- package/dist/components/auth/authenticate/component.js +79 -25
- package/dist/components/auth/authenticate/component.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/index.d.ts +1 -0
- package/dist/components/auth/authenticate/controllers/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/index.js +1 -0
- package/dist/components/auth/authenticate/controllers/index.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts +10 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.js +50 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.js.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts +73 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.js +34 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.js.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts +3 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.js +19 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.js.map +1 -0
- package/dist/components/auth/authenticate/services/bearer/abstract.service.d.ts +25 -4
- package/dist/components/auth/authenticate/services/bearer/abstract.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/abstract.service.js +53 -14
- package/dist/components/auth/authenticate/services/bearer/abstract.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts +18 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js +40 -10
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js +4 -5
- package/dist/components/auth/authenticate/services/bearer/jwks/verifier.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts +2 -1
- package/dist/components/auth/authenticate/services/bearer/jws.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jws.service.js +7 -6
- package/dist/components/auth/authenticate/services/bearer/jws.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/index.d.ts +1 -0
- package/dist/components/auth/authenticate/services/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/index.js +1 -0
- package/dist/components/auth/authenticate/services/index.js.map +1 -1
- package/dist/components/auth/authenticate/services/service/index.d.ts +3 -0
- package/dist/components/auth/authenticate/services/service/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/index.js +19 -0
- package/dist/components/auth/authenticate/services/service/index.js.map +1 -0
- package/dist/components/auth/authenticate/services/service/signer.service.d.ts +46 -0
- package/dist/components/auth/authenticate/services/service/signer.service.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/signer.service.js +135 -0
- package/dist/components/auth/authenticate/services/service/signer.service.js.map +1 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.d.ts +40 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.js +153 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/index.d.ts +1 -0
- package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/index.js +1 -0
- package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/service.strategy.d.ts +19 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.js +73 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.js.map +1 -0
- package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
- package/dist/components/static-asset/controller/factory.js +5 -1
- package/dist/components/static-asset/controller/factory.js.map +1 -1
- package/dist/utilities/network.utility.d.ts +9 -0
- package/dist/utilities/network.utility.d.ts.map +1 -1
- package/dist/utilities/network.utility.js +2 -4
- package/dist/utilities/network.utility.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractBearerTokenService = void 0;
|
|
4
|
-
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
5
|
-
const core_1 = require("@venizia/ignis-helpers/core");
|
|
6
|
-
const common_1 = require("@venizia/ignis-helpers/common");
|
|
7
4
|
const ignis_helpers_1 = require("@venizia/ignis-helpers");
|
|
8
|
-
const
|
|
5
|
+
const common_1 = require("@venizia/ignis-helpers/common");
|
|
6
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
7
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
9
8
|
/** Abstract base for Bearer-token services (JWS, JWKS) with optional AES payload encryption. */
|
|
10
9
|
class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
11
10
|
constructor() {
|
|
@@ -13,6 +12,8 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
13
12
|
this.aes = null;
|
|
14
13
|
this.applicationSecret = null;
|
|
15
14
|
this.fieldCodecs = new Map();
|
|
15
|
+
/** Configured `iss` / `aud`. Authoritative over anything the payload carries. */
|
|
16
|
+
this.signOptions = null;
|
|
16
17
|
}
|
|
17
18
|
/** Standard JWT fields that are never encrypted. */
|
|
18
19
|
static { this.JWT_COMMON_FIELDS = new Set([
|
|
@@ -26,7 +27,8 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
26
27
|
]); }
|
|
27
28
|
/** Configures AES payload encryption and field codecs. Both aesAlgorithm and applicationSecret required to activate encryption. */
|
|
28
29
|
configurePayloadEncryption(opts) {
|
|
29
|
-
const { aesAlgorithm = 'aes-256-cbc', applicationSecret, fieldCodecs, cipher } = opts;
|
|
30
|
+
const { aesAlgorithm = 'aes-256-cbc', applicationSecret, fieldCodecs, cipher, sign } = opts;
|
|
31
|
+
this.signOptions = sign ?? null;
|
|
30
32
|
if (fieldCodecs) {
|
|
31
33
|
for (const codec of fieldCodecs) {
|
|
32
34
|
this.fieldCodecs.set(codec.key, codec);
|
|
@@ -43,20 +45,20 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
43
45
|
const authHeaderValue = request.header('Authorization');
|
|
44
46
|
if (!authHeaderValue) {
|
|
45
47
|
throw (0, core_1.getError)({
|
|
46
|
-
error:
|
|
48
|
+
error: ignis_kernel_1.AuthenticationErrors.HEADER_MISSING,
|
|
47
49
|
message: 'Unauthorized user! Missing authorization header',
|
|
48
50
|
});
|
|
49
51
|
}
|
|
50
|
-
if (!authHeaderValue.startsWith(
|
|
52
|
+
if (!authHeaderValue.startsWith(ignis_kernel_1.Authentication.TYPE_BEARER)) {
|
|
51
53
|
throw (0, core_1.getError)({
|
|
52
|
-
error:
|
|
54
|
+
error: ignis_kernel_1.AuthenticationErrors.SCHEME_INVALID,
|
|
53
55
|
message: 'Unauthorized user! Invalid schema of request token!',
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
const parts = authHeaderValue.split(' ');
|
|
57
59
|
if (parts.length !== 2) {
|
|
58
60
|
throw (0, core_1.getError)({
|
|
59
|
-
error:
|
|
61
|
+
error: ignis_kernel_1.AuthenticationErrors.HEADER_MALFORMED,
|
|
60
62
|
message: `Authorization header value is invalid format. It must follow the pattern: 'Bearer xx.yy.zz' where xx.yy.zz is a valid JWT token.`,
|
|
61
63
|
});
|
|
62
64
|
}
|
|
@@ -68,7 +70,7 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
68
70
|
if (!token) {
|
|
69
71
|
this.logger.for(this.verify.name).error('Missing token for validating request!');
|
|
70
72
|
throw (0, core_1.getError)({
|
|
71
|
-
error:
|
|
73
|
+
error: ignis_kernel_1.AuthenticationErrors.TOKEN_MISSING,
|
|
72
74
|
message: '[verify] Invalid request token!',
|
|
73
75
|
});
|
|
74
76
|
}
|
|
@@ -78,7 +80,7 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
78
80
|
catch (error) {
|
|
79
81
|
// No log here - `cause` carries the reason (JWTExpired, signature mismatch) to the error handler, which logs the request once. An expired token is the caller's problem, hence `warn`.
|
|
80
82
|
throw (0, core_1.getError)({
|
|
81
|
-
error:
|
|
83
|
+
error: ignis_kernel_1.AuthenticationErrors.TOKEN_INVALID,
|
|
82
84
|
message: '[verify] Invalid or expired token',
|
|
83
85
|
logLevel: 'warn',
|
|
84
86
|
cause: error,
|
|
@@ -86,14 +88,14 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
async generate(opts) {
|
|
89
|
-
const { payload, getTokenExpiresFn = this.getDefaultTokenExpiresFn() } = opts;
|
|
91
|
+
const { payload, claims, getTokenExpiresFn = this.getDefaultTokenExpiresFn() } = opts;
|
|
90
92
|
if (!payload) {
|
|
91
93
|
throw (0, core_1.getError)({
|
|
92
|
-
error:
|
|
94
|
+
error: ignis_kernel_1.AuthenticationErrors.TOKEN_PAYLOAD_INVALID,
|
|
93
95
|
message: '[generate] Invalid token payload!',
|
|
94
96
|
});
|
|
95
97
|
}
|
|
96
|
-
const signer = await this.getSigner({ payload, getTokenExpiresFn });
|
|
98
|
+
const signer = await this.getSigner({ payload, getTokenExpiresFn, claims });
|
|
97
99
|
try {
|
|
98
100
|
const rs = await signer.sign(await this.getSigningKey());
|
|
99
101
|
return rs;
|
|
@@ -150,6 +152,43 @@ class AbstractBearerTokenService extends ignis_kernel_1.BaseService {
|
|
|
150
152
|
}
|
|
151
153
|
return JSON.parse(value);
|
|
152
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Stamps the configured `iss` / `aud` onto a signer, plus any per-token claims the caller passed.
|
|
157
|
+
*
|
|
158
|
+
* The configured value is AUTHORITATIVE. `iss` and `aud` are in `JWT_COMMON_FIELDS`, so they ride
|
|
159
|
+
* through the AES envelope in the clear and an application-shaped payload can carry them - an
|
|
160
|
+
* issuer identity any payload could overwrite would not be an identity. A conflicting payload
|
|
161
|
+
* claim is overwritten and reported.
|
|
162
|
+
*
|
|
163
|
+
* Per-token audience is an explicit argument rather than a smuggled payload key, so the caller
|
|
164
|
+
* that legitimately needs one says so.
|
|
165
|
+
*/
|
|
166
|
+
applySignClaims(opts) {
|
|
167
|
+
const { signer, payload, claims } = opts;
|
|
168
|
+
const configured = this.signOptions;
|
|
169
|
+
const issuer = claims?.issuer ?? configured?.issuer;
|
|
170
|
+
const audience = claims?.audience ?? configured?.audience;
|
|
171
|
+
const logger = this.logger.for(this.applySignClaims.name);
|
|
172
|
+
if (issuer !== undefined) {
|
|
173
|
+
if (payload.iss !== undefined && payload.iss !== issuer) {
|
|
174
|
+
logger.warn('Payload iss overridden by the configured issuer | payload: %s | configured: %s', payload.iss, issuer);
|
|
175
|
+
}
|
|
176
|
+
signer.setIssuer(issuer);
|
|
177
|
+
}
|
|
178
|
+
if (audience !== undefined) {
|
|
179
|
+
if (payload.aud !== undefined) {
|
|
180
|
+
logger.warn('Payload aud overridden | payload: %j | applied: %j', payload.aud, audience);
|
|
181
|
+
}
|
|
182
|
+
signer.setAudience(audience);
|
|
183
|
+
}
|
|
184
|
+
if (claims?.subject !== undefined) {
|
|
185
|
+
signer.setSubject(claims.subject);
|
|
186
|
+
}
|
|
187
|
+
if (claims?.jwtId !== undefined) {
|
|
188
|
+
signer.setJti(claims.jwtId);
|
|
189
|
+
}
|
|
190
|
+
return signer;
|
|
191
|
+
}
|
|
153
192
|
decryptPayload(opts) {
|
|
154
193
|
const { payload, protectedHeader } = opts.result;
|
|
155
194
|
if (!this.aes || !this.applicationSecret) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.service.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/abstract.service.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"abstract.service.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/abstract.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TNullable, ValueOrPromise } from '@venizia/ignis-helpers/common';
|
|
2
|
+
import { IJWKSIssuerOptions, IJWTIssueClaims, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
2
3
|
import { Env } from 'hono';
|
|
3
4
|
import { CryptoKey, JWK, SignJWT } from 'jose';
|
|
4
|
-
import { IJWKSIssuerOptions, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
5
5
|
import { AbstractJWKSTokenService } from './abstract.service';
|
|
6
6
|
export declare class JWKSIssuerTokenService<E extends Env = Env> extends AbstractJWKSTokenService<E> {
|
|
7
7
|
protected options: IJWKSIssuerOptions;
|
|
@@ -18,6 +18,22 @@ export declare class JWKSIssuerTokenService<E extends Env = Env> extends Abstrac
|
|
|
18
18
|
priv: string;
|
|
19
19
|
pub: string;
|
|
20
20
|
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Refuses a JWK carrying private material where a PUBLIC key is expected.
|
|
23
|
+
*
|
|
24
|
+
* The `pem` format cannot reach this state - `importSPKI` rejects a private PEM outright. The
|
|
25
|
+
* `jwk` format can: `importJWK` imports whatever it is handed, and a private JWK marked
|
|
26
|
+
* `"ext": true` yields an EXTRACTABLE key, so `exportJWK` then carries `d` straight into the
|
|
27
|
+
* document `/certs` serves without authentication. Measured on jose 6.2.3: with `ext: true` the
|
|
28
|
+
* round trip returns `d`; without it, export throws. So the only thing standing between a
|
|
29
|
+
* mis-pasted key and a published signing key was an optional flag on attacker-irrelevant input.
|
|
30
|
+
*
|
|
31
|
+
* Named members, not a blanket scan: `d` covers EC/OKP and RSA's private exponent, and the CRT
|
|
32
|
+
* members are the rest of an RSA private key.
|
|
33
|
+
*/
|
|
34
|
+
protected assertPublicJWK(opts: {
|
|
35
|
+
jwk: JWK;
|
|
36
|
+
}): void;
|
|
21
37
|
protected parseKeyMaterial(opts: {
|
|
22
38
|
raw: {
|
|
23
39
|
priv: string;
|
|
@@ -33,6 +49,7 @@ export declare class JWKSIssuerTokenService<E extends Env = Env> extends Abstrac
|
|
|
33
49
|
getSigner(opts: {
|
|
34
50
|
payload: IJWTTokenPayload;
|
|
35
51
|
getTokenExpiresFn: TGetTokenExpiresFn;
|
|
52
|
+
claims?: IJWTIssueClaims;
|
|
36
53
|
}): Promise<SignJWT>;
|
|
37
54
|
protected getSigningKey(): ValueOrPromise<Uint8Array | CryptoKey>;
|
|
38
55
|
protected getDefaultTokenExpiresFn(): TGetTokenExpiresFn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issuer.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/issuer.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"issuer.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/issuer.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAEL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAIhB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,SAAS,EAKT,GAAG,EAEH,OAAO,EACR,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,qBAAa,sBAAsB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,wBAAwB,CAAC,CAAC,CAAC;IAOxF,SAAS,CAAC,OAAO,EAAE,kBAAkB;IANvC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,CAAQ;IAC/D,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,CAAQ;IAC9D,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,IAAI,CAAQ;gBAIlC,OAAO,EAAE,kBAAkB;cAad,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cAkCpC,iBAAiB,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAA;KAAE;;;;IA0B5E;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI;cAcnC,gBAAgB,CAAC,IAAI,EAAE;QACrC,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACnC,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;KAClC;;;;cAsDwB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM5D,SAAS,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,gBAAgB,CAAC;QAC1B,iBAAiB,EAAE,kBAAkB,CAAC;QACtC,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B;cAiBkB,aAAa,IAAI,cAAc,CAAC,UAAU,GAAG,SAAS,CAAC;cAQvD,wBAAwB,IAAI,kBAAkB;IAIjE,OAAO,IAAI;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE;IAWpB,YAAY,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;CAI/C"}
|
|
@@ -14,12 +14,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var JWKSIssuerTokenService_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.JWKSIssuerTokenService = void 0;
|
|
17
|
-
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
|
-
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
17
|
const common_1 = require("@venizia/ignis-helpers/common");
|
|
18
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
20
20
|
const jose_1 = require("jose");
|
|
21
21
|
const promises_1 = require("node:fs/promises");
|
|
22
|
-
const ignis_kernel_2 = require("@venizia/ignis-kernel");
|
|
23
22
|
const abstract_service_1 = require("./abstract.service");
|
|
24
23
|
let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenService extends abstract_service_1.AbstractJWKSTokenService {
|
|
25
24
|
constructor(options) {
|
|
@@ -33,6 +32,7 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
33
32
|
applicationSecret: this.options.applicationSecret,
|
|
34
33
|
fieldCodecs: this.options.fieldCodecs,
|
|
35
34
|
cipher: this.options.cipher,
|
|
35
|
+
sign: this.options.sign,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
async initialize() {
|
|
@@ -42,6 +42,10 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
42
42
|
this.privateKey = built.priv;
|
|
43
43
|
this.publicKey = built.pub;
|
|
44
44
|
const publicJWK = await (0, jose_1.exportJWK)(this.publicKey);
|
|
45
|
+
// Belt and braces. `assertPublicJWK` already refused a private JWK on the way IN, but this is
|
|
46
|
+
// the exact object an unauthenticated `/certs` serves - the last place to notice a signing key
|
|
47
|
+
// about to be published, whatever route the material took to get here.
|
|
48
|
+
this.assertPublicJWK({ jwk: publicJWK });
|
|
45
49
|
publicJWK.kid = this.options.kid;
|
|
46
50
|
publicJWK.alg = algorithm;
|
|
47
51
|
publicJWK.use = 'sig';
|
|
@@ -54,14 +58,14 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
54
58
|
async resolveKeyContent(opts) {
|
|
55
59
|
const { keys } = opts;
|
|
56
60
|
switch (keys.driver) {
|
|
57
|
-
case
|
|
61
|
+
case ignis_kernel_1.JWKSKeyDrivers.FILE: {
|
|
58
62
|
const [priv, pub] = await Promise.all([
|
|
59
63
|
(0, promises_1.readFile)(keys.private, 'utf-8'),
|
|
60
64
|
(0, promises_1.readFile)(keys.public, 'utf-8'),
|
|
61
65
|
]);
|
|
62
66
|
return { priv, pub };
|
|
63
67
|
}
|
|
64
|
-
case
|
|
68
|
+
case ignis_kernel_1.JWKSKeyDrivers.TEXT: {
|
|
65
69
|
return {
|
|
66
70
|
priv: keys.private,
|
|
67
71
|
pub: keys.public,
|
|
@@ -75,6 +79,30 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Refuses a JWK carrying private material where a PUBLIC key is expected.
|
|
84
|
+
*
|
|
85
|
+
* The `pem` format cannot reach this state - `importSPKI` rejects a private PEM outright. The
|
|
86
|
+
* `jwk` format can: `importJWK` imports whatever it is handed, and a private JWK marked
|
|
87
|
+
* `"ext": true` yields an EXTRACTABLE key, so `exportJWK` then carries `d` straight into the
|
|
88
|
+
* document `/certs` serves without authentication. Measured on jose 6.2.3: with `ext: true` the
|
|
89
|
+
* round trip returns `d`; without it, export throws. So the only thing standing between a
|
|
90
|
+
* mis-pasted key and a published signing key was an optional flag on attacker-irrelevant input.
|
|
91
|
+
*
|
|
92
|
+
* Named members, not a blanket scan: `d` covers EC/OKP and RSA's private exponent, and the CRT
|
|
93
|
+
* members are the rest of an RSA private key.
|
|
94
|
+
*/
|
|
95
|
+
assertPublicJWK(opts) {
|
|
96
|
+
const PRIVATE_MEMBERS = ['d', 'p', 'q', 'dp', 'dq', 'qi', 'k'];
|
|
97
|
+
const present = PRIVATE_MEMBERS.filter(member => opts.jwk[member] !== undefined);
|
|
98
|
+
if (present.length === 0) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
throw (0, core_1.getError)({
|
|
102
|
+
statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
|
|
103
|
+
message: `[JWKSIssuerTokenService] The public key material carries PRIVATE members (${present.join(', ')}) | this key would be published at the JWKS endpoint | pass the public half in keys.public`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
78
106
|
async parseKeyMaterial(opts) {
|
|
79
107
|
const { raw, algorithm, keys } = opts;
|
|
80
108
|
if (!raw.priv) {
|
|
@@ -90,17 +118,18 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
90
118
|
});
|
|
91
119
|
}
|
|
92
120
|
switch (keys.format) {
|
|
93
|
-
case
|
|
121
|
+
case ignis_kernel_1.JWKSKeyFormats.PEM: {
|
|
94
122
|
const priv = await (0, jose_1.importPKCS8)(raw.priv, algorithm);
|
|
95
123
|
const pub = await (0, jose_1.importSPKI)(raw.pub, algorithm);
|
|
96
124
|
return { priv, pub };
|
|
97
125
|
}
|
|
98
|
-
case
|
|
126
|
+
case ignis_kernel_1.JWKSKeyFormats.JWK: {
|
|
99
127
|
try {
|
|
100
128
|
const parsed = {
|
|
101
129
|
priv: JSON.parse(raw.priv),
|
|
102
130
|
pub: JSON.parse(raw.pub),
|
|
103
131
|
};
|
|
132
|
+
this.assertPublicJWK({ jwk: parsed.pub });
|
|
104
133
|
const priv = await (0, jose_1.importJWK)(parsed.priv, algorithm);
|
|
105
134
|
const pub = await (0, jose_1.importJWK)(parsed.pub, algorithm);
|
|
106
135
|
return { priv, pub };
|
|
@@ -125,7 +154,7 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
125
154
|
}
|
|
126
155
|
async doVerify(token) {
|
|
127
156
|
await this.ensureInitialized();
|
|
128
|
-
const result = await (0, jose_1.jwtVerify)(token, this.publicKey);
|
|
157
|
+
const result = await (0, jose_1.jwtVerify)(token, this.publicKey, this.options.verify);
|
|
129
158
|
return this.decryptPayload({ result });
|
|
130
159
|
}
|
|
131
160
|
async getSigner(opts) {
|
|
@@ -133,11 +162,12 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
133
162
|
const now = Math.floor(Date.now() / 1000);
|
|
134
163
|
const expiresIn = await opts.getTokenExpiresFn();
|
|
135
164
|
const encryptedPayload = this.encryptPayload(opts.payload);
|
|
136
|
-
|
|
165
|
+
const signer = new jose_1.SignJWT({ ...encryptedPayload })
|
|
137
166
|
.setProtectedHeader({ alg: this.options.algorithm, kid: this.options.kid })
|
|
138
167
|
.setIssuedAt()
|
|
139
168
|
.setExpirationTime(now + expiresIn)
|
|
140
169
|
.setNotBefore(now);
|
|
170
|
+
return this.applySignClaims({ signer, payload: encryptedPayload, claims: opts.claims });
|
|
141
171
|
}
|
|
142
172
|
getSigningKey() {
|
|
143
173
|
if (!this.privateKey) {
|
|
@@ -164,7 +194,7 @@ let JWKSIssuerTokenService = JWKSIssuerTokenService_1 = class JWKSIssuerTokenSer
|
|
|
164
194
|
};
|
|
165
195
|
exports.JWKSIssuerTokenService = JWKSIssuerTokenService;
|
|
166
196
|
exports.JWKSIssuerTokenService = JWKSIssuerTokenService = JWKSIssuerTokenService_1 = __decorate([
|
|
167
|
-
__param(0, (0, ignis_kernel_1.inject)({ key:
|
|
197
|
+
__param(0, (0, ignis_kernel_1.inject)({ key: ignis_kernel_1.AuthenticateBindingKeys.JWKS_OPTIONS })),
|
|
168
198
|
__metadata("design:paramtypes", [Object])
|
|
169
199
|
], JWKSIssuerTokenService);
|
|
170
200
|
//# sourceMappingURL=issuer.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issuer.service.js","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/issuer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"issuer.service.js","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/issuer.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { IJWKSVerifierOptions, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
1
2
|
import { Env } from 'hono';
|
|
2
3
|
import { createRemoteJWKSet, SignJWT } from 'jose';
|
|
3
|
-
import { IJWKSVerifierOptions, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
4
4
|
import { AbstractJWKSTokenService } from './abstract.service';
|
|
5
5
|
export declare class JWKSVerifierTokenService<E extends Env = Env> extends AbstractJWKSTokenService<E> {
|
|
6
6
|
protected options: IJWKSVerifierOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/verifier.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifier.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/verifier.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAEhB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAa,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,qBAAa,wBAAwB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,wBAAwB,CAAC,CAAC,CAAC;IAK1F,SAAS,CAAC,OAAO,EAAE,oBAAoB;IAJzC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG,IAAI,CAAQ;gBAIhE,OAAO,EAAE,oBAAoB;cAWhB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cAc3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU5D,SAAS,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE,gBAAgB,CAAC;QAC1B,iBAAiB,EAAE,kBAAkB,CAAC;KACvC,GAAG,OAAO,CAAC,OAAO,CAAC;cAOD,aAAa,IAAI,KAAK;cAOtB,wBAAwB,IAAI,KAAK;CAMrD"}
|
|
@@ -14,11 +14,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var JWKSVerifierTokenService_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.JWKSVerifierTokenService = void 0;
|
|
17
|
-
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
|
-
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
17
|
const common_1 = require("@venizia/ignis-helpers/common");
|
|
18
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
20
20
|
const jose_1 = require("jose");
|
|
21
|
-
const ignis_kernel_2 = require("@venizia/ignis-kernel");
|
|
22
21
|
const abstract_service_1 = require("./abstract.service");
|
|
23
22
|
let JWKSVerifierTokenService = JWKSVerifierTokenService_1 = class JWKSVerifierTokenService extends abstract_service_1.AbstractJWKSTokenService {
|
|
24
23
|
constructor(options) {
|
|
@@ -45,7 +44,7 @@ let JWKSVerifierTokenService = JWKSVerifierTokenService_1 = class JWKSVerifierTo
|
|
|
45
44
|
}
|
|
46
45
|
async doVerify(token) {
|
|
47
46
|
await this.ensureInitialized();
|
|
48
|
-
const result = await (0, jose_1.jwtVerify)(token, this.jwksVerifier);
|
|
47
|
+
const result = await (0, jose_1.jwtVerify)(token, this.jwksVerifier, this.options.verify);
|
|
49
48
|
return this.decryptPayload({ result });
|
|
50
49
|
}
|
|
51
50
|
async getSigner(_opts) {
|
|
@@ -69,7 +68,7 @@ let JWKSVerifierTokenService = JWKSVerifierTokenService_1 = class JWKSVerifierTo
|
|
|
69
68
|
};
|
|
70
69
|
exports.JWKSVerifierTokenService = JWKSVerifierTokenService;
|
|
71
70
|
exports.JWKSVerifierTokenService = JWKSVerifierTokenService = JWKSVerifierTokenService_1 = __decorate([
|
|
72
|
-
__param(0, (0, ignis_kernel_1.inject)({ key:
|
|
71
|
+
__param(0, (0, ignis_kernel_1.inject)({ key: ignis_kernel_1.AuthenticateBindingKeys.JWKS_OPTIONS })),
|
|
73
72
|
__metadata("design:paramtypes", [Object])
|
|
74
73
|
], JWKSVerifierTokenService);
|
|
75
74
|
//# sourceMappingURL=verifier.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.service.js","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/verifier.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"verifier.service.js","sourceRoot":"","sources":["../../../../../../../src/components/auth/authenticate/services/bearer/jwks/verifier.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAqD;AACrD,sDAAuD;AACvD,wDAM+B;AAE/B,+BAA8D;AAC9D,yDAA8D;AAE9D,IAAa,wBAAwB,gCAArC,MAAa,wBAA8C,SAAQ,2CAA2B;IAG5F,YAEE,OAAuC;QAEvC,KAAK,CAAC,EAAE,KAAK,EAAE,0BAAwB,CAAC,IAAI,EAAE,CAAC,CAAC;QAFtC,YAAO,GAAP,OAAO,CAAsB;QAJ/B,iBAAY,GAAiD,IAAI,CAAC;QAO1E,IAAI,CAAC,0BAA0B,CAAC;YAC9B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjD,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IAEkB,KAAK,CAAC,UAAU;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAA,yBAAkB,EAAC,OAAO,EAAE;YAC9C,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU;YAClD,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM;SACpD,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC,MAAM;aACR,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;aACzB,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAEkB,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC7C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAC5B,KAAK,EACL,IAAI,CAAC,YAAa,EAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAEQ,KAAK,CAAC,SAAS,CAAC,KAGxB;QACC,MAAM,IAAA,eAAQ,EAAC;YACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;YACrD,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;IACL,CAAC;IAEkB,aAAa;QAC9B,MAAM,IAAA,eAAQ,EAAC;YACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;YACrD,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;IACL,CAAC;IAEkB,wBAAwB;QACzC,MAAM,IAAA,eAAQ,EAAC;YACb,UAAU,EAAE,aAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB;YACrD,OAAO,EAAE,8DAA8D;SACxE,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA/DY,4DAAwB;mCAAxB,wBAAwB;IAIhC,WAAA,IAAA,qBAAM,EAAC,EAAE,GAAG,EAAE,sCAAuB,CAAC,YAAY,EAAE,CAAC,CAAA;;GAJ7C,wBAAwB,CA+DpC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ValueOrPromise } from '@venizia/ignis-helpers/common';
|
|
2
|
+
import { IJWSTokenServiceOptions, IJWTIssueClaims, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
2
3
|
import { Env } from 'hono';
|
|
3
4
|
import { SignJWT } from 'jose';
|
|
4
|
-
import { IJWSTokenServiceOptions, IJWTTokenPayload, TGetTokenExpiresFn } from '@venizia/ignis-kernel';
|
|
5
5
|
import { AbstractBearerTokenService } from './abstract.service';
|
|
6
6
|
/** Symmetric JWT (JWS) token service with optional AES-encrypted payloads. */
|
|
7
7
|
export declare class JWSTokenService<E extends Env = Env> extends AbstractBearerTokenService<E> {
|
|
@@ -12,6 +12,7 @@ export declare class JWSTokenService<E extends Env = Env> extends AbstractBearer
|
|
|
12
12
|
getSigner(opts: {
|
|
13
13
|
payload: IJWTTokenPayload;
|
|
14
14
|
getTokenExpiresFn: TGetTokenExpiresFn;
|
|
15
|
+
claims?: IJWTIssueClaims;
|
|
15
16
|
}): Promise<SignJWT>;
|
|
16
17
|
protected getSigningKey(): ValueOrPromise<Uint8Array>;
|
|
17
18
|
protected getDefaultTokenExpiresFn(): TGetTokenExpiresFn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jws.service.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/jws.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jws.service.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/jws.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAEL,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAEhB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAa,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEhE,8EAA8E;AAC9E,qBAAa,eAAe,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,0BAA0B,CAAC,CAAC,CAAC;IAKnF,SAAS,CAAC,OAAO,EAAE,uBAAuB;IAJ5C,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;gBAIpB,OAAO,EAAE,uBAAuB;cA8BnB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS5D,SAAS,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,gBAAgB,CAAC;QAC1B,iBAAiB,EAAE,kBAAkB,CAAC;QACtC,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B;cAekB,aAAa,IAAI,cAAc,CAAC,UAAU,CAAC;cAQ3C,wBAAwB,IAAI,kBAAkB;CAGlE"}
|
|
@@ -14,11 +14,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var JWSTokenService_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.JWSTokenService = void 0;
|
|
17
|
-
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
|
-
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
17
|
const common_1 = require("@venizia/ignis-helpers/common");
|
|
18
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
19
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
20
20
|
const jose_1 = require("jose");
|
|
21
|
-
const ignis_kernel_2 = require("@venizia/ignis-kernel");
|
|
22
21
|
const abstract_service_1 = require("./abstract.service");
|
|
23
22
|
/** Symmetric JWT (JWS) token service with optional AES-encrypted payloads. */
|
|
24
23
|
let JWSTokenService = JWSTokenService_1 = class JWSTokenService extends abstract_service_1.AbstractBearerTokenService {
|
|
@@ -43,22 +42,24 @@ let JWSTokenService = JWSTokenService_1 = class JWSTokenService extends abstract
|
|
|
43
42
|
applicationSecret,
|
|
44
43
|
fieldCodecs: options.fieldCodecs,
|
|
45
44
|
cipher: options.cipher,
|
|
45
|
+
sign: options.sign,
|
|
46
46
|
});
|
|
47
47
|
this.jwtSecret = new TextEncoder().encode(this.options.jwtSecret);
|
|
48
48
|
}
|
|
49
49
|
async doVerify(token) {
|
|
50
|
-
const decodedToken = await (0, jose_1.jwtVerify)(token, this.jwtSecret,
|
|
50
|
+
const decodedToken = await (0, jose_1.jwtVerify)(token, this.jwtSecret, this.options.verify);
|
|
51
51
|
return this.decryptPayload({ result: decodedToken });
|
|
52
52
|
}
|
|
53
53
|
async getSigner(opts) {
|
|
54
54
|
const now = Math.floor(Date.now() / 1000);
|
|
55
55
|
const expiresIn = await opts.getTokenExpiresFn();
|
|
56
56
|
const encryptedPayload = this.encryptPayload(opts.payload);
|
|
57
|
-
|
|
57
|
+
const signer = new jose_1.SignJWT(Object.assign({}, encryptedPayload))
|
|
58
58
|
.setProtectedHeader({ alg: this.options.headerAlgorithm ?? 'HS256' })
|
|
59
59
|
.setIssuedAt()
|
|
60
60
|
.setExpirationTime(now + expiresIn)
|
|
61
61
|
.setNotBefore(now);
|
|
62
|
+
return this.applySignClaims({ signer, payload: encryptedPayload, claims: opts.claims });
|
|
62
63
|
}
|
|
63
64
|
getSigningKey() {
|
|
64
65
|
if (!this.jwtSecret) {
|
|
@@ -72,7 +73,7 @@ let JWSTokenService = JWSTokenService_1 = class JWSTokenService extends abstract
|
|
|
72
73
|
};
|
|
73
74
|
exports.JWSTokenService = JWSTokenService;
|
|
74
75
|
exports.JWSTokenService = JWSTokenService = JWSTokenService_1 = __decorate([
|
|
75
|
-
__param(0, (0, ignis_kernel_1.inject)({ key:
|
|
76
|
+
__param(0, (0, ignis_kernel_1.inject)({ key: ignis_kernel_1.AuthenticateBindingKeys.JWT_OPTIONS })),
|
|
76
77
|
__metadata("design:paramtypes", [Object])
|
|
77
78
|
], JWSTokenService);
|
|
78
79
|
//# sourceMappingURL=jws.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jws.service.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/jws.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"jws.service.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/bearer/jws.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./basic"), exports);
|
|
18
18
|
__exportStar(require("./bearer"), exports);
|
|
19
|
+
__exportStar(require("./service"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,4CAA0B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/service/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./signer.service"), exports);
|
|
18
|
+
__exportStar(require("./verifier.service"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/services/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,qDAAmC"}
|