Gel des utilisateurs

Il est possible pour les administrateurs du serveur de geler des utilisateurs Parsec spécifiques.

Les utilisateurs gelés seront temporairement privés de connexion au serveur Parsec en attendant qu’un administrateur de leur organisation les révoque réellement. Cette opération ne fait donc pas partie du système de révocation Parsec (c’est-à-dire la suppression définitive des droits de l’utilisateur).

Le mécanisme de gel permet de bloquer automatiquement les utilisateurs qui ont été supprimés d’un service d’annuaire (comme OpenLDAP ou AD), car il est exposé sous la forme de routes HTTP qui ne nécessitent qu’un jeton d’administration.

Il est également exposé via une interface en ligne de commande (CLI), voir la section sur les commandes CLI.

Route HTTP users

Cette route est disponible via /administration/organizations/<raw_organization_id>/users et nécessite un jeton d’administration.

Elle ne prend en charge que la méthode GET qui liste les informations suivantes pour chacun des utilisateurs actifs :

  • identifiant Parsec

  • nom d’utilisateur

  • adresse e-mail de l’utilisateur

  • statut gelé ou non

Voici un exemple utilisant curl et jq :

$ curl https://$server/administration/organizations/$organization/users \
    -H "Authorization: Bearer $administration_token" | jq

Une requête réussie renvoie un objet JSON avec la structure suivante:

{
  "users": [
    {
      "user_name": "Alice",
      "frozen": true,
      "user_email": "alice@example.com",
      "user_id": "940a380aedd44127863d952a66cfce1e"
    },
    {
      "user_name": "Bob",
      "frozen": false,
      "user_email": "bob@example.com",
      "user_id": "7d04b0df51a74158b35b6386eecdf4e0"
    }
  ]
}

Route HTTP users/frozen

Cette route est disponible via /administration/organizations/<raw_organization_id>/users/frozen et nécessite un jeton d’administration.

Elle ne prend en charge que la méthode POST qui modifie le statut gelé pour un utilisateur donné.

Voici un exemple de génération des données de la requête en utilisant jq :

$ DATA=$(jq -n --arg user_id "$user_id" --argjson frozen true '$ARGS.named')
$ echo $DATA
{
"user_id": "940a380aedd44127863d952a66cfce1e",
"frozen": true
}

La requête peut également utiliser le champ user_email au lieu de user_id pour identifier l’utilisateur Parsec (voir les notes sur l’identification des utilisateurs):

$ DATA=$(jq -n --arg user_email "$user_email" --argjson frozen true '$ARGS.named')
$ echo $DATA
{
"user_email": "alice@example.com",
"frozen": true
}

Voici un exemple d’exécution de la requête en utilisant curl et jq :

$ curl https://$server/administration/organizations/$organization/users/freeze \
    -H "Authorization: Bearer $administration_token" \
    --request POST --data $DATA | jq

Une requête réussie renvoie un dictionnaire JSON similaire à celui-ci:

{
  "frozen": true,
  "user_email": "alice@example.com",
  "user_id": "940a380aedd44127863d952a66cfce1e",
  "user_name": "Alice"
}

Notes sur l’identification des utilisateurs

Il existe une différence subtile entre les deux façons d’identifier un utilisateur. À tout moment donné, une adresse e-mail peut être utilisée pour identifier de manière unique un utilisateur non révoqué d’une organisation donnée. En revanche, un identifiant utilisateur Parsec identifie de manière unique n’importe quel utilisateur de toutes les organisations du serveur Parsec, y compris les utilisateurs révoqués. Cela signifie qu’au fil du temps, une adresse e-mail peut identifier différents utilisateurs Parsec avec des identifiants Parsec différents, même au sein de la même organisation.

Le statut gelé configuré par la méthode POST est spécifiquement associé à l’identifiant utilisateur Parsec, indépendamment de la méthode d’identification utilisée dans le corps de la requête. Cela a la conséquence suivante : si un utilisateur est révoqué, puis qu’un nouvel utilisateur est créé avec la même adresse e-mail, le statut gelé ne sera pas appliqué au nouvel utilisateur.

Gestion des erreurs HTTP

Les erreurs suivantes peuvent être renvoyées par les routes users et users/freeze :

  • Organisation introuvable : 404 avec le corps JSON {"error": "not_found}

  • Jeton d’administration invalide : 403 avec le corps JSON {"error": "not_allowed"}

  • Format de requête incorrect : 400 avec le corps JSON {"error": "bad_data"}

Une autre erreur peut également être renvoyée lorsque la requête users/freeze contient un utilisateur qui n’existe pas dans l’organisation :

  • Utilisateur introuvable : 404 avec le corps JSON {"error": "user_not_found"}

Commandes CLI list_users et freeze_user

La commande list_users liste tous les utilisateurs d’une organisation donnée, y compris leur statut gelé ou non-gelé:

$ parsec core list_users -B "parsec://$server" -T $administration_token $organization Alice <alice@example.com>
  - Parsec ID: 67ee640058aa45ca9281717c866baa06
  - Status: Not frozen

• Bob <bob@example.com>
  - Parsec ID: 0d22530361484b86b28e5b2c3a089772
  - Status: Frozen

• David <david@example.com>
  - Parsec ID: 1f1b81052fa947babdbacd6b147b3622
  - Status: Not Frozen

La commande freeze_user permet de geler un utilisateur d’une organisation donnée :

$ parsec core freeze_user -B "parsec://$server" -T $administration_token $organization $user_id
David <david@example.com>
- Parsec ID: 1f1b81052fa947babdbacd6b147b3622
- Status: Frozen

Elle peut également être utilisée pour dégeler un utilisateur donné :

$ parsec core freeze_user -B "parsec://$server" -T $administration_token --unfreeze $organization $user_id
David <david@example.com>
- Parsec ID: 1f1b81052fa947babdbacd6b147b3622
- Status: Not frozen

L’utilisateur $user fourni peut être soit un identifiant parsec, soit une adresse e-mail. Utilisez l’option --help pour plus d’informations.