@zudojs/auth 0.0.1 → 0.1.1
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 +22 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/authPassword/authPassword.core.d.ts +6 -2
- package/dist/authPassword/authPassword.core.d.ts.map +1 -1
- package/dist/authPassword/authPassword.core.js +69 -18
- package/dist/authPassword/authPassword.core.js.map +1 -1
- package/dist/authProvider/authProvider.core.d.ts +6 -1
- package/dist/authProvider/authProvider.core.d.ts.map +1 -1
- package/dist/authProvider/authProvider.core.js +29 -15
- package/dist/authProvider/authProvider.core.js.map +1 -1
- package/dist/authSession/authSession.core.d.ts.map +1 -1
- package/dist/authSession/authSession.core.js +21 -2
- package/dist/authSession/authSession.core.js.map +1 -1
- package/dist/authToken/authToken.core.d.ts.map +1 -1
- package/dist/authToken/authToken.core.js +4 -3
- package/dist/authToken/authToken.core.js.map +1 -1
- package/dist/authToken/authToken.revocation.d.ts +17 -0
- package/dist/authToken/authToken.revocation.d.ts.map +1 -0
- package/dist/authToken/authToken.revocation.js +36 -0
- package/dist/authToken/authToken.revocation.js.map +1 -0
- package/dist/authToken/authToken.signing.d.ts +2 -1
- package/dist/authToken/authToken.signing.d.ts.map +1 -1
- package/dist/authToken/authToken.signing.js +23 -19
- package/dist/authToken/authToken.signing.js.map +1 -1
- package/dist/authToken/index.d.ts +1 -0
- package/dist/authToken/index.d.ts.map +1 -1
- package/dist/authToken/index.js +1 -0
- package/dist/authToken/index.js.map +1 -1
- package/dist/authTypes/authToken.type.d.ts +19 -0
- package/dist/authTypes/authToken.type.d.ts.map +1 -1
- package/dist/authTypes/index.d.ts +1 -1
- package/dist/authTypes/index.d.ts.map +1 -1
- package/dist/authTypes/index.js.map +1 -1
- package/dist/authUtils/authUtils.helper.js +1 -1
- package/dist/authUtils/authUtils.helper.js.map +1 -1
- package/package.json +4 -4
|
@@ -11,19 +11,23 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @param password - Plain-text password
|
|
13
13
|
* @param saltLength - Salt length in bytes (default: 32)
|
|
14
|
-
* @returns Hashed password string in format "scrypt$salt$hash"
|
|
14
|
+
* @returns Hashed password string in format "scrypt$N$r$p$salt$hash"
|
|
15
15
|
*/
|
|
16
16
|
export declare function hashPassword(password: string, saltLength?: number): Promise<string>;
|
|
17
17
|
/**
|
|
18
18
|
* Verify a plain-text password against a hash.
|
|
19
19
|
*
|
|
20
|
+
* Accepts the current "scrypt$N$r$p$salt$hash" format as well as the
|
|
21
|
+
* legacy "scrypt<salt>$<hash>" format produced by versions ≤ 0.1.1.
|
|
22
|
+
*
|
|
20
23
|
* @param password - Plain-text password to verify
|
|
21
24
|
* @param hashedPassword - Previously hashed password
|
|
22
25
|
* @returns Whether the password matches
|
|
23
26
|
*/
|
|
24
27
|
export declare function verifyPassword(password: string, hashedPassword: string): Promise<boolean>;
|
|
25
28
|
/**
|
|
26
|
-
* Check if a password hash needs rehashing (
|
|
29
|
+
* Check if a password hash needs rehashing (legacy format, changed
|
|
30
|
+
* scrypt parameters, or changed salt length).
|
|
27
31
|
*
|
|
28
32
|
* @param hashedPassword - The stored hash
|
|
29
33
|
* @returns Whether the hash should be regenerated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authPassword.core.d.ts","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"authPassword.core.d.ts","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAE/D"}
|
|
@@ -20,29 +20,40 @@ const SCRYPT_P = 1;
|
|
|
20
20
|
*
|
|
21
21
|
* @param password - Plain-text password
|
|
22
22
|
* @param saltLength - Salt length in bytes (default: 32)
|
|
23
|
-
* @returns Hashed password string in format "scrypt$salt$hash"
|
|
23
|
+
* @returns Hashed password string in format "scrypt$N$r$p$salt$hash"
|
|
24
24
|
*/
|
|
25
25
|
export async function hashPassword(password, saltLength = SALT_LENGTH) {
|
|
26
26
|
const salt = randomBytes(saltLength).toString("hex");
|
|
27
|
-
const derivedKey = await deriveKey(password, salt
|
|
28
|
-
|
|
27
|
+
const derivedKey = await deriveKey(password, salt, {
|
|
28
|
+
N: SCRYPT_N,
|
|
29
|
+
r: SCRYPT_R,
|
|
30
|
+
p: SCRYPT_P,
|
|
31
|
+
});
|
|
32
|
+
return `scrypt$${SCRYPT_N}$${SCRYPT_R}$${SCRYPT_P}$${salt}$${derivedKey}`;
|
|
29
33
|
}
|
|
30
34
|
/**
|
|
31
35
|
* Verify a plain-text password against a hash.
|
|
32
36
|
*
|
|
37
|
+
* Accepts the current "scrypt$N$r$p$salt$hash" format as well as the
|
|
38
|
+
* legacy "scrypt<salt>$<hash>" format produced by versions ≤ 0.1.1.
|
|
39
|
+
*
|
|
33
40
|
* @param password - Plain-text password to verify
|
|
34
41
|
* @param hashedPassword - Previously hashed password
|
|
35
42
|
* @returns Whether the password matches
|
|
36
43
|
*/
|
|
37
44
|
export async function verifyPassword(password, hashedPassword) {
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
45
|
+
const parsed = parseHash(hashedPassword);
|
|
46
|
+
if (!parsed)
|
|
40
47
|
return false;
|
|
48
|
+
let derivedKey;
|
|
49
|
+
try {
|
|
50
|
+
derivedKey = await deriveKey(password, parsed.salt, parsed.params);
|
|
41
51
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
catch {
|
|
53
|
+
// scrypt rejects params it cannot satisfy (e.g. over maxmem)
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const storedBuffer = Buffer.from(parsed.hash, "hex");
|
|
46
57
|
const derivedBuffer = Buffer.from(derivedKey, "hex");
|
|
47
58
|
if (storedBuffer.length !== derivedBuffer.length) {
|
|
48
59
|
return false;
|
|
@@ -50,19 +61,21 @@ export async function verifyPassword(password, hashedPassword) {
|
|
|
50
61
|
return timingSafeEqual(storedBuffer, derivedBuffer);
|
|
51
62
|
}
|
|
52
63
|
/**
|
|
53
|
-
* Check if a password hash needs rehashing (
|
|
64
|
+
* Check if a password hash needs rehashing (legacy format, changed
|
|
65
|
+
* scrypt parameters, or changed salt length).
|
|
54
66
|
*
|
|
55
67
|
* @param hashedPassword - The stored hash
|
|
56
68
|
* @returns Whether the hash should be regenerated
|
|
57
69
|
*/
|
|
58
70
|
export function needsRehash(hashedPassword) {
|
|
59
|
-
const
|
|
60
|
-
if (
|
|
71
|
+
const parsed = parseHash(hashedPassword);
|
|
72
|
+
if (!parsed || parsed.legacy)
|
|
61
73
|
return true;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
const saltBytes = parsed.salt.length / 2;
|
|
75
|
+
return (saltBytes !== SALT_LENGTH ||
|
|
76
|
+
parsed.params.N !== SCRYPT_N ||
|
|
77
|
+
parsed.params.r !== SCRYPT_R ||
|
|
78
|
+
parsed.params.p !== SCRYPT_P);
|
|
66
79
|
}
|
|
67
80
|
/**
|
|
68
81
|
* Generate a random token string (for password reset, etc.).
|
|
@@ -73,9 +86,47 @@ export function needsRehash(hashedPassword) {
|
|
|
73
86
|
export function generateRandomToken(length = 32) {
|
|
74
87
|
return randomBytes(length).toString("hex");
|
|
75
88
|
}
|
|
76
|
-
function
|
|
89
|
+
function parseHash(hashedPassword) {
|
|
90
|
+
const parts = hashedPassword.split("$");
|
|
91
|
+
if (parts.length === 6 && parts[0] === "scrypt") {
|
|
92
|
+
const N = Number(parts[1]);
|
|
93
|
+
const r = Number(parts[2]);
|
|
94
|
+
const p = Number(parts[3]);
|
|
95
|
+
// Bounds also cap the memory/CPU a corrupted hash string can request.
|
|
96
|
+
if (!Number.isInteger(N) ||
|
|
97
|
+
!Number.isInteger(r) ||
|
|
98
|
+
!Number.isInteger(p) ||
|
|
99
|
+
N < 2 ||
|
|
100
|
+
(N & (N - 1)) !== 0 ||
|
|
101
|
+
N > 1 << 20 ||
|
|
102
|
+
r < 1 ||
|
|
103
|
+
r > 64 ||
|
|
104
|
+
p < 1 ||
|
|
105
|
+
p > 16) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
params: { N, r, p },
|
|
110
|
+
salt: parts[4],
|
|
111
|
+
hash: parts[5],
|
|
112
|
+
legacy: false,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Legacy format from ≤ 0.1.1: "scrypt<salt>$<hash>" (no separator
|
|
116
|
+
// between the prefix and the salt, params not stored).
|
|
117
|
+
if (parts.length === 2 && parts[0].startsWith("scrypt")) {
|
|
118
|
+
return {
|
|
119
|
+
params: { N: SCRYPT_N, r: SCRYPT_R, p: SCRYPT_P },
|
|
120
|
+
salt: parts[0].slice(6),
|
|
121
|
+
hash: parts[1],
|
|
122
|
+
legacy: true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
function deriveKey(password, salt, params) {
|
|
77
128
|
return new Promise((resolve, reject) => {
|
|
78
|
-
scrypt(password, salt, KEY_LENGTH, { N:
|
|
129
|
+
scrypt(password, salt, KEY_LENGTH, { N: params.N, r: params.r, p: params.p }, (err, derivedKey) => {
|
|
79
130
|
if (err)
|
|
80
131
|
reject(err);
|
|
81
132
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authPassword.core.js","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE,oCAAoC;AACpC,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,qCAAqC;AACrC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,mCAAmC;AACnC,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,QAAQ,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"authPassword.core.js","sourceRoot":"","sources":["../../src/authPassword/authPassword.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module authProvider/authProvider
|
|
5
5
|
*/
|
|
6
6
|
import type { AuthUser, UserCredentials, UserId } from "../authTypes/authUser.type.js";
|
|
7
|
-
import type { TokenPair, TokenConfig } from "../authTypes/authToken.type.js";
|
|
7
|
+
import type { TokenPair, TokenConfig, TokenRevocationStore } from "../authTypes/authToken.type.js";
|
|
8
8
|
import type { SessionStore, SessionId } from "../authTypes/authSession.type.js";
|
|
9
9
|
import type { GuardResult } from "../authTypes/authRbac.type.js";
|
|
10
10
|
import type { PermissionEngine } from "@zudojs/permissions";
|
|
@@ -28,6 +28,11 @@ export interface AuthServiceConfig {
|
|
|
28
28
|
readonly sessionTtlSeconds: number;
|
|
29
29
|
/** Optional permission engine */
|
|
30
30
|
readonly permissions?: PermissionEngine;
|
|
31
|
+
/**
|
|
32
|
+
* Optional revocation store. When provided, `refresh()` rotates refresh
|
|
33
|
+
* tokens: the used token's `jti` is revoked so it cannot be replayed.
|
|
34
|
+
*/
|
|
35
|
+
readonly revocationStore?: TokenRevocationStore;
|
|
31
36
|
}
|
|
32
37
|
/**
|
|
33
38
|
* Auth service interface.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authProvider.core.d.ts","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"authProvider.core.d.ts","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,MAAM,EACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EAEZ,SAAS,EACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC1E,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAC1C,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CACH,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA4IxE"}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* @module authProvider/authProvider
|
|
5
5
|
*/
|
|
6
6
|
import { hashPassword, verifyPassword, } from "../authPassword/authPassword.core.js";
|
|
7
|
-
import { createTokenPair, verifyAccessToken,
|
|
8
|
-
import { InvalidCredentialsError, TokenExpiredError, AccountDeactivatedError, } from "../authErrors/authError.base.js";
|
|
7
|
+
import { createTokenPair, verifyAccessToken, verifyRefreshToken, } from "../authToken/authToken.core.js";
|
|
8
|
+
import { InvalidCredentialsError, TokenExpiredError, TokenInvalidError, TokenRevokedError, AccountDeactivatedError, } from "../authErrors/authError.base.js";
|
|
9
9
|
/**
|
|
10
10
|
* Create an auth service.
|
|
11
11
|
*/
|
|
12
12
|
export function createAuthService(config) {
|
|
13
|
-
const { token: tokenConfig, sessionStore, findUser, verifyPassword: verifyPwd, sessionTtlSeconds, permissions, } = config;
|
|
13
|
+
const { token: tokenConfig, sessionStore, findUser, verifyPassword: verifyPwd, sessionTtlSeconds, permissions, revocationStore, } = config;
|
|
14
14
|
return {
|
|
15
15
|
/**
|
|
16
16
|
* Authenticate a user with credentials and return tokens + session.
|
|
@@ -44,19 +44,36 @@ export function createAuthService(config) {
|
|
|
44
44
|
verifyToken(token) {
|
|
45
45
|
const result = verifyAccessToken(token, tokenConfig);
|
|
46
46
|
if (!result.valid) {
|
|
47
|
-
|
|
47
|
+
if (result.error === "Token expired") {
|
|
48
|
+
throw new TokenExpiredError(result.error);
|
|
49
|
+
}
|
|
50
|
+
throw new TokenInvalidError(result.error ?? "Token verification failed");
|
|
48
51
|
}
|
|
49
52
|
return result.payload;
|
|
50
53
|
},
|
|
51
54
|
/**
|
|
52
55
|
* Refresh an access token using a refresh token.
|
|
56
|
+
*
|
|
57
|
+
* When a revocation store is configured, the used refresh token is
|
|
58
|
+
* revoked (rotation) so it cannot be replayed.
|
|
53
59
|
*/
|
|
54
60
|
async refresh(refreshToken) {
|
|
55
|
-
const result =
|
|
56
|
-
if (!result) {
|
|
57
|
-
|
|
61
|
+
const result = verifyRefreshToken(refreshToken, tokenConfig);
|
|
62
|
+
if (!result.valid || !result.payload) {
|
|
63
|
+
if (result.error === "Token expired") {
|
|
64
|
+
throw new TokenExpiredError("Refresh token has expired");
|
|
65
|
+
}
|
|
66
|
+
throw new TokenInvalidError("Refresh token is invalid");
|
|
58
67
|
}
|
|
59
|
-
|
|
68
|
+
const { sub, jti, exp, roles } = result.payload;
|
|
69
|
+
if (revocationStore && (await revocationStore.isRevoked(jti))) {
|
|
70
|
+
throw new TokenRevokedError("Refresh token has been revoked");
|
|
71
|
+
}
|
|
72
|
+
const tokens = createTokenPair(sub, tokenConfig, { roles });
|
|
73
|
+
if (revocationStore) {
|
|
74
|
+
await revocationStore.revoke(jti, exp);
|
|
75
|
+
}
|
|
76
|
+
return tokens;
|
|
60
77
|
},
|
|
61
78
|
/**
|
|
62
79
|
* Logout — destroy the session.
|
|
@@ -101,19 +118,16 @@ export function createAuthService(config) {
|
|
|
101
118
|
}
|
|
102
119
|
/**
|
|
103
120
|
* Simple fallback guard when no permissions engine is configured.
|
|
104
|
-
*
|
|
121
|
+
* Grants access to resource owners and to the "admin" role only —
|
|
122
|
+
* configure @zudojs/permissions for real role/permission matching.
|
|
105
123
|
*/
|
|
106
124
|
function simpleGuard(userRoles, permission, userId, resourceOwnerId) {
|
|
107
125
|
// Ownership check
|
|
108
126
|
if (resourceOwnerId && resourceOwnerId === userId) {
|
|
109
127
|
return { allowed: true, userRoles: [...userRoles] };
|
|
110
128
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
// Role-based — simplified check
|
|
114
|
-
if (role === "admin") {
|
|
115
|
-
return { allowed: true, userRoles: [...userRoles] };
|
|
116
|
-
}
|
|
129
|
+
if (userRoles.includes("admin")) {
|
|
130
|
+
return { allowed: true, userRoles: [...userRoles] };
|
|
117
131
|
}
|
|
118
132
|
return {
|
|
119
133
|
allowed: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authProvider.core.js","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"authProvider.core.js","sourceRoot":"","sources":["../../src/authProvider/authProvider.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authSession.core.d.ts","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,kCAAkC,CAAC;AAM1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"authSession.core.d.ts","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,kCAAkC,CAAC;AAM1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CA8EvD"}
|
|
@@ -15,8 +15,19 @@ const DEFAULT_TTL_SECONDS = 86400; // 24 hours
|
|
|
15
15
|
*/
|
|
16
16
|
export function createMemorySessionStore() {
|
|
17
17
|
const sessions = new Map();
|
|
18
|
+
const ttls = new Map();
|
|
19
|
+
function purgeExpired() {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
for (const [id, session] of sessions) {
|
|
22
|
+
if (now > session.expiresAt) {
|
|
23
|
+
sessions.delete(id);
|
|
24
|
+
ttls.delete(id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
18
28
|
return {
|
|
19
29
|
async create(options) {
|
|
30
|
+
purgeExpired();
|
|
20
31
|
const id = generateSessionId();
|
|
21
32
|
const now = new Date();
|
|
22
33
|
const ttlMs = (options.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;
|
|
@@ -32,6 +43,7 @@ export function createMemorySessionStore() {
|
|
|
32
43
|
metadata: options.metadata,
|
|
33
44
|
};
|
|
34
45
|
sessions.set(id, session);
|
|
46
|
+
ttls.set(id, ttlMs);
|
|
35
47
|
return session;
|
|
36
48
|
},
|
|
37
49
|
async get(sessionId) {
|
|
@@ -42,26 +54,33 @@ export function createMemorySessionStore() {
|
|
|
42
54
|
return null;
|
|
43
55
|
if (new Date() > session.expiresAt) {
|
|
44
56
|
sessions.delete(sessionId);
|
|
57
|
+
ttls.delete(sessionId);
|
|
45
58
|
return null;
|
|
46
59
|
}
|
|
47
60
|
return session;
|
|
48
61
|
},
|
|
49
62
|
async touch(sessionId) {
|
|
50
63
|
const session = sessions.get(sessionId);
|
|
51
|
-
if (session && session.active) {
|
|
64
|
+
if (session && session.active && new Date() <= session.expiresAt) {
|
|
65
|
+
const now = new Date();
|
|
66
|
+
const ttlMs = ttls.get(sessionId) ?? DEFAULT_TTL_SECONDS * 1000;
|
|
52
67
|
sessions.set(sessionId, {
|
|
53
68
|
...session,
|
|
54
|
-
lastActivityAt:
|
|
69
|
+
lastActivityAt: now,
|
|
70
|
+
// Sliding expiration: activity extends the session by its TTL
|
|
71
|
+
expiresAt: new Date(now.getTime() + ttlMs),
|
|
55
72
|
});
|
|
56
73
|
}
|
|
57
74
|
},
|
|
58
75
|
async destroy(sessionId) {
|
|
59
76
|
sessions.delete(sessionId);
|
|
77
|
+
ttls.delete(sessionId);
|
|
60
78
|
},
|
|
61
79
|
async destroyAllForUser(userId) {
|
|
62
80
|
for (const [id, session] of sessions) {
|
|
63
81
|
if (session.userId === userId) {
|
|
64
82
|
sessions.delete(id);
|
|
83
|
+
ttls.delete(id);
|
|
65
84
|
}
|
|
66
85
|
}
|
|
67
86
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authSession.core.js","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,WAAW;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"authSession.core.js","sourceRoot":"","sources":["../../src/authSession/authSession.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authToken.core.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"authToken.core.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAWxC;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,CAuCX;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,WAAW,GAClB,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/C,SAAS,GAAG,IAAI,CAOlB"}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* Pure Node.js implementation (no jsonwebtoken dependency).
|
|
7
7
|
* Uses HMAC SHA-256 for signing.
|
|
8
8
|
*/
|
|
9
|
-
import { TimeMs } from "@zudojs/constants";
|
|
10
9
|
import { signToken, verifyToken, generateTokenId, } from "./authToken.signing.js";
|
|
11
|
-
|
|
12
|
-
const
|
|
10
|
+
// TTLs are in seconds — they are added to Unix-second `iat`/`exp` claims.
|
|
11
|
+
const DEFAULT_ACCESS_TTL = 900; // 15 minutes
|
|
12
|
+
const DEFAULT_REFRESH_TTL = 604_800; // 7 days
|
|
13
13
|
/**
|
|
14
14
|
* Create a new token pair (access + refresh).
|
|
15
15
|
*/
|
|
@@ -33,6 +33,7 @@ export function createTokenPair(userId, config, options) {
|
|
|
33
33
|
exp: now + refreshTtl,
|
|
34
34
|
typ: "refresh",
|
|
35
35
|
jti: generateTokenId(),
|
|
36
|
+
roles: options?.roles,
|
|
36
37
|
...(config.issuer ? { iss: config.issuer } : {}),
|
|
37
38
|
...(config.audience ? { aud: config.audience } : {}),
|
|
38
39
|
}, config.refreshSecret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authToken.core.js","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"authToken.core.js","sourceRoot":"","sources":["../../src/authToken/authToken.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory token revocation store.
|
|
3
|
+
*
|
|
4
|
+
* @module authToken/authToken.revocation
|
|
5
|
+
*
|
|
6
|
+
* Good for development and single-process deployments. For production,
|
|
7
|
+
* implement TokenRevocationStore with Redis or a database so revocations
|
|
8
|
+
* are shared across instances.
|
|
9
|
+
*/
|
|
10
|
+
import type { TokenRevocationStore } from "../authTypes/authToken.type.js";
|
|
11
|
+
/**
|
|
12
|
+
* Create an in-memory token revocation store.
|
|
13
|
+
*
|
|
14
|
+
* Entries are purged lazily once their token would have expired anyway.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createMemoryTokenRevocationStore(): TokenRevocationStore;
|
|
17
|
+
//# sourceMappingURL=authToken.revocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authToken.revocation.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.revocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,gCAAgC,IAAI,oBAAoB,CAuBvE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory token revocation store.
|
|
3
|
+
*
|
|
4
|
+
* @module authToken/authToken.revocation
|
|
5
|
+
*
|
|
6
|
+
* Good for development and single-process deployments. For production,
|
|
7
|
+
* implement TokenRevocationStore with Redis or a database so revocations
|
|
8
|
+
* are shared across instances.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Create an in-memory token revocation store.
|
|
12
|
+
*
|
|
13
|
+
* Entries are purged lazily once their token would have expired anyway.
|
|
14
|
+
*/
|
|
15
|
+
export function createMemoryTokenRevocationStore() {
|
|
16
|
+
const revoked = new Map();
|
|
17
|
+
function purgeExpired() {
|
|
18
|
+
const now = Math.floor(Date.now() / 1000);
|
|
19
|
+
for (const [id, expiresAt] of revoked) {
|
|
20
|
+
if (expiresAt < now) {
|
|
21
|
+
revoked.delete(id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
async revoke(tokenId, expiresAt) {
|
|
27
|
+
purgeExpired();
|
|
28
|
+
revoked.set(tokenId, expiresAt);
|
|
29
|
+
},
|
|
30
|
+
async isRevoked(tokenId) {
|
|
31
|
+
purgeExpired();
|
|
32
|
+
return revoked.has(tokenId);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=authToken.revocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authToken.revocation.js","sourceRoot":"","sources":["../../src/authToken/authToken.revocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;GAIG;AACH,MAAM,UAAU,gCAAgC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE3C,SAAS,YAAY;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,SAAiB;YAC9C,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,OAAgB;YAC9B,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -11,7 +11,8 @@ import type { JwtToken, TokenId, TokenPayload, TokenConfig, TokenVerificationRes
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function signToken(payload: TokenPayload, secret: string): JwtToken;
|
|
13
13
|
/**
|
|
14
|
-
* Verify a JWT token's signature, expiration,
|
|
14
|
+
* Verify a JWT token's signature, algorithm, expiration, type,
|
|
15
|
+
* and (when configured) issuer and audience.
|
|
15
16
|
*/
|
|
16
17
|
export declare function verifyToken(token: JwtToken, secret: string, expectedType: "access" | "refresh", config: TokenConfig): TokenVerificationResult;
|
|
17
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authToken.signing.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAQzE;AAED
|
|
1
|
+
{"version":3,"file":"authToken.signing.d.ts","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAQzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,QAAQ,GAAG,SAAS,EAClC,MAAM,EAAE,WAAW,GAClB,uBAAuB,CA6DzB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
|
@@ -20,7 +20,8 @@ export function signToken(payload, secret) {
|
|
|
20
20
|
return `${signatureInput}.${signature}`;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Verify a JWT token's signature, expiration,
|
|
23
|
+
* Verify a JWT token's signature, algorithm, expiration, type,
|
|
24
|
+
* and (when configured) issuer and audience.
|
|
24
25
|
*/
|
|
25
26
|
export function verifyToken(token, secret, expectedType, config) {
|
|
26
27
|
const parts = token.split(".");
|
|
@@ -28,10 +29,20 @@ export function verifyToken(token, secret, expectedType, config) {
|
|
|
28
29
|
return { valid: false, error: "Invalid token format" };
|
|
29
30
|
}
|
|
30
31
|
const [headerB64, bodyB64, signature] = parts;
|
|
32
|
+
let header;
|
|
33
|
+
try {
|
|
34
|
+
header = JSON.parse(base64UrlDecode(headerB64));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { valid: false, error: "Invalid header" };
|
|
38
|
+
}
|
|
39
|
+
if (header.alg !== ALGORITHM) {
|
|
40
|
+
return { valid: false, error: "Unsupported algorithm" };
|
|
41
|
+
}
|
|
31
42
|
const signatureInput = `${headerB64}.${bodyB64}`;
|
|
32
43
|
const expectedSignature = hmacSha256(signatureInput, secret);
|
|
33
|
-
const sigBuffer = Buffer.from(signature ?? "", "
|
|
34
|
-
const expectedBuffer = Buffer.from(expectedSignature, "
|
|
44
|
+
const sigBuffer = Buffer.from(signature ?? "", "base64url");
|
|
45
|
+
const expectedBuffer = Buffer.from(expectedSignature, "base64url");
|
|
35
46
|
if (sigBuffer.length !== expectedBuffer.length ||
|
|
36
47
|
!timingSafeEqual(sigBuffer, expectedBuffer)) {
|
|
37
48
|
return { valid: false, error: "Invalid signature" };
|
|
@@ -44,6 +55,9 @@ export function verifyToken(token, secret, expectedType, config) {
|
|
|
44
55
|
return { valid: false, error: "Invalid payload" };
|
|
45
56
|
}
|
|
46
57
|
const now = Math.floor(Date.now() / 1000);
|
|
58
|
+
if (typeof payload.exp !== "number") {
|
|
59
|
+
return { valid: false, error: "Missing expiration" };
|
|
60
|
+
}
|
|
47
61
|
if (payload.exp < now) {
|
|
48
62
|
return { valid: false, error: "Token expired" };
|
|
49
63
|
}
|
|
@@ -53,6 +67,9 @@ export function verifyToken(token, secret, expectedType, config) {
|
|
|
53
67
|
if (config.issuer && payload.iss !== config.issuer) {
|
|
54
68
|
return { valid: false, error: "Invalid issuer" };
|
|
55
69
|
}
|
|
70
|
+
if (config.audience && payload.aud !== config.audience) {
|
|
71
|
+
return { valid: false, error: "Invalid audience" };
|
|
72
|
+
}
|
|
56
73
|
return { valid: true, payload };
|
|
57
74
|
}
|
|
58
75
|
/**
|
|
@@ -63,25 +80,12 @@ export function generateTokenId() {
|
|
|
63
80
|
}
|
|
64
81
|
// ─── Internal helpers ─────────────────────────────────────────────────────
|
|
65
82
|
function hmacSha256(data, secret) {
|
|
66
|
-
return createHmac("sha256", secret).update(data).digest("
|
|
83
|
+
return createHmac("sha256", secret).update(data).digest("base64url");
|
|
67
84
|
}
|
|
68
85
|
function base64UrlEncode(data) {
|
|
69
|
-
|
|
70
|
-
let result = "";
|
|
71
|
-
for (let i = 0; i < encoded.length; i++) {
|
|
72
|
-
const char = encoded[i];
|
|
73
|
-
if (char === "+")
|
|
74
|
-
result += "-";
|
|
75
|
-
else if (char === "/")
|
|
76
|
-
result += "_";
|
|
77
|
-
else if (char !== "=")
|
|
78
|
-
result += char;
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
86
|
+
return Buffer.from(data, "utf-8").toString("base64url");
|
|
81
87
|
}
|
|
82
88
|
function base64UrlDecode(data) {
|
|
83
|
-
|
|
84
|
-
const padLength = (4 - (padded.length % 4)) % 4;
|
|
85
|
-
return Buffer.from(padded + "=".repeat(padLength), "base64").toString("utf-8");
|
|
89
|
+
return Buffer.from(data, "base64url").toString("utf-8");
|
|
86
90
|
}
|
|
87
91
|
//# sourceMappingURL=authToken.signing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authToken.signing.js","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1C,8BAA8B;AAC9B,MAAM,SAAS,GAAG,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAqB,EAAE,MAAc;IAC7D,MAAM,MAAM,GAAG,eAAe,CAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAC/C,CAAC;IACF,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"authToken.signing.js","sourceRoot":"","sources":["../../src/authToken/authToken.signing.ts"],"names":[],"mappings":"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"}
|