Modèle de contrôle d’accès
...
Pour sécuriser les API en suivant les règles applicatives, il existe plusieurs niveaux de filtres permettant de contrôler l'accès aux routes de l'API.
Type | Spécification | Code (Exemple) |
---|
@SecuredAction() | Permission d’accès à une procédure métier exposée sur une API (ex. les enseignants ont le droit de créer des devoirs dans le cahier de textes) | Bloc de code |
---|
| @Get("/export/verify")
@SecuredAction(value = "", type = ActionType.AUTHENTICATED)
public void verifyUserExport(final HttpServerRequest |
|
request){
UserUtils.getUserInfos(eb, request, user -> {
if(user != null) {
exportService.userExportExists(user, new Handler<Boolean>(){
@Override
public void handle(Boolean exists){ renderJson(, new JsonObject().put("exists", exists.booleanValue()));
}
};
}
else
unauthorized(request);
}
});
} |
@ResourceFilter() | Partage d’accès à une ressource (consultation, commentaire, modification,gestion) | Bloc de code |
---|
| @Get("/monitoring/versions")
@SecuredAction(value = "", type = ActionType.RESOURCE)
@ResourceFilter(AdminFilter.class)
public void checkVersions(final HttpServerRequest request |
|
) {
final JsonArray versions = new fr.wseduc.webutils.collections.JsonArray();
LocalMap<String, String> versionMap = vertx.sharedData().getLocalMap("versions");
for (Map.Entry<String,String> entry : versionMap.entrySet()
versions.add(new JsonObject().put(entry.getKey(),entry.getValue()));
}
Renders.renderJson(request, versions);
}
|
@MfaProtected() | Authentification à deux facteurs (MFA) : L'authentification à deux facteurs est un mécanisme de sécurité qui exige non seulement un mot de passe (ou une autre forme d'identification), mais aussi une deuxième forme d'authentification, souvent quelque chose que l'utilisateur possède physiquement, comme un téléphone dans notre cas. L'annotation @MfaProtected() est utilisée pour définir un filtre supplémentaire sur les points d'accès (endpoints) d'une application ou d'une API. Cela signifie que l'accès à ces points d'accès sera restreint et nécessitera une authentification à deux facteurs. | Bloc de code |
---|
| @Put("/group/:groupId/users/delete")
@SecuredAction(value = "", type = ActionType.RESOURCE)
@ResourceFilter(AdminFilter.class)
@MfaProtected()
public void removeUsers(final HttpServerRequest |
|
request) {
final String groupId = request.params().get("groupId");
if (groupId != null && !groupId.trim().isEmpty()) {
bodyToJson(, new Handler<JsonObject>(
@Override
public void handle(JsonObject body) {
final JsonArray userIds = body.getJsonArray("userIds");
groupService.removeUsers(groupId, userIds,
defaultResponseHandler(request));
}
});
}
}@SecuredAction(type = ActionType.XXXXXXXX, value = "")
: Cette annotation est la plus important elle doit être ajouter sur toute route qui nécessite un sécurisation sans elle autres annotation de sécurité ne sont pas active.
...