API - Sécurisation et contrôle d'accès

Modèle de contrôle d’accès

Il existe 3 types de contrôle d’accès à nos API . Ils sont décrits dans le tableau ci-dessous.Tous ces contrôles d’accès sont exécutés dans un chaîne de filtre HTTP 

Type

Description

Configuration

Contrôle d’accès

Type

Description

Configuration

Contrôle d’accès

@MfaProtected()

 

 

 

AUTHENTICATED

 

 

 

WORKFLOW

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)

Console d’administration (par un administrateur d’établissement)

Présence de la permission (WORKFLOW) dans la session de l’utilisateur

RESOURCE

droit de partage

Partage d’accès à une ressource (consultation, commentaire, modification,gestion)

Fenêtre de partage (par le propriétaire d’une ressource)

Présence de l’utilisateur ou d’un de ses groupes dans la table de partage de la ressource

 

 

 

 

RESOURCE

@ResourceFilter

Droit d’accès spécifique pour couvrir les cas métiers particuliers

Implémentation d’un filtre de sécurité spécifique 

Filtre de sécurité spécifique

Annotations de sécurisation des endpoints d’API

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)

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)

@Get("/export/verify") @SecuredAction(value = "", type = ActionType.AUTHENTICATED) public void verifyUserExport(final HttpServerRequest request){

@ResourceFilter()

Partage d’accès à une ressource (consultation, commentaire, modification,gestion)

@Get("/monitoring/versions") @SecuredAction(value = "", type = ActionType.RESOURCE) @ResourceFilter(AdminFilter.class) public void checkVersions(final HttpServerRequest request) {

@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.

@Put("/group/:groupId/users/delete") @SecuredAction(value = "", type = ActionType.RESOURCE) @ResourceFilter(AdminFilter.class) @MfaProtected() public void removeUsers(final HttpServerRequest 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.

    • ActionType.RESOURCE : Il s’agit du type de sécurisation appliqué sur la route.

      • WORKFLOW : Cet ActionType est activé par défaut, même sans spécifier la valeur ActionType. Il applique la sécurisation définie dans la console d'administration.

      • RESOURCE : il permet le partage d’accès à une ressource il s'applique obligatoirement lorsqu'on utilise @ResourceFilter qui lui défini le scope des utilisateurs ayant accès a une ressource ou @MfaProtected() qui ajoute un couche de sécurisation afin de permettre le déclenchement des filtres dans le traitement des requêtes.

      • AUTHENTICATED : Il permet de vérifier la présence des cookies de connexion ainsi que l'état de connexion de l'utilisateur.

 

  • @ResourceFilter(XXXXXXXXX.class) : Cette annotation défini l’accès a des groupes particuliers d’utilisateurs.

    • SuperAdminFilter.class

    • AdminFilter.class

    • RoleFilter.class

    • LinkRoleGroupFilter.class

    • RoleGroupFilter.class

    • ApplicationFilter.class

    • AdmlOfStructure.class

    • WidgetLinkFilter.class

    • MessageOwnerFilter.class

    • VisiblesFilter.class

    • MessageUserFilter.class

    • MultipleMessageUserFilter.class

    • MessageUserFilter.class

    • FoldersFilter.class

    • AdmlOfStructureOrClassOrTeachOfUser.class

    • AdmlOfStructuresByExternalId.class

    • TeacherOfClass.class

    • AdminStructureFilter.class

    • UserInStructure.class

    • UserAccessOrVisible.class

    • TeacherOfUser.class

    • AnyAdminOfUser.class

    • AddFunctionFilter.class

    • UserAccessOrVisible.class

    • RelativeStudentFilter.class

    • AdmlOfUser.class

    • AdmlOfTwoUsers.class

    • AdmlOfStructuresByUAI.class

 

  • @MfaProtected() : Cette annotation permet d'ajouter un filtre supplémentaire qui exige l'authentification à deux facteurs pour les points d'accès (endpoints).