Concepts
Quelques idées expliquent presque tout dans Usher : où se trouvent les choses, qui émet les jetons, où les utilisateurs se connectent, et combien de temps dure chaque jeton.
Espaces de travail, projets et environnements
- Un espace de travail représente votre équipe ou votre entreprise dans Usher Console. Ses membres et son journal d’audit lui appartiennent.
- Un projet correspond à un produit : votre app Web ou un portail partenaires. Un espace de travail peut en contenir plusieurs.
- Un environnement est une instance en service d’un projet, généralement développement et production. C’est dans les environnements que se trouvent les utilisateurs, les applications, les clés et les paramètres.
Espace de travail · Acme inc.
Projet · Web
- development · wise-otter-42
- production · acme
Projet · Portail partenaires
- development · calm-heron-17
- production · acme-partners
Les environnements ne partagent rien d’important. Chacun a son propre schéma Postgres, ses propres clés de signature et ses propres secrets, scellés sous sa propre clé de données. Une personne qui s’inscrit en développement n’existe pas en production, et un jeton de l’un ne peut jamais être vérifié avec les clés de l’autre.
Un administrateur de l’espace de travail peut supprimer un projet depuis le bas de sa Vue d’ensemble, après avoir saisi son nom. Tous ses environnements disparaissent d’un coup : leurs utilisateurs, applications, clés et paramètres, et chaque session et chaque jeton qu’ils ont émis. Leurs adresses cessent de répondre et ne sont jamais réattribuées : une app qui fait encore confiance à l’une d’elles ne peut donc pas être trompée par le projet de quelqu’un d’autre.
Émetteurs
Chaque environnement est son propre émetteur OpenID Connect, sur son propre hôte du domaine des locataires :
https://<handle>.usherid.com- Les environnements de production ont un identifiant que vous choisissez : de 3 à 32 lettres minuscules, chiffres et traits d’union non consécutifs, comme le nom de votre entreprise. Un identifiant déjà utilisé n’est jamais réattribué.
- Les environnements de développement reçoivent un identifiant aléatoire, comme
wise-otter-42, que personne ne prendra pour une marque.
L’émetteur est fixé à la création de l’environnement, car chaque jeton qu’il signe le nomme dans iss, et chaque app qui lui fait confiance vérifie cette valeur.
Le domaine des locataires est un domaine enregistrable différent de celui d’Usher (usheridentity.com) : les pages de connexion d’un client ne sont donc jamais sur le même site qu’Usher Console, et les cookies sont limités à leur hôte. Un navigateur n’envoie les cookies d’un environnement qu’à cet environnement.
Le Lobby
Le Lobby est la page de connexion que chaque environnement héberge sur son émetteur. Votre app y envoie les utilisateurs; il les connecte et les renvoie vers elle.
- Il nomme toujours l’app vers laquelle va la personne, dans la puce « En route vers ».
- Il ne propose que les méthodes que l’environnement autorise : clés d’accès, codes par courriel, liens magiques, comptes sociaux (Google, GitHub, Microsoft, Apple) et mots de passe.
- Il peut exiger un second facteur : une app d’authentification (avec codes de secours) ou une clé d’accès.
- Il peut être ouvert à tous, ou limité à une liste d’invités composée d’adresses et de domaines.
Il a le même aspect quel que soit le produit qui envoie la personne. C’est voulu : les utilisateurs apprennent à quoi ressemble un vrai Lobby, et remarquent quand une page n’en est pas un.
Comptes Usher
La plupart des environnements ont leurs propres utilisateurs. Les comptes Usher sont différents : un seul compte qui connecte une personne à toutes les apps qui proposent Continuer avec Usher. Chacun gère le sien sur account.usheridentity.com.
Jetons et durées de vie
| Jeton | Par défaut | Réglable | À quoi il sert |
|---|---|---|---|
| Code d’autorisation | 5 minutes | Fixe | Échangé une fois contre des jetons. À usage unique. |
| Jeton d’ID | 10 minutes | De 1 à 60 minutes | Indique à votre app qui s’est connecté. Pas pour appeler des API. |
| Jeton d’accès | 10 minutes | De 1 à 60 minutes | Envoyé à votre API, qui le vérifie. |
| Jeton d’actualisation | 30 jours | De 1 à 90 jours | Permet d’obtenir de nouveaux jetons d’accès. Renouvelé à chaque utilisation. Nécessite offline_access. |
| Jeton d’accès machine | 15 minutes | De 1 à 60 minutes | Pour client_credentials : des serveurs sans personne derrière. |
| Code par courriel, lien magique | 10 minutes | Fixe | Une seule connexion. Un code autorise trois essais. |
Les sessions du Lobby ont elles aussi une durée de vie : une session prend fin après 7 jours sans utilisation (de 1 à 30), et après 30 jours au total (de 1 à 90). Modifier une information sensible, comme une adresse courriel, nécessite une connexion datant de moins de 10 minutes.
Clés de signature
Les jetons sont signés avec RS256 par défaut; un environnement peut utiliser ES256 ou EdDSA à la place. Les clés publiques sont publiées au jwks_uri de l’environnement : vos bibliothèques les récupèrent, et prennent en compte les nouvelles lors de la rotation des clés.
Portées
| Portée | Ce que reçoit votre app |
|---|---|
openid | Obligatoire. Un jeton d’ID avec le sub de la personne. |
profile | Son nom et sa photo. |
email | Son adresse courriel, et si elle est vérifiée. |
offline_access | Un jeton d’actualisation, pour qu’elle reste connectée. |