Marque et méthodes de connexion
Donnez à la page de connexion le nom, la couleur de marque et le logo auto-hébergé de votre tenant, et choisissez les méthodes de connexion proposées.
Chaque tenant habille sa propre expérience de connexion : nom de l'organisation, couleur de marque et logo, plus les méthodes de connexion que la page propose. La marque s'édite dans la console (paramètres de l'organisation, avec un aperçu en direct de la page de connexion) ou par l'API avec la permission tenant:manage. Elle s'applique sur accounts.obexal.com et, à l'identique, sur votre domaine personnalisé.
Nom et couleur de marque
Le nom du tenant et le blob de marque se mettent à jour avec PATCH /v1/admin/tenant. La couleur de marque vit sous la clé branding.primary (un code hexadécimal) et teinte les boutons et accents de la page de connexion :
curl -X PATCH https://accounts.obexal.com/v1/admin/tenant \
-H "Authorization: Bearer $OBX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Acme SAS","branding":{"primary":"#0e7490"}}'
# 200 {"tenant":{"id":"...","name":"Acme SAS","slug":"acme","branding":{"primary":"#0e7490"},...}}La console affiche un aperçu en direct de la page de connexion pendant que vous éditez la couleur, avant l'enregistrement.
Le logo, auto-hébergé
Le logo se téléverse directement sur la plateforme (stockage objet auto-hébergé, aucun CDN tiers dans le chemin de connexion). Envoyez les octets bruts de l'image :
curl -X PUT https://accounts.obexal.com/v1/admin/tenant/logo \
-H "Authorization: Bearer $OBX_TOKEN" \
--data-binary @logo.png
# 200 {"tenant":{...,"branding":{...,"logoUrl":"https://accounts.obexal.com/v1/tenants/acme/logo?v=..."},...}}Les contraintes sont strictes, et volontaires :
| Règle | Pourquoi |
|---|---|
| PNG, JPEG ou WebP uniquement | Le format est détecté depuis les octets, jamais depuis votre en-tête Content-Type |
| 512 Ko maximum | Au-delà, l'envoi est rejeté avec 413 |
| 2000 px maximum par côté (PNG/JPEG) | Garde-fou contre les bombes de décompression |
| SVG refusé | Un SVG peut embarquer du script : une surface XSS s'il est servi depuis l'origine de la plateforme |
| Un seul fichier par tenant | Un nouvel envoi remplace le logo précédent, en place |
En cas de succès, branding.logoUrl reçoit une URL versionnée (?v=<etag>) : les caches navigateur et proxy prennent le nouveau logo immédiatement. Le logo est servi publiquement sur GET /v1/tenants/{slug}/logo avec un cache long. DELETE /v1/admin/tenant/logo supprime le fichier et efface branding.logoUrl.
S'il vous faut un logo vectoriel, hébergez le SVG sur votre propre domaine et référencez-le depuis votre site ; le logo de la page de connexion, lui, est raster uniquement.
Méthodes de connexion par tenant
Deux drapeaux du blob de marque pilotent ce que la page de connexion propose. Les deux sont désactivés par défaut :
| Clé | Effet quand true |
|---|---|
branding.allowSelfSignup | Affiche le lien de création de compte ; sinon l'annuaire fonctionne sur invitation |
branding.allowPasswordless | Affiche la connexion sans mot de passe (code par e-mail ou lien magique) |
curl -X PATCH https://accounts.obexal.com/v1/admin/tenant \
-H "Authorization: Bearer $OBX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"branding":{"primary":"#0e7490","allowPasswordless":true}}'Ce qui est publié, et ce qui reste fixe
La page de connexion lit votre marque sur un endpoint public, par slug ou par domaine personnalisé vérifié :
curl https://accounts.obexal.com/v1/tenants/acme/branding
# {"name":"Acme SAS","slug":"acme","branding":{"primary":"#0e7490","logoUrl":"..."},
# "allowSignup":false,"allowPasswordless":true}Deux limites, en toute honnêteté :
- Allowlist de sortie : seules les clés de thème connues (
primary,primaryHover,primaryFg,bg,surface,fg,muted,border,danger,radius,logoUrl) sont publiées. Tout ce que vous rangez d'autre dans le blob de marque reste privé. - Les couleurs de sécurité restent fixes : la couleur de marque teinte les boutons et accents, mais les couleurs sémantiques des états de sécurité (indicateurs de succès et d'alerte) sont fixées par la plateforme et ne se rhabillent pas. Une alerte doit ressembler à une alerte chez tous les tenants.