@kurdel/auth 0.1.0-beta.4 → 0.1.0-beta.6
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 +28 -24
- package/lib/domain/auth-context.d.ts +16 -1
- package/lib/domain/auth-event-sink-provider.d.ts +10 -0
- package/lib/domain/auth-event.d.ts +34 -3
- package/lib/domain/auth-event.js +8 -1
- package/lib/domain/auth-event.js.map +1 -1
- package/lib/domain/auth-strategy-provider.d.ts +17 -0
- package/lib/domain/auth-strategy.d.ts +17 -7
- package/lib/domain/authorization-policy-composition.d.ts +20 -3
- package/lib/domain/authorization-policy-composition.js +24 -3
- package/lib/domain/authorization-policy-composition.js.map +1 -1
- package/lib/domain/authorization-policy-provider.d.ts +17 -0
- package/lib/domain/authorization-policy.d.ts +39 -3
- package/lib/domain/authorization-policy.js +8 -2
- package/lib/domain/authorization-policy.js.map +1 -1
- package/lib/domain/permission.d.ts +12 -2
- package/lib/domain/permission.js +16 -3
- package/lib/domain/permission.js.map +1 -1
- package/lib/infra/in-memory/in-memory-api-key-repository.d.ts +11 -1
- package/lib/infra/in-memory/in-memory-api-key-repository.js +11 -1
- package/lib/infra/in-memory/in-memory-api-key-repository.js.map +1 -1
- package/lib/infra/in-memory/in-memory-auth-user-repository.d.ts +11 -1
- package/lib/infra/in-memory/in-memory-auth-user-repository.js +11 -1
- package/lib/infra/in-memory/in-memory-auth-user-repository.js.map +1 -1
- package/lib/infra/in-memory/in-memory-jwt-repository.d.ts +5 -1
- package/lib/infra/in-memory/in-memory-jwt-repository.js +5 -1
- package/lib/infra/in-memory/in-memory-jwt-repository.js.map +1 -1
- package/lib/password/password-authentication-service.d.ts +29 -0
- package/lib/password/password-authentication-service.js +31 -1
- package/lib/password/password-authentication-service.js.map +1 -1
- package/lib/password/password-hasher.d.ts +18 -0
- package/lib/password/scrypt-password-hasher.d.ts +46 -1
- package/lib/password/scrypt-password-hasher.js +33 -1
- package/lib/password/scrypt-password-hasher.js.map +1 -1
- package/lib/repositories/api-key/api-key-repository.d.ts +22 -12
- package/lib/repositories/api-key/api-key-usage-recorder.d.ts +12 -1
- package/lib/repositories/jwt/jwt-repository.d.ts +7 -1
- package/lib/repositories/jwt/jwt-session-repository.d.ts +27 -3
- package/lib/repositories/password/password-credential-repository.d.ts +25 -1
- package/lib/repositories/user/auth-user-repository.d.ts +16 -4
- package/lib/runtime/auth-module.d.ts +32 -28
- package/lib/runtime/auth-module.js +26 -12
- package/lib/runtime/auth-module.js.map +1 -1
- package/lib/runtime/auth-strategy-registry.d.ts +24 -7
- package/lib/runtime/auth-strategy-registry.js +24 -7
- package/lib/runtime/auth-strategy-registry.js.map +1 -1
- package/lib/runtime/authorization-policy-registry.d.ts +35 -1
- package/lib/runtime/authorization-policy-registry.js +35 -1
- package/lib/runtime/authorization-policy-registry.js.map +1 -1
- package/lib/runtime/create-auth-middleware.d.ts +32 -0
- package/lib/runtime/create-auth-middleware.js +41 -2
- package/lib/runtime/create-auth-middleware.js.map +1 -1
- package/lib/strategies/api-key/api-key-strategy-provider.d.ts +18 -0
- package/lib/strategies/api-key/api-key-strategy-provider.js +30 -0
- package/lib/strategies/api-key/api-key-strategy-provider.js.map +1 -0
- package/lib/strategies/api-key/api-key-strategy.d.ts +39 -1
- package/lib/strategies/api-key/api-key-strategy.js +34 -1
- package/lib/strategies/api-key/api-key-strategy.js.map +1 -1
- package/lib/strategies/api-key/index.d.ts +1 -0
- package/lib/strategies/api-key/index.js +1 -0
- package/lib/strategies/api-key/index.js.map +1 -1
- package/lib/strategies/jwt/index.d.ts +1 -0
- package/lib/strategies/jwt/index.js +1 -0
- package/lib/strategies/jwt/index.js.map +1 -1
- package/lib/strategies/jwt/jwt-service.d.ts +61 -10
- package/lib/strategies/jwt/jwt-service.js +38 -9
- package/lib/strategies/jwt/jwt-service.js.map +1 -1
- package/lib/strategies/jwt/jwt-strategy-provider.d.ts +18 -0
- package/lib/strategies/jwt/jwt-strategy-provider.js +27 -0
- package/lib/strategies/jwt/jwt-strategy-provider.js.map +1 -0
- package/lib/strategies/jwt/jwt-strategy.d.ts +43 -4
- package/lib/strategies/jwt/jwt-strategy.js +26 -2
- package/lib/strategies/jwt/jwt-strategy.js.map +1 -1
- package/package.json +4 -4
|
@@ -2,15 +2,33 @@ import crypto from 'node:crypto';
|
|
|
2
2
|
/**
|
|
3
3
|
* ## JwtService
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Signs and verifies JSON Web Tokens using the HS256 algorithm.
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* - create signed JWT tokens
|
|
9
|
+
* - verify token integrity and registered claims
|
|
10
|
+
* - decode JWT payloads without verification when explicitly requested
|
|
11
|
+
*
|
|
12
|
+
* Guarantees:
|
|
13
|
+
* - every generated token is signed with the configured secret
|
|
14
|
+
* - verification validates the signature before returning claims
|
|
15
|
+
* - configured issuer, audience, and lifetime constraints are enforced
|
|
16
|
+
*
|
|
17
|
+
* Non-responsibilities:
|
|
18
|
+
* - user authentication
|
|
19
|
+
* - authorization
|
|
20
|
+
* - session persistence
|
|
21
|
+
* - key rotation
|
|
7
22
|
*/
|
|
8
23
|
export class JwtService {
|
|
9
24
|
constructor(opts) {
|
|
10
25
|
this.opts = opts;
|
|
11
26
|
}
|
|
12
27
|
/**
|
|
13
|
-
*
|
|
28
|
+
* Creates and signs a JWT.
|
|
29
|
+
*
|
|
30
|
+
* Standard claims (`iat`, `exp`, `iss`, `aud`) are populated
|
|
31
|
+
* automatically from the configured options.
|
|
14
32
|
*/
|
|
15
33
|
sign(payload) {
|
|
16
34
|
const header = { alg: 'HS256', typ: 'JWT' };
|
|
@@ -29,9 +47,11 @@ export class JwtService {
|
|
|
29
47
|
return `${encodedHeader}.${encodedPayload}.${signature}`;
|
|
30
48
|
}
|
|
31
49
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
50
|
+
* Decodes a JWT payload without verifying its signature.
|
|
51
|
+
*
|
|
52
|
+
* The returned payload must be treated as untrusted until
|
|
53
|
+
* {@link verify} succeeds.
|
|
54
|
+
*/
|
|
35
55
|
decode(token) {
|
|
36
56
|
const parts = token.split('.');
|
|
37
57
|
if (parts.length !== 3)
|
|
@@ -44,8 +64,18 @@ export class JwtService {
|
|
|
44
64
|
}
|
|
45
65
|
}
|
|
46
66
|
/**
|
|
47
|
-
* Verifies
|
|
48
|
-
*
|
|
67
|
+
* Verifies a JWT and returns its decoded payload.
|
|
68
|
+
*
|
|
69
|
+
* Validation includes:
|
|
70
|
+
* - signature
|
|
71
|
+
* - expiration (`exp`)
|
|
72
|
+
* - not-before (`nbf`)
|
|
73
|
+
* - issuer (`iss`) when configured
|
|
74
|
+
* - audience (`aud`) when configured
|
|
75
|
+
*
|
|
76
|
+
* @throws Error
|
|
77
|
+
* If the token is malformed, has an invalid signature,
|
|
78
|
+
* or violates any configured validation constraint.
|
|
49
79
|
*/
|
|
50
80
|
verify(token) {
|
|
51
81
|
const parts = token.split('.');
|
|
@@ -73,7 +103,6 @@ export class JwtService {
|
|
|
73
103
|
}
|
|
74
104
|
return payload;
|
|
75
105
|
}
|
|
76
|
-
// ─────────────────────────────────────────────
|
|
77
106
|
b64(str) {
|
|
78
107
|
return Buffer.from(str).toString('base64url');
|
|
79
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-service.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-service.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt-service.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AuthStrategyProvider } from '../../domain/auth-strategy-provider.js';
|
|
2
|
+
import type { JwtSessionRepository } from '../../repositories/jwt/jwt-session-repository.js';
|
|
3
|
+
import { type JwtStrategyOptions } from './jwt-strategy.js';
|
|
4
|
+
/** Declarative options for the built-in JWT strategy provider. */
|
|
5
|
+
export type JwtStrategyProviderOptions = Omit<JwtStrategyOptions, 'sessions'> & {
|
|
6
|
+
/**
|
|
7
|
+
* Enables server-side session validation or supplies a custom repository.
|
|
8
|
+
* Set to `true` to resolve the registered repository from the container.
|
|
9
|
+
*/
|
|
10
|
+
sessions?: boolean | JwtSessionRepository;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Creates a DI-backed JWT authentication strategy provider.
|
|
14
|
+
*
|
|
15
|
+
* The application only declares transport and session behavior. Framework
|
|
16
|
+
* services and the current-user repository are resolved from the container.
|
|
17
|
+
*/
|
|
18
|
+
export declare function jwtStrategy(options?: JwtStrategyProviderOptions): AuthStrategyProvider;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AUTH_TOKENS } from '../../tokens.js';
|
|
2
|
+
import { JwtStrategy } from './jwt-strategy.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a DI-backed JWT authentication strategy provider.
|
|
5
|
+
*
|
|
6
|
+
* The application only declares transport and session behavior. Framework
|
|
7
|
+
* services and the current-user repository are resolved from the container.
|
|
8
|
+
*/
|
|
9
|
+
export function jwtStrategy(options = {}) {
|
|
10
|
+
return {
|
|
11
|
+
name: 'jwt',
|
|
12
|
+
useFactory(container) {
|
|
13
|
+
const { sessions, ...strategyOptions } = options;
|
|
14
|
+
return new JwtStrategy(container.get(AUTH_TOKENS.JwtService), container.get(AUTH_TOKENS.UserRepository), {
|
|
15
|
+
...strategyOptions,
|
|
16
|
+
...(sessions
|
|
17
|
+
? {
|
|
18
|
+
sessions: sessions === true
|
|
19
|
+
? container.get(AUTH_TOKENS.JwtSessionRepository)
|
|
20
|
+
: sessions,
|
|
21
|
+
}
|
|
22
|
+
: {}),
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=jwt-strategy-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-strategy-provider.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAWzE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,UAAsC,EAAE;IAExC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,UAAU,CAAC,SAAoB;YAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;YACjD,OAAO,IAAI,WAAW,CACpB,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EACrC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,EACzC;gBACE,GAAG,eAAe;gBAClB,GAAG,CAAC,QAAQ;oBACV,CAAC,CAAC;wBACE,QAAQ,EAAE,QAAQ,KAAK,IAAI;4BACzB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,oBAAoB,CAAC;4BACjD,CAAC,CAAC,QAAQ;qBACb;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,19 +5,51 @@ import type { JwtService } from '../../strategies/index.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* ## JwtStrategyOptions
|
|
7
7
|
*
|
|
8
|
-
* Configures
|
|
8
|
+
* Configures JWT authentication.
|
|
9
9
|
*/
|
|
10
10
|
export interface JwtStrategyOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Request header containing the JWT.
|
|
13
|
+
*
|
|
14
|
+
* @default "authorization"
|
|
15
|
+
*/
|
|
11
16
|
header?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Authentication scheme expected in the header.
|
|
19
|
+
*
|
|
20
|
+
* @default "Bearer"
|
|
21
|
+
*/
|
|
12
22
|
prefix?: string;
|
|
13
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Optional repository for server-side session validation.
|
|
25
|
+
*
|
|
26
|
+
* When configured, every JWT must reference an active session
|
|
27
|
+
* through its `jti` claim.
|
|
28
|
+
*/
|
|
14
29
|
sessions?: JwtSessionRepository;
|
|
15
30
|
}
|
|
16
31
|
/**
|
|
17
32
|
* ## JwtStrategy
|
|
18
33
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
34
|
+
* Authenticates requests using JSON Web Tokens.
|
|
35
|
+
*
|
|
36
|
+
* Responsibilities:
|
|
37
|
+
* - extract a JWT from the configured request header
|
|
38
|
+
* - verify the token signature and claims
|
|
39
|
+
* - optionally validate the referenced server-side session
|
|
40
|
+
* - resolve the current authenticated user
|
|
41
|
+
*
|
|
42
|
+
* Guarantees:
|
|
43
|
+
* - invalid tokens never authenticate
|
|
44
|
+
* - revoked or expired sessions never authenticate
|
|
45
|
+
* - inactive or missing users never authenticate
|
|
46
|
+
* - verified JWT claims are exposed through the authentication result
|
|
47
|
+
*
|
|
48
|
+
* Non-responsibilities:
|
|
49
|
+
* - JWT creation
|
|
50
|
+
* - session persistence
|
|
51
|
+
* - authorization policy evaluation
|
|
52
|
+
* - user management
|
|
21
53
|
*/
|
|
22
54
|
export declare class JwtStrategy implements AuthStrategy {
|
|
23
55
|
private readonly service;
|
|
@@ -26,5 +58,12 @@ export declare class JwtStrategy implements AuthStrategy {
|
|
|
26
58
|
private readonly prefix;
|
|
27
59
|
private readonly sessions?;
|
|
28
60
|
constructor(service: JwtService, users: AuthUserRepository, opts?: JwtStrategyOptions);
|
|
61
|
+
/**
|
|
62
|
+
* Authenticates a request using the configured JWT header.
|
|
63
|
+
*
|
|
64
|
+
* Returns `null` when the token is missing, malformed, invalid,
|
|
65
|
+
* references a revoked or expired session, or its associated
|
|
66
|
+
* user cannot be authenticated.
|
|
67
|
+
*/
|
|
29
68
|
authenticate(req: HttpRequest): Promise<AuthenticationResult | null>;
|
|
30
69
|
}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ## JwtStrategy
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Authenticates requests using JSON Web Tokens.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* - extract a JWT from the configured request header
|
|
8
|
+
* - verify the token signature and claims
|
|
9
|
+
* - optionally validate the referenced server-side session
|
|
10
|
+
* - resolve the current authenticated user
|
|
11
|
+
*
|
|
12
|
+
* Guarantees:
|
|
13
|
+
* - invalid tokens never authenticate
|
|
14
|
+
* - revoked or expired sessions never authenticate
|
|
15
|
+
* - inactive or missing users never authenticate
|
|
16
|
+
* - verified JWT claims are exposed through the authentication result
|
|
17
|
+
*
|
|
18
|
+
* Non-responsibilities:
|
|
19
|
+
* - JWT creation
|
|
20
|
+
* - session persistence
|
|
21
|
+
* - authorization policy evaluation
|
|
22
|
+
* - user management
|
|
6
23
|
*/
|
|
7
24
|
export class JwtStrategy {
|
|
8
25
|
constructor(service, users, opts = {}) {
|
|
@@ -12,6 +29,13 @@ export class JwtStrategy {
|
|
|
12
29
|
this.prefix = (opts.prefix ?? 'Bearer').toLowerCase();
|
|
13
30
|
this.sessions = opts.sessions;
|
|
14
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Authenticates a request using the configured JWT header.
|
|
34
|
+
*
|
|
35
|
+
* Returns `null` when the token is missing, malformed, invalid,
|
|
36
|
+
* references a revoked or expired session, or its associated
|
|
37
|
+
* user cannot be authenticated.
|
|
38
|
+
*/
|
|
15
39
|
async authenticate(req) {
|
|
16
40
|
const raw = req.headers?.[this.header];
|
|
17
41
|
if (!raw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-strategy.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jwt-strategy.js","sourceRoot":"","sources":["../../../src/strategies/jwt/jwt-strategy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kurdel/auth",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.6",
|
|
4
4
|
"description": "Authentication and authorization primitives for Kurdel applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"tsc-alias": "^1.8.16"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@kurdel/common": "0.1.0-beta.
|
|
53
|
-
"@kurdel/core": "0.1.0-beta.
|
|
54
|
-
"@kurdel/ioc": "0.1.0-beta.
|
|
52
|
+
"@kurdel/common": "0.1.0-beta.6",
|
|
53
|
+
"@kurdel/core": "0.1.0-beta.6",
|
|
54
|
+
"@kurdel/ioc": "0.1.0-beta.6"
|
|
55
55
|
}
|
|
56
56
|
}
|