Roles et autorisations 15 min de lecture

Role mapping et utilisation dans les tokens

Ou apparaissent les roles dans les tokens ?

Par defaut, les roles sont inclus dans l'access token JWT :

# Decoder le payload d'un access token (base64)
echo $ACCESS_TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .

# Exemple de payload
{
  "realm_access": {
    "roles": ["admin", "user"]
  },
  "resource_access": {
    "mon-backend": {
      "roles": ["read", "write"]
    }
  }
}

Attribuer des roles via les groupes

Au lieu d'attribuer des roles individuellement, vous pouvez les attribuer a un groupe :

  1. Allez dans Groups > selectionnez un groupe
  2. Onglet Role mapping
  3. Cliquez Assign role et selectionnez les roles
  4. Tous les membres du groupe heritent de ces roles

Default Roles

Vous pouvez definir des roles attribues par defaut a tout nouvel utilisateur :

  1. Allez dans Realm Settings > User Registration
  2. Configurez les Default Roles

Verifier les roles cote application

# Exemple en Node.js avec un middleware
function requireRole(role) {
  return (req, res, next) => {
    const token = req.headers.authorization?.split(" ")[1];
    const decoded = jwt.decode(token);
    const roles = decoded.realm_access?.roles || [];
    if (!roles.includes(role)) {
      return res.status(403).json({ error: "Acces refuse" });
    }
    next();
  };
}

// Utilisation
app.get("/admin", requireRole("admin"), (req, res) => {
  res.json({ message: "Bienvenue admin" });
});
Bonne pratique : Utilisez les groupes pour gerer les roles plutot que de les attribuer individuellement. Cela facilite la gestion a grande echelle.