emilsoftware-utilities 2.0.0-dev.67 → 2.0.0-dev.69
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/accessi/resource-server/errors.d.ts +1 -1
- package/dist/accessi/resource-server/errors.js.map +1 -1
- package/dist/accessi/resource-server/express.js +21 -0
- package/dist/accessi/resource-server/express.js.map +1 -1
- package/dist/accessi/resource-server/nest.js +13 -0
- package/dist/accessi/resource-server/nest.js.map +1 -1
- package/dist/accessi/resource-server/runtime.js +11 -1
- package/dist/accessi/resource-server/runtime.js.map +1 -1
- package/dist/accessi/resource-server/types.d.ts +7 -0
- package/dist/accessi/resource-server/types.js.map +1 -1
- package/dist/accessi/server/index.d.ts +1 -0
- package/dist/accessi/server/index.js +1 -0
- package/dist/accessi/server/index.js.map +1 -1
- package/dist/accessi/server/standalone.d.ts +41 -0
- package/dist/accessi/server/standalone.js +264 -0
- package/dist/accessi/server/standalone.js.map +1 -0
- package/dist/accessi-module/AccessiModule.d.ts +53 -2
- package/dist/accessi-module/AccessiModule.js +5 -2
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/accessiFetch.d.ts +5 -0
- package/dist/accessi-module/Console/accessiFetch.js +7 -4
- package/dist/accessi-module/Console/accessiFetch.js.map +1 -1
- package/dist/accessi-module/Console/console.js +21 -7
- package/dist/accessi-module/Console/generated/emilsoftware-utilities.d.ts +31 -1
- package/dist/accessi-module/Console/generated/emilsoftware-utilities.js +28 -3
- package/dist/accessi-module/Console/generated/emilsoftware-utilities.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/exchangeFederatedIdentityRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.d.ts +15 -0
- package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.js +3 -0
- package/dist/accessi-module/Console/generated/model/federatedAuthenticationResultDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/federatedExchangeResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/index.d.ts +6 -0
- package/dist/accessi-module/Console/generated/model/index.js +6 -0
- package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/loginResult.d.ts +2 -0
- package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/refreshTokenRequest.d.ts +10 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResult.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResult.js +3 -0
- package/dist/accessi-module/Console/generated/model/refreshTokenResult.js.map +1 -0
- package/dist/accessi-module/Console/wiki.js +16 -3
- package/dist/accessi-module/Console/wiki.js.map +1 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +6 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.js +24 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
- package/dist/accessi-module/Controllers/AuthController.d.ts +3 -1
- package/dist/accessi-module/Controllers/AuthController.js +90 -8
- package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConsoleEntryController.d.ts +2 -0
- package/dist/accessi-module/Controllers/ConsoleEntryController.js +11 -3
- package/dist/accessi-module/Controllers/ConsoleEntryController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.js +1 -1
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.js +1 -1
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/FederatedExchangeDtos.d.ts +21 -0
- package/dist/accessi-module/Dtos/FederatedExchangeDtos.js +74 -0
- package/dist/accessi-module/Dtos/FederatedExchangeDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -0
- package/dist/accessi-module/Dtos/LoginResponse.js +6 -0
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/RefreshTokenDtos.d.ts +12 -0
- package/dist/accessi-module/Dtos/RefreshTokenDtos.js +50 -0
- package/dist/accessi-module/Dtos/RefreshTokenDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/index.d.ts +2 -0
- package/dist/accessi-module/Dtos/index.js +2 -0
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +14 -0
- package/dist/accessi-module/Services/AuthService/AuthService.js +99 -6
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js +8 -16
- package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.d.ts +15 -0
- package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.js +85 -0
- package/dist/accessi-module/federated-auth/FederatedAuthExchangeController.js.map +1 -0
- package/dist/accessi-module/federated-auth/FederatedAuthService.js +7 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
- package/dist/accessi-module/index.d.ts +17 -1
- package/dist/accessi-module/index.js +71 -5
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js +4 -0
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js +4 -0
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/audit.d.ts +7 -0
- package/dist/accessi-module/security/audit.js +14 -0
- package/dist/accessi-module/security/audit.js.map +1 -0
- package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
- package/dist/accessi-module/security/authenticatedToken.js +3 -3
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/consoleEntry.d.ts +58 -11
- package/dist/accessi-module/security/consoleEntry.js +181 -31
- package/dist/accessi-module/security/consoleEntry.js.map +1 -1
- package/dist/accessi-module/security/edgeRateLimit.d.ts +33 -0
- package/dist/accessi-module/security/edgeRateLimit.js +81 -0
- package/dist/accessi-module/security/edgeRateLimit.js.map +1 -0
- package/dist/accessi-module/security/jwks.d.ts +33 -0
- package/dist/accessi-module/security/jwks.js +83 -0
- package/dist/accessi-module/security/jwks.js.map +1 -0
- package/dist/accessi-module/security/jwksBootstrap.d.ts +15 -0
- package/dist/accessi-module/security/jwksBootstrap.js +44 -0
- package/dist/accessi-module/security/jwksBootstrap.js.map +1 -0
- package/dist/accessi-module/security/jwtTokenOptions.d.ts +9 -2
- package/dist/accessi-module/security/jwtTokenOptions.js +18 -4
- package/dist/accessi-module/security/jwtTokenOptions.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.d.ts +1 -1
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +9 -7
- package/dist/accessi-module/security/publicAuthRateLimit.js +55 -78
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/accessi-module/security/rateLimitStore.d.ts +34 -0
- package/dist/accessi-module/security/rateLimitStore.js +145 -0
- package/dist/accessi-module/security/rateLimitStore.js.map +1 -0
- package/dist/accessi-module/security/refreshTokenRotation.d.ts +40 -0
- package/dist/accessi-module/security/refreshTokenRotation.js +91 -0
- package/dist/accessi-module/security/refreshTokenRotation.js.map +1 -0
- package/dist/accessi-module/security/serviceTokenGuard.d.ts +3 -1
- package/dist/accessi-module/security/serviceTokenGuard.js +11 -6
- package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -1
- package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +5 -4
- package/dist/accessi-module/security/serviceTokenRateLimit.js +33 -29
- package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -1
- package/dist/accessi-module/security/sessionRevocation.d.ts +52 -0
- package/dist/accessi-module/security/sessionRevocation.js +124 -0
- package/dist/accessi-module/security/sessionRevocation.js.map +1 -0
- package/dist/accessi-module/security/validateOptions.d.ts +19 -0
- package/dist/accessi-module/security/validateOptions.js +115 -0
- package/dist/accessi-module/security/validateOptions.js.map +1 -0
- package/dist/emilsoftware-utilities-2.0.0-dev.69.tgz +0 -0
- package/dist/initEmilsoftwareModule.js +39 -3
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/scripts/startAccessiService.d.ts +1 -0
- package/dist/scripts/startAccessiService.js +11 -0
- package/dist/scripts/startAccessiService.js.map +1 -0
- package/docs/accessi-openapi-fingerprint.json +190 -0
- package/docs/gateway-rate-limit.md +98 -0
- package/docs/standalone-service.md +176 -0
- package/integration-prompt.md +299 -8
- package/package.json +11 -5
- package/dist/emilsoftware-utilities-2.0.0-dev.67.tgz +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
{
|
|
2
|
+
"paths": [
|
|
3
|
+
"DELETE /api/accessi/federated-auth/identities/{identityKey} disableFederatedIdentity",
|
|
4
|
+
"DELETE /api/accessi/federated-auth/providers/{provider} deleteFederatedProvider",
|
|
5
|
+
"DELETE /api/accessi/federated-auth/users/{codiceUtente}/identities/{identityKey} deleteFederatedIdentityPermanently",
|
|
6
|
+
"DELETE /api/accessi/filtri/tipi/{tipFil} deleteTipoFiltro",
|
|
7
|
+
"DELETE /api/accessi/permission/delete-role/{codiceRuolo} deleteRole",
|
|
8
|
+
"DELETE /api/accessi/permission/menu-groups/{codiceGruppo} deleteMenuGroup",
|
|
9
|
+
"DELETE /api/accessi/permission/menu-types/{codiceTipo} deleteMenuType",
|
|
10
|
+
"DELETE /api/accessi/permission/menus/{codiceMenu} deleteMenu",
|
|
11
|
+
"DELETE /api/accessi/permission/scopes/{codiceScope} deleteScope",
|
|
12
|
+
"DELETE /api/accessi/service-token/{tokenId} revokeServiceToken",
|
|
13
|
+
"DELETE /api/accessi/user/delete-user-permanent/{codiceUtente} deleteUserPermanently",
|
|
14
|
+
"DELETE /api/accessi/user/delete-user/{codiceUtente} deleteUser",
|
|
15
|
+
"GET /api/accessi/auth/bootstrap-admin/status getAdminBootstrapStatus",
|
|
16
|
+
"GET /api/accessi/email/reset-password-page/{token} serveResetPasswordPage",
|
|
17
|
+
"GET /api/accessi/federated-auth/providers getFederatedProviders",
|
|
18
|
+
"GET /api/accessi/federated-auth/users/{codiceUtente}/identities getFederatedIdentities",
|
|
19
|
+
"GET /api/accessi/filtri/tipi getTipiFiltro",
|
|
20
|
+
"GET /api/accessi/filtri/utente getFiltriUtente",
|
|
21
|
+
"GET /api/accessi/permission/grants/{codiceUtente} getUserRolesAndGrants",
|
|
22
|
+
"GET /api/accessi/permission/groups-with-menus getGroupsWithMenus",
|
|
23
|
+
"GET /api/accessi/permission/menu-types getMenuTypes",
|
|
24
|
+
"GET /api/accessi/permission/menus getMenus",
|
|
25
|
+
"GET /api/accessi/permission/menus/{codiceMenu}/scopes getMenuScopes",
|
|
26
|
+
"GET /api/accessi/permission/roles getRoles",
|
|
27
|
+
"GET /api/accessi/permission/scopes getScopes",
|
|
28
|
+
"GET /api/accessi/schema getSchema",
|
|
29
|
+
"GET /api/accessi/service-token getServiceTokens",
|
|
30
|
+
"GET /api/accessi/user/get-users getUsers",
|
|
31
|
+
"GET /api/accessi/user/reset-password/{token} serveResetPasswordPageUser",
|
|
32
|
+
"PATCH /api/accessi/configurator/groups/{codiceGruppo}/enabled setGroupEnabled",
|
|
33
|
+
"PATCH /api/accessi/configurator/menus/{codiceMenu}/enabled setMenuEnabled",
|
|
34
|
+
"PATCH /api/accessi/federated-auth/identities/{identityKey} updateFederatedIdentity",
|
|
35
|
+
"PATCH /api/accessi/federated-auth/providers/{provider} updateFederatedProvider",
|
|
36
|
+
"PATCH /api/accessi/federated-auth/users/{codiceUtente}/password-login setPasswordLoginPolicy",
|
|
37
|
+
"PATCH /api/accessi/user/set-gdpr/{codiceUtente} setGdpr",
|
|
38
|
+
"POST /api/accessi/auth/bootstrap-admin bootstrapAdmin",
|
|
39
|
+
"POST /api/accessi/auth/confirm-reset-password/{token} resetPassword",
|
|
40
|
+
"POST /api/accessi/auth/get-user-by-token getUserByToken",
|
|
41
|
+
"POST /api/accessi/auth/introspect introspectAccessiToken",
|
|
42
|
+
"POST /api/accessi/auth/login login",
|
|
43
|
+
"POST /api/accessi/auth/refresh refreshAccessToken",
|
|
44
|
+
"POST /api/accessi/auth/revoke-sessions revokeSessions",
|
|
45
|
+
"POST /api/accessi/auth/two-factor/resend resendTwoFactor",
|
|
46
|
+
"POST /api/accessi/auth/two-factor/verify verifyTwoFactor",
|
|
47
|
+
"POST /api/accessi/console/entry createConsoleEntryTicket",
|
|
48
|
+
"POST /api/accessi/console/entry/exchange exchangeConsoleEntryTicket",
|
|
49
|
+
"POST /api/accessi/email/send-reset-password-email sendPasswordResetEmail",
|
|
50
|
+
"POST /api/accessi/federated-auth/exchange exchangeFederatedIdentity",
|
|
51
|
+
"POST /api/accessi/federated-auth/providers createFederatedProvider",
|
|
52
|
+
"POST /api/accessi/federated-auth/users createFederatedUser",
|
|
53
|
+
"POST /api/accessi/federated-auth/users/{codiceUtente}/identities linkFederatedIdentity",
|
|
54
|
+
"POST /api/accessi/filtri/tipi createTipoFiltro",
|
|
55
|
+
"POST /api/accessi/filtri/utente saveFiltriUtente",
|
|
56
|
+
"POST /api/accessi/permission/assign-permissions/{codiceUtente} assignPermissionsToUser",
|
|
57
|
+
"POST /api/accessi/permission/assign-roles/{codiceUtente} assignRolesToUser",
|
|
58
|
+
"POST /api/accessi/permission/create-role createRole",
|
|
59
|
+
"POST /api/accessi/permission/menu-groups createMenuGroup",
|
|
60
|
+
"POST /api/accessi/permission/menu-types createMenuType",
|
|
61
|
+
"POST /api/accessi/permission/menus createMenu",
|
|
62
|
+
"POST /api/accessi/permission/scopes createScope",
|
|
63
|
+
"POST /api/accessi/service-token createServiceToken",
|
|
64
|
+
"POST /api/accessi/service-token/{tokenId}/rotate rotateServiceToken",
|
|
65
|
+
"POST /api/accessi/user/create-managed-user createManagedUser",
|
|
66
|
+
"POST /api/accessi/user/force-password-reset-legacy forcePasswordResetLegacy",
|
|
67
|
+
"POST /api/accessi/user/force-password-reset/{codiceUtente} forcePasswordReset",
|
|
68
|
+
"POST /api/accessi/user/login-as/{codiceUtente} createLoginAsUrl",
|
|
69
|
+
"POST /api/accessi/user/register register",
|
|
70
|
+
"POST /api/accessi/user/set-password/{codiceUtente} setUserPassword",
|
|
71
|
+
"POST /api/accessi/user/set-stato setStatoRegistrazione",
|
|
72
|
+
"PUT /api/accessi/filtri/tipi/{tipFil} updateTipoFiltro",
|
|
73
|
+
"PUT /api/accessi/permission/menu-groups/{codiceGruppo} updateMenuGroup",
|
|
74
|
+
"PUT /api/accessi/permission/menu-types/{codiceTipo} updateMenuType",
|
|
75
|
+
"PUT /api/accessi/permission/menus/{codiceMenu} updateMenu",
|
|
76
|
+
"PUT /api/accessi/permission/menus/{codiceMenu}/scopes setMenuScopes",
|
|
77
|
+
"PUT /api/accessi/permission/scopes/{codiceScope} updateScope",
|
|
78
|
+
"PUT /api/accessi/permission/scopes/{codiceScope}/menus setScopeMenus",
|
|
79
|
+
"PUT /api/accessi/permission/update-role/{codiceRuolo} updateRole",
|
|
80
|
+
"PUT /api/accessi/user/update-user/{codiceUtente} updateUtente"
|
|
81
|
+
],
|
|
82
|
+
"schemas": [
|
|
83
|
+
"AbilitazioneMenu",
|
|
84
|
+
"AccessiIntrospectionResultDto",
|
|
85
|
+
"ActionResponse",
|
|
86
|
+
"AdminBootstrapStatusResponse",
|
|
87
|
+
"AdminBootstrapStatusResult",
|
|
88
|
+
"AssignPermissionsToUserRequest",
|
|
89
|
+
"AssignRolesToUserRequest",
|
|
90
|
+
"AuthenticatedTokenPayloadDto",
|
|
91
|
+
"AuthenticatedUserPayloadDto",
|
|
92
|
+
"BootstrapAdminRequest",
|
|
93
|
+
"BootstrapAdminResponse",
|
|
94
|
+
"BootstrapAdminResultDto",
|
|
95
|
+
"ConfirmResetPasswordRequest",
|
|
96
|
+
"ConsoleEntryExchangeRequest",
|
|
97
|
+
"ConsoleEntrySessionResponse",
|
|
98
|
+
"ConsoleEntrySessionResult",
|
|
99
|
+
"ConsoleEntryTicketResponse",
|
|
100
|
+
"ConsoleEntryTicketResult",
|
|
101
|
+
"ConsoleEntryTokenResult",
|
|
102
|
+
"CreateFederatedIdentityRequest",
|
|
103
|
+
"CreateFederatedProviderRequest",
|
|
104
|
+
"CreateFederatedUserRequest",
|
|
105
|
+
"CreateFilterTypeRequest",
|
|
106
|
+
"CreateMenuGroupRequest",
|
|
107
|
+
"CreateMenuRequest",
|
|
108
|
+
"CreateMenuTypeRequest",
|
|
109
|
+
"CreateScopeRequest",
|
|
110
|
+
"CreateServiceTokenRequest",
|
|
111
|
+
"CreateServiceTokenResponse",
|
|
112
|
+
"ErrorResponse",
|
|
113
|
+
"ExchangeFederatedIdentityRequest",
|
|
114
|
+
"FederatedAuthenticationResultDto",
|
|
115
|
+
"FederatedExchangeResponse",
|
|
116
|
+
"FederatedIdentityListResponse",
|
|
117
|
+
"FederatedIdentityResponse",
|
|
118
|
+
"FederatedIdentityResponseDto",
|
|
119
|
+
"FederatedProviderListResponse",
|
|
120
|
+
"FederatedProviderResponse",
|
|
121
|
+
"FederatedProviderResponseDto",
|
|
122
|
+
"FiltriUtente",
|
|
123
|
+
"GetFiltriResponse",
|
|
124
|
+
"GetFiltriUtenteResponse",
|
|
125
|
+
"GetGroupsWithMenusResponse",
|
|
126
|
+
"GetMenuScopesResponse",
|
|
127
|
+
"GetMenuTypesResponse",
|
|
128
|
+
"GetMenusResponse",
|
|
129
|
+
"GetRolesResponse",
|
|
130
|
+
"GetSchemaResponse",
|
|
131
|
+
"GetScopesResponse",
|
|
132
|
+
"GetServiceTokensResponse",
|
|
133
|
+
"GetUserByTokenRequest",
|
|
134
|
+
"GetUserByTokenResponse",
|
|
135
|
+
"GetUsersResponse",
|
|
136
|
+
"GetUsersResult",
|
|
137
|
+
"GroupWithMenusEntity",
|
|
138
|
+
"IntrospectAccessiTokenRequest",
|
|
139
|
+
"IntrospectAccessiTokenResponse",
|
|
140
|
+
"IssuedServiceTokenDto",
|
|
141
|
+
"LoginAsRequest",
|
|
142
|
+
"LoginAsResponse",
|
|
143
|
+
"LoginAsResult",
|
|
144
|
+
"LoginRequest",
|
|
145
|
+
"LoginResponse",
|
|
146
|
+
"LoginResult",
|
|
147
|
+
"MenuEntity",
|
|
148
|
+
"MenuTypeEntity",
|
|
149
|
+
"PasswordExpiredResponse",
|
|
150
|
+
"Permission",
|
|
151
|
+
"PublicRegisterRequest",
|
|
152
|
+
"RefreshTokenRequest",
|
|
153
|
+
"RefreshTokenResponse",
|
|
154
|
+
"RefreshTokenResult",
|
|
155
|
+
"RegisterRequest",
|
|
156
|
+
"RegisterResponse",
|
|
157
|
+
"ResendTwoFactorRequest",
|
|
158
|
+
"Role",
|
|
159
|
+
"RuoliMenu",
|
|
160
|
+
"SchemaDdlResult",
|
|
161
|
+
"SchemaDdlSection",
|
|
162
|
+
"ScopeEntity",
|
|
163
|
+
"SendResetPasswordEmailRequest",
|
|
164
|
+
"ServiceTokenDto",
|
|
165
|
+
"SetMenuScopesRequest",
|
|
166
|
+
"SetPasswordLoginPolicyRequest",
|
|
167
|
+
"SetScopeMenusRequest",
|
|
168
|
+
"SetStatoRegistrazioneDto",
|
|
169
|
+
"SetUserPasswordRequest",
|
|
170
|
+
"Status",
|
|
171
|
+
"TipoFiltro",
|
|
172
|
+
"TokenResult",
|
|
173
|
+
"TwoFactorChallengeDto",
|
|
174
|
+
"UpdateEnabledStatusRequest",
|
|
175
|
+
"UpdateFederatedIdentityRequest",
|
|
176
|
+
"UpdateFederatedProviderRequest",
|
|
177
|
+
"UpdateFilterTypeRequest",
|
|
178
|
+
"UpdateMenuGroupRequest",
|
|
179
|
+
"UpdateMenuRequest",
|
|
180
|
+
"UpdateMenuTypeRequest",
|
|
181
|
+
"UpdateScopeRequest",
|
|
182
|
+
"UserDto",
|
|
183
|
+
"UserGrantsDto",
|
|
184
|
+
"UserGrantsResponse",
|
|
185
|
+
"VerifyTwoFactorRequest"
|
|
186
|
+
],
|
|
187
|
+
"securitySchemes": [
|
|
188
|
+
"bearer"
|
|
189
|
+
]
|
|
190
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Gateway rate limit per Accessi Service
|
|
2
|
+
|
|
3
|
+
Il rate limit applicativo di Accessi protegge login, 2FA, reset password, console entry e service token. Il gateway/API gateway resta utile per una protezione per IP, connessioni e bot prima che la richiesta raggiunga Node.
|
|
4
|
+
|
|
5
|
+
Regole consigliate:
|
|
6
|
+
|
|
7
|
+
- `/api/accessi/auth/*`: soglia bassa, burst contenuto
|
|
8
|
+
- `/api/accessi/console/entry/exchange`: soglia bassa
|
|
9
|
+
- `/api/accessi/*`: soglia media
|
|
10
|
+
- `/accessi/openapi*` e `/accessi/.well-known/jwks.json`: soglia alta o cache CDN
|
|
11
|
+
|
|
12
|
+
## Nginx
|
|
13
|
+
|
|
14
|
+
```nginx
|
|
15
|
+
limit_req_zone $binary_remote_addr zone=accessi_auth:10m rate=2r/s;
|
|
16
|
+
limit_req_zone $binary_remote_addr zone=accessi_api:10m rate=10r/s;
|
|
17
|
+
limit_conn_zone $binary_remote_addr zone=accessi_conn:10m;
|
|
18
|
+
|
|
19
|
+
server {
|
|
20
|
+
# Se Accessi e dietro un proxy/load balancer, configura real_ip
|
|
21
|
+
# prima di usare $binary_remote_addr.
|
|
22
|
+
|
|
23
|
+
location /api/accessi/auth/ {
|
|
24
|
+
limit_req zone=accessi_auth burst=10 nodelay;
|
|
25
|
+
limit_conn accessi_conn 20;
|
|
26
|
+
proxy_pass http://accessi_service;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
location /api/accessi/ {
|
|
30
|
+
limit_req zone=accessi_api burst=50 nodelay;
|
|
31
|
+
limit_conn accessi_conn 20;
|
|
32
|
+
proxy_pass http://accessi_service;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
location /accessi/ {
|
|
36
|
+
limit_req zone=accessi_api burst=50 nodelay;
|
|
37
|
+
proxy_pass http://accessi_service;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Traefik
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
http:
|
|
46
|
+
middlewares:
|
|
47
|
+
accessi-auth-ratelimit:
|
|
48
|
+
rateLimit:
|
|
49
|
+
average: 2
|
|
50
|
+
burst: 10
|
|
51
|
+
period: 1s
|
|
52
|
+
accessi-api-ratelimit:
|
|
53
|
+
rateLimit:
|
|
54
|
+
average: 10
|
|
55
|
+
burst: 50
|
|
56
|
+
period: 1s
|
|
57
|
+
routers:
|
|
58
|
+
accessi-auth:
|
|
59
|
+
rule: PathPrefix(`/api/accessi/auth/`)
|
|
60
|
+
middlewares: [accessi-auth-ratelimit]
|
|
61
|
+
service: accessi
|
|
62
|
+
accessi-api:
|
|
63
|
+
rule: PathPrefix(`/api/accessi/`) || PathPrefix(`/accessi/`)
|
|
64
|
+
middlewares: [accessi-api-ratelimit]
|
|
65
|
+
service: accessi
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Cloudflare
|
|
69
|
+
|
|
70
|
+
Regole di rate limiting:
|
|
71
|
+
|
|
72
|
+
- path `/api/accessi/auth/*`: 10 richieste/minuto per IP, azione `managed challenge`
|
|
73
|
+
- path `/api/accessi/console/entry/exchange`: 30 richieste/5 minuti per IP
|
|
74
|
+
- path `/api/accessi/*`: 300 richieste/minuto per IP, azione `block`
|
|
75
|
+
- path `/accessi/.well-known/jwks.json`: cache CDN, limite alto
|
|
76
|
+
|
|
77
|
+
Aggiungere bot fight mode/WAF secondo il piano disponibile.
|
|
78
|
+
|
|
79
|
+
## AWS WAF / API Gateway
|
|
80
|
+
|
|
81
|
+
- rate-based rule: 300 richieste/5 minuti per IP
|
|
82
|
+
- scope-down statement: `URI starts with /api/accessi`
|
|
83
|
+
- regola più severa su `/api/accessi/auth/*`
|
|
84
|
+
- AWS Shield/WAF Bot Control se disponibile
|
|
85
|
+
|
|
86
|
+
## Rapporto con `edgeRateLimit` della libreria
|
|
87
|
+
|
|
88
|
+
`edgeRateLimit` e un ultimo livello applicativo:
|
|
89
|
+
|
|
90
|
+
- usa lo stesso `RateLimitStore` Redis dei rate limit per account;
|
|
91
|
+
- copre Accessi anche se il gateway non ha regole specifiche;
|
|
92
|
+
- non sostituisce WAF, bot protection, limiti di connessione o protezione DDoS.
|
|
93
|
+
|
|
94
|
+
In produzione usare entrambi:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
Client -> CDN/WAF -> API gateway -> edgeRateLimit Accessi -> rate limit per account
|
|
98
|
+
```
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Accessi Service standalone
|
|
2
|
+
|
|
3
|
+
Accessi puo girare come servizio autonomo, senza un backend ospitante.
|
|
4
|
+
|
|
5
|
+
## Avvio da codice
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { startAccessiService } from "emilsoftware-utilities/accessi/server";
|
|
9
|
+
|
|
10
|
+
await startAccessiService({
|
|
11
|
+
port: Number(process.env.PORT ?? 3000),
|
|
12
|
+
healthPath: "/health",
|
|
13
|
+
metrics: true,
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`startAccessiService`:
|
|
18
|
+
|
|
19
|
+
- valida `AccessiOptions` con `assertValidAccessiOptions`
|
|
20
|
+
- crea l'app Express
|
|
21
|
+
- monta `/health/live`, `/health/ready`, `/health/metrics`
|
|
22
|
+
- inizializza Accessi
|
|
23
|
+
- avvia il server
|
|
24
|
+
- registra `SIGTERM`/`SIGINT` per lo shutdown graceful
|
|
25
|
+
- chiude Nest e i pool Firebird
|
|
26
|
+
|
|
27
|
+
Per un controllo manuale usare `createAccessiService`, che restituisce `start()` e `stop()`.
|
|
28
|
+
|
|
29
|
+
## Avvio da CLI
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm run accessi:serve
|
|
33
|
+
npm run accessi:serve:dist
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
La configurazione viene letta da `createAccessiOptionsFromEnv()`.
|
|
37
|
+
|
|
38
|
+
## Health
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
GET /health/live -> 200 se il processo e vivo
|
|
42
|
+
GET /health/ready -> 200 se DB e store configurati sono pronti
|
|
43
|
+
GET /health/metrics -> metriche Prometheus testuali
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`/health/ready` controlla:
|
|
47
|
+
|
|
48
|
+
- bootstrap completato
|
|
49
|
+
- database Accessi raggiungibile e schema inizializzato
|
|
50
|
+
- `healthCheck()` degli store Redis configurati
|
|
51
|
+
- `readinessChecks` aggiuntivi passati dal chiamante
|
|
52
|
+
|
|
53
|
+
## Esecuzione come processo
|
|
54
|
+
|
|
55
|
+
In produzione il servizio viene eseguito come processo Node gestito da systemd, PM2 o dal supervisor del cliente:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run accessi:serve:dist
|
|
59
|
+
# oppure
|
|
60
|
+
node dist/scripts/startAccessiService.js
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Esempio systemd minimale:
|
|
64
|
+
|
|
65
|
+
```ini
|
|
66
|
+
[Unit]
|
|
67
|
+
Description=Accessi Service
|
|
68
|
+
After=network.target
|
|
69
|
+
|
|
70
|
+
[Service]
|
|
71
|
+
WorkingDirectory=/opt/accessi-service
|
|
72
|
+
EnvironmentFile=/etc/accessi/accessi.env
|
|
73
|
+
ExecStart=/usr/bin/node dist/scripts/startAccessiService.js
|
|
74
|
+
Restart=on-failure
|
|
75
|
+
RestartSec=5
|
|
76
|
+
KillSignal=SIGTERM
|
|
77
|
+
TimeoutStopSec=15
|
|
78
|
+
|
|
79
|
+
[Install]
|
|
80
|
+
WantedBy=multi-user.target
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Il readiness endpoint `/health/ready` va usato dal load balancer o dal supervisore per decidere quando inviare traffico.
|
|
84
|
+
|
|
85
|
+
## Configurazione consigliata
|
|
86
|
+
|
|
87
|
+
- `ACCESSI_DB_*`
|
|
88
|
+
- `ACCESSI_ENCRYPTION_KEY`
|
|
89
|
+
- `ACCESSI_JWT_SECRET`
|
|
90
|
+
- `ACCESSI_JWT_ISSUER`
|
|
91
|
+
- `ACCESSI_JWT_AUDIENCE`
|
|
92
|
+
- `ACCESSI_JWT_ALGORITHM`, `ACCESSI_JWT_PRIVATE_KEY`, `ACCESSI_JWT_PUBLIC_KEY`, `ACCESSI_JWT_KEY_ID` per RS/ES
|
|
93
|
+
- `ACCESSI_JWKS_PATH`
|
|
94
|
+
- SMTP
|
|
95
|
+
- `PORT`
|
|
96
|
+
|
|
97
|
+
Per Redis, passare gli store nel bootstrap applicativo:
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { createRedisRateLimitStore, createRedisConsoleEntryStore } from "emilsoftware-utilities/accessi/server";
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Generazione chiavi JWT
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm run accessi:generate-jwt-keys -- --algorithm RS256 --out ./keys
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Genera:
|
|
110
|
+
|
|
111
|
+
- `jwt-private.pem`
|
|
112
|
+
- `jwt-public.pem`
|
|
113
|
+
- `jwks.json`
|
|
114
|
+
- `jwt-keys.json` con `algorithm` e `keyId`
|
|
115
|
+
|
|
116
|
+
Configurare poi:
|
|
117
|
+
|
|
118
|
+
```env
|
|
119
|
+
ACCESSI_JWT_ALGORITHM=RS256
|
|
120
|
+
ACCESSI_JWT_PRIVATE_KEY=<contenuto jwt-private.pem>
|
|
121
|
+
ACCESSI_JWT_PUBLIC_KEY=<contenuto jwt-public.pem>
|
|
122
|
+
ACCESSI_JWT_KEY_ID=<keyId>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Revoca sessioni
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
import { createRedisSessionRevocationStore } from "emilsoftware-utilities/accessi/server";
|
|
129
|
+
|
|
130
|
+
sessionRevocation: {
|
|
131
|
+
store: createRedisSessionRevocationStore({
|
|
132
|
+
client: redis,
|
|
133
|
+
ttlMs: 30 * 24 * 60 * 60 * 1000, // maggiore della durata massima dei token
|
|
134
|
+
}),
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Endpoint utente:
|
|
139
|
+
|
|
140
|
+
```http
|
|
141
|
+
POST /api/accessi/auth/revoke-sessions
|
|
142
|
+
Authorization: Bearer <access-token>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
I resource server fratelli devono ricevere lo stesso store in `revocation.store`.
|
|
146
|
+
|
|
147
|
+
## Console su dominio separato
|
|
148
|
+
|
|
149
|
+
Se la console è servita da un dominio diverso dall’API:
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
accessiOptions: {
|
|
153
|
+
...options,
|
|
154
|
+
consoleApiBaseUrl: "https://accessi.example.com",
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Accessi inietta `window.__ACCESSI_API_BASE_URL__` nella pagina della console.
|
|
159
|
+
|
|
160
|
+
## CORS e proxy
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
accessiOptions: {
|
|
164
|
+
...options,
|
|
165
|
+
http: {
|
|
166
|
+
cors: {
|
|
167
|
+
origin: ["https://app.example.com"],
|
|
168
|
+
credentials: false,
|
|
169
|
+
},
|
|
170
|
+
trustProxy: 1, // load balancer/reverse proxy
|
|
171
|
+
securityHeaders: true,
|
|
172
|
+
},
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Con Bearer token non serve CSRF. Se in futuro si passasse a cookie httpOnly, aggiungere CSRF e configurazione cookie same-site.
|