@schemavaults/jwt 0.6.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/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt/aud.d.ts +1 -0
- package/dist/jwt/aud.js +3 -0
- package/dist/jwt/aud.js.map +1 -0
- package/dist/jwt/decode.d.ts +22 -0
- package/dist/jwt/decode.js +228 -0
- package/dist/jwt/decode.js.map +1 -0
- package/dist/jwt/encrypt_decrypt_alg.d.ts +3 -0
- package/dist/jwt/encrypt_decrypt_alg.js +4 -0
- package/dist/jwt/encrypt_decrypt_alg.js.map +1 -0
- package/dist/jwt/expiry.d.ts +1 -0
- package/dist/jwt/expiry.js +2 -0
- package/dist/jwt/expiry.js.map +1 -0
- package/dist/jwt/generate.d.ts +31 -0
- package/dist/jwt/generate.js +188 -0
- package/dist/jwt/generate.js.map +1 -0
- package/dist/jwt/get_audience_from_token.d.ts +1 -0
- package/dist/jwt/get_audience_from_token.js +17 -0
- package/dist/jwt/get_audience_from_token.js.map +1 -0
- package/dist/jwt/get_keyset_id_from_token.d.ts +2 -0
- package/dist/jwt/get_keyset_id_from_token.js +17 -0
- package/dist/jwt/get_keyset_id_from_token.js.map +1 -0
- package/dist/jwt/index.d.ts +9 -0
- package/dist/jwt/index.js +9 -0
- package/dist/jwt/index.js.map +1 -0
- package/dist/jwt/iss.d.ts +1 -0
- package/dist/jwt/iss.js +3 -0
- package/dist/jwt/iss.js.map +1 -0
- package/dist/jwt/jwt-factory.d.ts +34 -0
- package/dist/jwt/jwt-factory.js +147 -0
- package/dist/jwt/jwt-factory.js.map +1 -0
- package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.d.ts +11 -0
- package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.js +26 -0
- package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.js.map +1 -0
- package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.d.ts +14 -0
- package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.js +45 -0
- package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.js.map +1 -0
- package/dist/jwt/jwt_keys/I_JWT_Keys.d.ts +15 -0
- package/dist/jwt/jwt_keys/I_JWT_Keys.js +2 -0
- package/dist/jwt/jwt_keys/I_JWT_Keys.js.map +1 -0
- package/dist/jwt/jwt_keys/JWK.d.ts +2 -0
- package/dist/jwt/jwt_keys/JWK.js +2 -0
- package/dist/jwt/jwt_keys/JWK.js.map +1 -0
- package/dist/jwt/jwt_keys/JWKS.d.ts +4 -0
- package/dist/jwt/jwt_keys/JWKS.js +2 -0
- package/dist/jwt/jwt_keys/JWKS.js.map +1 -0
- package/dist/jwt/jwt_keys/JsonSerializedJwtKey.d.ts +43 -0
- package/dist/jwt/jwt_keys/JsonSerializedJwtKey.js +38 -0
- package/dist/jwt/jwt_keys/JsonSerializedJwtKey.js.map +1 -0
- package/dist/jwt/jwt_keys/SigningKeyPairFactory.d.ts +14 -0
- package/dist/jwt/jwt_keys/SigningKeyPairFactory.js +46 -0
- package/dist/jwt/jwt_keys/SigningKeyPairFactory.js.map +1 -0
- package/dist/jwt/jwt_keys/ValidJwtKeyTypes.d.ts +4 -0
- package/dist/jwt/jwt_keys/ValidJwtKeyTypes.js +7 -0
- package/dist/jwt/jwt_keys/ValidJwtKeyTypes.js.map +1 -0
- package/dist/jwt/jwt_keys/generate_new_jwt_keyset.d.ts +21 -0
- package/dist/jwt/jwt_keys/generate_new_jwt_keyset.js +110 -0
- package/dist/jwt/jwt_keys/generate_new_jwt_keyset.js.map +1 -0
- package/dist/jwt/jwt_keys/getAlgorithmForKey.d.ts +2 -0
- package/dist/jwt/jwt_keys/getAlgorithmForKey.js +14 -0
- package/dist/jwt/jwt_keys/getAlgorithmForKey.js.map +1 -0
- package/dist/jwt/jwt_keys/importAsymmetricJWK.d.ts +3 -0
- package/dist/jwt/jwt_keys/importAsymmetricJWK.js +15 -0
- package/dist/jwt/jwt_keys/importAsymmetricJWK.js.map +1 -0
- package/dist/jwt/jwt_keys/index.d.ts +13 -0
- package/dist/jwt/jwt_keys/index.js +12 -0
- package/dist/jwt/jwt_keys/index.js.map +1 -0
- package/dist/jwt/jwt_keys/jwt_keys.d.ts +33 -0
- package/dist/jwt/jwt_keys/jwt_keys.js +96 -0
- package/dist/jwt/jwt_keys/jwt_keys.js.map +1 -0
- package/dist/jwt/jwt_keys/pem-format.d.ts +17 -0
- package/dist/jwt/jwt_keys/pem-format.js +69 -0
- package/dist/jwt/jwt_keys/pem-format.js.map +1 -0
- package/dist/jwt/jwt_keys/raw_jwt_keys_store.d.ts +38 -0
- package/dist/jwt/jwt_keys/raw_jwt_keys_store.js +191 -0
- package/dist/jwt/jwt_keys/raw_jwt_keys_store.js.map +1 -0
- package/dist/jwt/jwt_keys/to_public_jwks.d.ts +6 -0
- package/dist/jwt/jwt_keys/to_public_jwks.js +39 -0
- package/dist/jwt/jwt_keys/to_public_jwks.js.map +1 -0
- package/dist/jwt/payload_data.d.ts +73 -0
- package/dist/jwt/payload_data.js +45 -0
- package/dist/jwt/payload_data.js.map +1 -0
- package/dist/jwt/sign.d.ts +23 -0
- package/dist/jwt/sign.js +68 -0
- package/dist/jwt/sign.js.map +1 -0
- package/dist/jwt/sign_verify_alg.d.ts +2 -0
- package/dist/jwt/sign_verify_alg.js +3 -0
- package/dist/jwt/sign_verify_alg.js.map +1 -0
- package/dist/jwt/verify_signature.d.ts +23 -0
- package/dist/jwt/verify_signature.js +86 -0
- package/dist/jwt/verify_signature.js.map +1 -0
- package/dist/utils/fromBase64UrlEncoded.d.ts +2 -0
- package/dist/utils/fromBase64UrlEncoded.js +5 -0
- package/dist/utils/fromBase64UrlEncoded.js.map +1 -0
- package/dist/utils/getDefaultDebugState.d.ts +2 -0
- package/dist/utils/getDefaultDebugState.js +7 -0
- package/dist/utils/getDefaultDebugState.js.map +1 -0
- package/dist/utils/isValidBase64UrlEncoding.d.ts +2 -0
- package/dist/utils/isValidBase64UrlEncoding.js +18 -0
- package/dist/utils/isValidBase64UrlEncoding.js.map +1 -0
- package/dist/utils/isValidUuid.d.ts +2 -0
- package/dist/utils/isValidUuid.js +4 -0
- package/dist/utils/isValidUuid.js.map +1 -0
- package/dist/utils/maybeStripQuotes.d.ts +8 -0
- package/dist/utils/maybeStripQuotes.js +20 -0
- package/dist/utils/maybeStripQuotes.js.map +1 -0
- package/dist/utils/toBase64UrlEncoded.d.ts +2 -0
- package/dist/utils/toBase64UrlEncoded.js +5 -0
- package/dist/utils/toBase64UrlEncoded.js.map +1 -0
- package/package.json +48 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const REFRESH_TOKEN_AUDIENCE: "schemavaults-auth";
|
package/dist/jwt/aud.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aud.js","sourceRoot":"","sources":["../../src/jwt/aud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC,MAAM,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type CryptoKey } from "jose";
|
|
2
|
+
import type { I_JWT_Keys } from "./jwt_keys";
|
|
3
|
+
import { type CustomJWTPayload } from "./payload_data";
|
|
4
|
+
import type { AuthTokenTypes } from "@schemavaults/auth-common";
|
|
5
|
+
import { type SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
|
|
6
|
+
interface BaseDecodeJWTOptions<T extends AuthTokenTypes> {
|
|
7
|
+
type: T;
|
|
8
|
+
jwt: string;
|
|
9
|
+
audience?: string;
|
|
10
|
+
env: SchemaVaultsAppEnvironment;
|
|
11
|
+
}
|
|
12
|
+
interface DecodeJWTWithAllKeysOptions<T extends AuthTokenTypes> extends BaseDecodeJWTOptions<T> {
|
|
13
|
+
jwt_keys: I_JWT_Keys;
|
|
14
|
+
}
|
|
15
|
+
interface DecodeJWTWithOnlyRequiredKeysOptions<T extends AuthTokenTypes> extends BaseDecodeJWTOptions<T> {
|
|
16
|
+
decryption_key: CryptoKey;
|
|
17
|
+
verification_key: CryptoKey;
|
|
18
|
+
keyset_id: string;
|
|
19
|
+
}
|
|
20
|
+
export type DecodeJWTOptions<T extends AuthTokenTypes> = DecodeJWTWithAllKeysOptions<T> | DecodeJWTWithOnlyRequiredKeysOptions<T>;
|
|
21
|
+
export declare function decodeJWT<T extends AuthTokenTypes>({ type, jwt, audience, ...opts }: DecodeJWTOptions<T>): Promise<CustomJWTPayload>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { jwtDecrypt, decodeProtectedHeader, } from "jose";
|
|
2
|
+
import { REFRESH_TOKEN_AUDIENCE } from "./aud";
|
|
3
|
+
import { issuer } from "./iss";
|
|
4
|
+
import { getExpiryDurationString } from "./expiry";
|
|
5
|
+
import { jwtPayloadSchema } from "./payload_data";
|
|
6
|
+
import { apiServerIdSchema, SCHEMAVAULTS_AUTH_APP_DEFINITION, schemaVaultsAppEnvironmentSchema, } from "@schemavaults/app-definitions";
|
|
7
|
+
import { verifyJWTSignature } from "./verify_signature";
|
|
8
|
+
import isValidUuid from "../utils/isValidUuid";
|
|
9
|
+
import encryptDecryptAlgorithm from "./encrypt_decrypt_alg";
|
|
10
|
+
export async function decodeJWT({ type, jwt, audience = type === "refresh"
|
|
11
|
+
? SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id
|
|
12
|
+
: undefined, ...opts }) {
|
|
13
|
+
const environment = opts.env;
|
|
14
|
+
if (!environment) {
|
|
15
|
+
throw new Error("Invalid app environment to decode JWT within");
|
|
16
|
+
}
|
|
17
|
+
const debug = environment === "development";
|
|
18
|
+
if (debug) {
|
|
19
|
+
console.log("[decodeJWT] Attempting to decode JWT: ", jwt);
|
|
20
|
+
}
|
|
21
|
+
if (!audience || typeof audience !== "string") {
|
|
22
|
+
throw new TypeError("Invalid audience; expected string");
|
|
23
|
+
}
|
|
24
|
+
let keyset_id;
|
|
25
|
+
try {
|
|
26
|
+
if ("keyset_id" in opts) {
|
|
27
|
+
keyset_id = opts.keyset_id;
|
|
28
|
+
}
|
|
29
|
+
else if ("jwt_keys" in opts) {
|
|
30
|
+
keyset_id = opts.jwt_keys.keyset_id;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error("Failed to retrieve keyset ID from input options");
|
|
34
|
+
}
|
|
35
|
+
if (!isValidUuid(keyset_id)) {
|
|
36
|
+
throw new Error("Invalid keyset ID; not a valid UUID!");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error("Failed to retrieve keyset ID:", error);
|
|
41
|
+
throw new Error("Failed to retrieve keyset ID");
|
|
42
|
+
}
|
|
43
|
+
if (typeof jwt !== "string") {
|
|
44
|
+
throw new Error("Invalid JWT; expected string");
|
|
45
|
+
}
|
|
46
|
+
if (type === "refresh" &&
|
|
47
|
+
audience !== SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id) {
|
|
48
|
+
if (debug) {
|
|
49
|
+
console.log("Invalid audience for refresh token: ", audience);
|
|
50
|
+
}
|
|
51
|
+
throw new Error(`Invalid audience for refresh token; only '${SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id}' is valid.`);
|
|
52
|
+
}
|
|
53
|
+
let aud;
|
|
54
|
+
if (type === "refresh") {
|
|
55
|
+
aud = REFRESH_TOKEN_AUDIENCE;
|
|
56
|
+
}
|
|
57
|
+
else if (type === "access") {
|
|
58
|
+
if (typeof audience !== "string") {
|
|
59
|
+
throw new Error("Missing audience for JWT to decode with");
|
|
60
|
+
}
|
|
61
|
+
aud = audience;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
throw new Error("Invalid auth token 'type' (should be 'access'/'refresh')");
|
|
65
|
+
}
|
|
66
|
+
const decodeTime = new Date();
|
|
67
|
+
const maxTokenAge = getExpiryDurationString(type);
|
|
68
|
+
if (debug) {
|
|
69
|
+
console.log(`[decodeJWT] Setting max token age to ${maxTokenAge}`);
|
|
70
|
+
}
|
|
71
|
+
let kid;
|
|
72
|
+
let alg;
|
|
73
|
+
let decoded_header_aud;
|
|
74
|
+
try {
|
|
75
|
+
const decoded_header = decodeProtectedHeader(jwt);
|
|
76
|
+
if (!decoded_header.kid || typeof decoded_header.kid !== "string") {
|
|
77
|
+
throw new Error("Missing 'kid' in JWT header");
|
|
78
|
+
}
|
|
79
|
+
kid = decoded_header.kid;
|
|
80
|
+
if (!decoded_header.alg || typeof decoded_header.alg !== "string") {
|
|
81
|
+
throw new Error("Missing 'alg' in JWT header");
|
|
82
|
+
}
|
|
83
|
+
alg = decoded_header.alg;
|
|
84
|
+
if (!decoded_header.keyset_id ||
|
|
85
|
+
typeof decoded_header.keyset_id !== "string") {
|
|
86
|
+
throw new Error("Missing 'keyset_id' in JWT header");
|
|
87
|
+
}
|
|
88
|
+
if (decoded_header.keyset_id !== keyset_id) {
|
|
89
|
+
throw new Error("Invalid keyset_id in JWT header; mismatch with input decryption key");
|
|
90
|
+
}
|
|
91
|
+
if (!decoded_header.aud ||
|
|
92
|
+
typeof decoded_header.aud !== "string" ||
|
|
93
|
+
!apiServerIdSchema.safeParse(decoded_header.aud).success) {
|
|
94
|
+
throw new Error("Invalid audience in JWT header");
|
|
95
|
+
}
|
|
96
|
+
if (type === "refresh" &&
|
|
97
|
+
decoded_header.aud !== SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id) {
|
|
98
|
+
throw new Error(`Invalid audience in JWT header; only '${SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id}' tokens are allowed here`);
|
|
99
|
+
}
|
|
100
|
+
if (decoded_header.aud !== audience) {
|
|
101
|
+
throw new Error(`Invalid audience in JWT header; only '${audience}' tokens are allowed here`);
|
|
102
|
+
}
|
|
103
|
+
decoded_header_aud = decoded_header.aud;
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
console.error("Error decoding JWT header: ", e);
|
|
107
|
+
throw new Error("Error decoding JWT header!");
|
|
108
|
+
}
|
|
109
|
+
if (kid !== `${keyset_id}-decryption`) {
|
|
110
|
+
throw new Error("Invalid kid in JWT header; mismatch with input decryption key");
|
|
111
|
+
}
|
|
112
|
+
if (alg !== encryptDecryptAlgorithm) {
|
|
113
|
+
throw new Error("Invalid algorithm header for JWT decryption");
|
|
114
|
+
}
|
|
115
|
+
let decryption_key;
|
|
116
|
+
try {
|
|
117
|
+
if ("jwt_keys" in opts) {
|
|
118
|
+
decryption_key = await opts.jwt_keys.decryption_key;
|
|
119
|
+
}
|
|
120
|
+
else if ("decryption_key" in opts) {
|
|
121
|
+
decryption_key = opts.decryption_key;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
throw new Error("Missing decryption key for JWT to decode with");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
console.error("Error loading decryption key from key store or inputs: ", e);
|
|
129
|
+
throw new Error("Error loading decryption key from key store or inputs!");
|
|
130
|
+
}
|
|
131
|
+
const decoded = await jwtDecrypt(jwt, decryption_key, {
|
|
132
|
+
audience: aud,
|
|
133
|
+
issuer,
|
|
134
|
+
maxTokenAge,
|
|
135
|
+
currentDate: decodeTime,
|
|
136
|
+
});
|
|
137
|
+
if (decoded.payload.aud !== decoded_header_aud) {
|
|
138
|
+
throw new Error("Mismatch in header 'aud' and 'aud' in JWT payload");
|
|
139
|
+
}
|
|
140
|
+
if (debug) {
|
|
141
|
+
console.log("[decodeJWT] Decoded JWT: ", decoded);
|
|
142
|
+
}
|
|
143
|
+
const iat = decoded.payload.iat;
|
|
144
|
+
if (typeof iat !== "number" || isNaN(iat)) {
|
|
145
|
+
throw new Error("Decoded JWT is missing iat property!");
|
|
146
|
+
}
|
|
147
|
+
const withoutJWTspecific = { ...decoded.payload };
|
|
148
|
+
delete withoutJWTspecific.iat;
|
|
149
|
+
delete withoutJWTspecific.exp;
|
|
150
|
+
if (!Array.isArray(withoutJWTspecific.orgs)) {
|
|
151
|
+
throw new Error("Expected JWT to have an 'orgs' property, representing organizations that user is a member of!");
|
|
152
|
+
}
|
|
153
|
+
const parsedPayload = await jwtPayloadSchema.safeParseAsync(withoutJWTspecific);
|
|
154
|
+
if (!parsedPayload.success) {
|
|
155
|
+
if (environment === "development") {
|
|
156
|
+
console.error("[decodeJWT] Error validating JWT payload with schema");
|
|
157
|
+
parsedPayload.error.issues.forEach((issue) => {
|
|
158
|
+
console.error("[decodeJWT] Validation Error: ", issue);
|
|
159
|
+
});
|
|
160
|
+
console.error(parsedPayload.error);
|
|
161
|
+
}
|
|
162
|
+
throw new Error(`Error parsing JWT payload: ${parsedPayload.error.errors
|
|
163
|
+
.map((e) => e.message)
|
|
164
|
+
.join(", ")}`);
|
|
165
|
+
}
|
|
166
|
+
const payload = parsedPayload.data;
|
|
167
|
+
if (!payload.env || typeof payload.env !== "string") {
|
|
168
|
+
throw new Error("Missing 'env' field in JWT payload!");
|
|
169
|
+
}
|
|
170
|
+
const parsed_app_env = await schemaVaultsAppEnvironmentSchema.safeParseAsync(payload.env);
|
|
171
|
+
if (!parsed_app_env.success) {
|
|
172
|
+
throw new Error("Invalid app environment within 'env' field of JWT payload!");
|
|
173
|
+
}
|
|
174
|
+
if (environment !== payload.env) {
|
|
175
|
+
console.log("Server app environment: ", environment);
|
|
176
|
+
console.log("JWT 'env' field: ", payload.env);
|
|
177
|
+
throw new Error("Payload 'env' field does not match server app environment!");
|
|
178
|
+
}
|
|
179
|
+
const signature = payload.sig;
|
|
180
|
+
if (!signature || typeof signature !== "string") {
|
|
181
|
+
throw new Error("JWT 'sig' field is missing or not a string!");
|
|
182
|
+
}
|
|
183
|
+
const sub = payload.sub;
|
|
184
|
+
const uid = payload.uid;
|
|
185
|
+
if (typeof uid !== "string" || typeof sub !== "string" || uid !== sub) {
|
|
186
|
+
throw new Error("Sub and UID must be strings and should be equal!");
|
|
187
|
+
}
|
|
188
|
+
let verification_key;
|
|
189
|
+
try {
|
|
190
|
+
if ("jwt_keys" in opts) {
|
|
191
|
+
verification_key = await opts.jwt_keys.verification_key;
|
|
192
|
+
}
|
|
193
|
+
else if ("verification_key" in opts) {
|
|
194
|
+
verification_key = opts.verification_key;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
throw new Error("Missing verification key for JWT to decode with");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
console.error("Error loading verification key from key store or inputs: ", e);
|
|
202
|
+
throw new Error("Error loading verification key from key store or inputs!");
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const isValidSig = await verifyJWTSignature({
|
|
206
|
+
jwt: signature,
|
|
207
|
+
verification_key,
|
|
208
|
+
keyset_id,
|
|
209
|
+
aud,
|
|
210
|
+
iat,
|
|
211
|
+
type,
|
|
212
|
+
sub,
|
|
213
|
+
uid,
|
|
214
|
+
env: environment,
|
|
215
|
+
});
|
|
216
|
+
if (!isValidSig) {
|
|
217
|
+
throw new Error("Invalid JWT signature!");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
if (debug) {
|
|
222
|
+
console.error("Failed to verify 'sig' field of JWT using public key: ", e);
|
|
223
|
+
}
|
|
224
|
+
throw new Error("Failed to verify 'sig' field of JWT using public key!");
|
|
225
|
+
}
|
|
226
|
+
return payload;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/jwt/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt_decrypt_alg.js","sourceRoot":"","sources":["../../src/jwt/encrypt_decrypt_alg.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,cAAwC,CAAC;AAC5D,eAAe,GAAG,CAAC;AAEnB,MAAM,CAAC,MAAM,GAAG,GAAG,SAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { refreshTokenExpiry, accessTokenExpiry, getExpiryTime, getExpiryDurationString, } from "@schemavaults/auth-common";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry.js","sourceRoot":"","sources":["../../src/jwt/expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type CryptoKey } from "jose";
|
|
2
|
+
import type { I_JWT_Keys } from "./jwt_keys";
|
|
3
|
+
import { type UserData, type AccessToken, type AuthTokenTypes, type RefreshToken, type OrganizationID } from "@schemavaults/auth-common";
|
|
4
|
+
import { type SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
|
|
5
|
+
interface BaseGenerateJWTOptions<T extends AuthTokenTypes> {
|
|
6
|
+
user: UserData;
|
|
7
|
+
type: T;
|
|
8
|
+
iat: number;
|
|
9
|
+
client_app_id: string;
|
|
10
|
+
audience: string;
|
|
11
|
+
env: SchemaVaultsAppEnvironment;
|
|
12
|
+
orgs: readonly OrganizationID[];
|
|
13
|
+
}
|
|
14
|
+
interface GenerateJWTWithAllKeysOptions<T extends AuthTokenTypes> extends BaseGenerateJWTOptions<T> {
|
|
15
|
+
jwt_keys: I_JWT_Keys;
|
|
16
|
+
}
|
|
17
|
+
interface GenerateJWTWithOnlyRequiredKeysOptions<T extends AuthTokenTypes> extends BaseGenerateJWTOptions<T> {
|
|
18
|
+
encryption_key: CryptoKey;
|
|
19
|
+
signing_key: CryptoKey;
|
|
20
|
+
keyset_id: string;
|
|
21
|
+
}
|
|
22
|
+
export type GenerateJWTOptions<T extends AuthTokenTypes> = GenerateJWTWithAllKeysOptions<T> | GenerateJWTWithOnlyRequiredKeysOptions<T>;
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* @param userData
|
|
26
|
+
* @param type Access or refresh token
|
|
27
|
+
* @param iat Current unix timestamp
|
|
28
|
+
* @returns A JWT (string)
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateJWT<T extends AuthTokenTypes>({ type, user, iat, client_app_id, audience, ...opts }: GenerateJWTOptions<T>, refresh_token_audience?: "schemavaults-auth"): Promise<T extends "access" ? AccessToken : RefreshToken>;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { EncryptJWT } from "jose";
|
|
2
|
+
import { alg, enc } from "./encrypt_decrypt_alg";
|
|
3
|
+
import { issuer } from "./iss";
|
|
4
|
+
import { REFRESH_TOKEN_AUDIENCE } from "./aud";
|
|
5
|
+
import { getExpiryDurationString, getExpiryTime } from "./expiry";
|
|
6
|
+
import { organizationIdSchema, } from "@schemavaults/auth-common";
|
|
7
|
+
import { signJWT } from "./sign";
|
|
8
|
+
import { apiServerIdSchema, SCHEMAVAULTS_AUTH_APP_DEFINITION, } from "@schemavaults/app-definitions";
|
|
9
|
+
import isValidUuid from "../utils/isValidUuid";
|
|
10
|
+
const organizationIdsSchema = organizationIdSchema.array().readonly();
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param userData
|
|
14
|
+
* @param type Access or refresh token
|
|
15
|
+
* @param iat Current unix timestamp
|
|
16
|
+
* @returns A JWT (string)
|
|
17
|
+
*/
|
|
18
|
+
export async function generateJWT({ type, user, iat, client_app_id, audience, ...opts }, refresh_token_audience = REFRESH_TOKEN_AUDIENCE) {
|
|
19
|
+
let keyset_id;
|
|
20
|
+
try {
|
|
21
|
+
if ("keyset_id" in opts) {
|
|
22
|
+
keyset_id = opts.keyset_id;
|
|
23
|
+
}
|
|
24
|
+
else if ("jwt_keys" in opts) {
|
|
25
|
+
keyset_id = opts.jwt_keys.keyset_id;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error("Failed to parse 'keyset_id' from options!");
|
|
29
|
+
}
|
|
30
|
+
if (!isValidUuid(keyset_id)) {
|
|
31
|
+
throw new Error("Invalid 'keyset_id' provided; not a valid uuid!");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
console.error("Error parsing 'keyset_id' from options: ", e);
|
|
36
|
+
throw new Error("Error parsing 'keyset_id' from options!");
|
|
37
|
+
}
|
|
38
|
+
const userData = user;
|
|
39
|
+
let aud;
|
|
40
|
+
if (type === "refresh") {
|
|
41
|
+
if (typeof audience !== "string" || audience !== refresh_token_audience) {
|
|
42
|
+
throw new Error(`Audience for a refresh token must be the auth server. Received "${audience}", but expected "${refresh_token_audience}".`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
aud = refresh_token_audience;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (type === "access") {
|
|
49
|
+
if (typeof audience !== "string") {
|
|
50
|
+
throw new TypeError("An audience must be supplied for access tokens");
|
|
51
|
+
}
|
|
52
|
+
if (!apiServerIdSchema.safeParse(audience).success) {
|
|
53
|
+
throw new TypeError("Invalid audience provided; not a valid API server ID!");
|
|
54
|
+
}
|
|
55
|
+
aud = audience;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new TypeError("Invalid token type; expected 'type' to be 'access' or 'refresh'");
|
|
59
|
+
}
|
|
60
|
+
if ("jwt_keys" in opts) {
|
|
61
|
+
const keyset_audience_id = opts.jwt_keys.audience_id;
|
|
62
|
+
if (typeof keyset_audience_id !== "string" ||
|
|
63
|
+
!apiServerIdSchema.safeParse(keyset_audience_id).success) {
|
|
64
|
+
throw new TypeError("Invalid audience ID for JWT keyset; not a valid API server ID!");
|
|
65
|
+
}
|
|
66
|
+
if (keyset_audience_id !== aud) {
|
|
67
|
+
throw new Error(`JWT keyset audience ID '${keyset_audience_id}' does not match requested token audience ID '${aud}'`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const email = user.email;
|
|
71
|
+
const uid = user.uid;
|
|
72
|
+
const env = opts.env;
|
|
73
|
+
const parsed_organization_ids = await organizationIdsSchema.safeParseAsync(opts.orgs);
|
|
74
|
+
if (!parsed_organization_ids.success) {
|
|
75
|
+
console.error("Received invalid list of organization IDs that user is a member of: ", parsed_organization_ids.error);
|
|
76
|
+
throw new Error("Received invalid list of organization IDs that user is a member of!");
|
|
77
|
+
}
|
|
78
|
+
const orgs = parsed_organization_ids.data;
|
|
79
|
+
if (type === "refresh" &&
|
|
80
|
+
audience !== SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id) {
|
|
81
|
+
throw new Error("Invalid audience for refresh token");
|
|
82
|
+
}
|
|
83
|
+
let signing_key;
|
|
84
|
+
try {
|
|
85
|
+
if ("jwt_keys" in opts) {
|
|
86
|
+
const signing_key_promise = opts.jwt_keys.signing_key;
|
|
87
|
+
if (!signing_key_promise) {
|
|
88
|
+
throw new Error("Failed to load signing key from key store!");
|
|
89
|
+
}
|
|
90
|
+
signing_key = await signing_key_promise;
|
|
91
|
+
}
|
|
92
|
+
else if ("signing_key" in opts) {
|
|
93
|
+
signing_key = opts.signing_key;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
throw new Error("Did not receive signing key from key store or input options!");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.error("Failed to load encryption key from key store or input options: ", e);
|
|
101
|
+
throw new Error("Failed to load encryption key from key store or input options!");
|
|
102
|
+
}
|
|
103
|
+
let sig;
|
|
104
|
+
try {
|
|
105
|
+
sig = await signJWT({
|
|
106
|
+
audience,
|
|
107
|
+
signing_key,
|
|
108
|
+
keyset_id,
|
|
109
|
+
iat,
|
|
110
|
+
uid,
|
|
111
|
+
email,
|
|
112
|
+
type,
|
|
113
|
+
env,
|
|
114
|
+
orgs,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
console.error("Failed to generate signature token for 'sig' field of JWT: ", e);
|
|
119
|
+
throw new Error("Failed to generate signature token for 'sig' field of JWT!");
|
|
120
|
+
}
|
|
121
|
+
let encryption_key;
|
|
122
|
+
try {
|
|
123
|
+
if ("jwt_keys" in opts) {
|
|
124
|
+
const encryption_key_promise = opts.jwt_keys.encryption_key;
|
|
125
|
+
if (!encryption_key_promise) {
|
|
126
|
+
throw new Error("Failed to load encryption key from key store!");
|
|
127
|
+
}
|
|
128
|
+
encryption_key = await encryption_key_promise;
|
|
129
|
+
}
|
|
130
|
+
else if ("encryption_key" in opts) {
|
|
131
|
+
encryption_key = opts.encryption_key;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
throw new Error("Did not receive encryption key from key store or input options!");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
console.error("Failed to load encryption key from key store or input options: ", e);
|
|
139
|
+
throw new Error("Failed to load encryption key from key store or input options!");
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const additionalClaims = {
|
|
143
|
+
uid: user.uid,
|
|
144
|
+
admin: user.admin ?? false,
|
|
145
|
+
email: user.email,
|
|
146
|
+
email_verified: user.email_verified ?? false,
|
|
147
|
+
aud: audience,
|
|
148
|
+
app: client_app_id,
|
|
149
|
+
disabled: user.disabled ?? false,
|
|
150
|
+
created_at: user.created_at,
|
|
151
|
+
env,
|
|
152
|
+
sig,
|
|
153
|
+
orgs: orgs,
|
|
154
|
+
};
|
|
155
|
+
const jwt = await new EncryptJWT(additionalClaims)
|
|
156
|
+
.setProtectedHeader({
|
|
157
|
+
alg,
|
|
158
|
+
enc,
|
|
159
|
+
keyset_id,
|
|
160
|
+
kid: `${keyset_id}-decryption`,
|
|
161
|
+
aud: audience,
|
|
162
|
+
})
|
|
163
|
+
.setIssuedAt(new Date(iat))
|
|
164
|
+
.setIssuer(issuer)
|
|
165
|
+
.setAudience(aud)
|
|
166
|
+
.setExpirationTime(getExpiryDurationString(type))
|
|
167
|
+
.setSubject(userData.uid)
|
|
168
|
+
.encrypt(encryption_key);
|
|
169
|
+
const expiryTime = getExpiryTime(type, iat);
|
|
170
|
+
if (env === "development") {
|
|
171
|
+
console.log(`[generateJWT] Generated ${type} JWT: `, jwt);
|
|
172
|
+
}
|
|
173
|
+
const tokenData = {
|
|
174
|
+
type,
|
|
175
|
+
uid: userData.uid,
|
|
176
|
+
iat,
|
|
177
|
+
exp: expiryTime,
|
|
178
|
+
token: jwt,
|
|
179
|
+
aud,
|
|
180
|
+
};
|
|
181
|
+
return tokenData;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error("Error generating JWT: ", error);
|
|
185
|
+
throw new Error("Error generating JWT!");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/jwt/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getAudienceFromToken(token: string): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { apiServerIdSchema } from "@schemavaults/app-definitions";
|
|
2
|
+
import { decodeProtectedHeader } from "jose";
|
|
3
|
+
export default function getAudienceFromToken(token) {
|
|
4
|
+
const headers = decodeProtectedHeader(token);
|
|
5
|
+
if ("aud" in headers) {
|
|
6
|
+
if (typeof headers.aud === "string" && headers.aud.length > 0) {
|
|
7
|
+
const aud = headers.aud;
|
|
8
|
+
if (!apiServerIdSchema.safeParse(aud).success) {
|
|
9
|
+
throw new Error("Invalid token; 'aud' claim must be a valid API server ID");
|
|
10
|
+
}
|
|
11
|
+
return aud;
|
|
12
|
+
}
|
|
13
|
+
throw new Error("Invalid token; 'aud' claim must be a string");
|
|
14
|
+
}
|
|
15
|
+
throw new Error("Invalid token; no 'aud' claim in header");
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get_audience_from_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_audience_from_token.js","sourceRoot":"","sources":["../../src/jwt/get_audience_from_token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,MAAM,CAAC;AAE7C,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAa;IACxD,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,CAAC;YAChC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import isValidUuid from "../utils/isValidUuid";
|
|
2
|
+
import { decodeProtectedHeader } from "jose";
|
|
3
|
+
export function getKeysetIdFromToken(token) {
|
|
4
|
+
const header = decodeProtectedHeader(token);
|
|
5
|
+
if (!header.kid || !header.keyset_id) {
|
|
6
|
+
throw new Error("Invalid token; missing 'kid' or 'keyset_id' in header!");
|
|
7
|
+
}
|
|
8
|
+
if (!isValidUuid(header.keyset_id)) {
|
|
9
|
+
throw new Error("Invalid token; 'keyset_id' is not a valid UUID!");
|
|
10
|
+
}
|
|
11
|
+
if (!header.kid.startsWith(header.keyset_id)) {
|
|
12
|
+
throw new Error("Invalid token; 'kid' does not start with 'keyset_id'!");
|
|
13
|
+
}
|
|
14
|
+
return header.keyset_id;
|
|
15
|
+
}
|
|
16
|
+
export default getKeysetIdFromToken;
|
|
17
|
+
//# sourceMappingURL=get_keyset_id_from_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_keyset_id_from_token.js","sourceRoot":"","sources":["../../src/jwt/get_keyset_id_from_token.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAA6B,MAAM,MAAM,CAAC;AAExE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,MAAM,GAA8B,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { decodeJWT } from "./decode";
|
|
2
|
+
export { getExpiryTime, getExpiryDurationString } from "./expiry";
|
|
3
|
+
export { JWT_Factory } from "./jwt-factory";
|
|
4
|
+
export type { CustomJWTPayload } from "./payload_data";
|
|
5
|
+
export { JWT_Keys, generateNewJwtKeySet, to_public_jwks, importAsymmetricJWK, jsonSerializedJwtKeySchema, PEMFormat, } from "./jwt_keys";
|
|
6
|
+
export type * from "./jwt_keys";
|
|
7
|
+
export { getKeysetIdFromToken } from "./get_keyset_id_from_token";
|
|
8
|
+
export { default as getAudienceFromToken } from "./get_audience_from_token";
|
|
9
|
+
export { refreshTokenExpiry, accessTokenExpiry } from "./expiry";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// export {generateJWT} from './generate';
|
|
2
|
+
export { decodeJWT } from "./decode";
|
|
3
|
+
export { getExpiryTime, getExpiryDurationString } from "./expiry";
|
|
4
|
+
export { JWT_Factory } from "./jwt-factory";
|
|
5
|
+
export { JWT_Keys, generateNewJwtKeySet, to_public_jwks, importAsymmetricJWK, jsonSerializedJwtKeySchema, PEMFormat, } from "./jwt_keys";
|
|
6
|
+
export { getKeysetIdFromToken } from "./get_keyset_id_from_token";
|
|
7
|
+
export { default as getAudienceFromToken } from "./get_audience_from_token";
|
|
8
|
+
export { refreshTokenExpiry, accessTokenExpiry } from "./expiry";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const issuer: "schemavaults-auth";
|
package/dist/jwt/iss.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss.js","sourceRoot":"","sources":["../../src/jwt/iss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,CAAC,MAAM,MAAM,GAAG,sBAAsB,CAAC"}
|