Authentification unique (OpenID Connect)

HouseCairn authentifie les personnes auprès de n’importe quel fournisseur OpenID Connect ; aucun n’est nommé dans le code. L’authentification unique reste désactivée tant que OIDC_SERVER_URL n’est pas définie (ADR 0007).

  1. Chez le fournisseur, créez un client (une application) de type web, avec le flux par code d’autorisation et cette URI de redirection, pour une instance à l’adresse housecairn.example.com :

    https://housecairn.example.com/accounts/oidc/oidc/login/callback/
    

    Le second oidc est OIDC_PROVIDER_ID, oidc par défaut.

  2. Dans deploy/production.env :

    OIDC_SERVER_URL=https://id.example.com
    OIDC_CLIENT_ID=housecairn
    OIDC_CLIENT_SECRET=<secret given by the provider>
    HOUSECAIRN_BOOTSTRAP_ADMIN_EMAIL=admin@example.com
    

    OIDC_SERVER_URL est l’émetteur (issuer) : HouseCairn lit /.well-known/openid-configuration sous cette adresse. OIDC_PROVIDER_NAME est le nom du fournisseur, par exemple Company SSO (Single sign-on par défaut) ; la page de connexion affiche un bouton par fournisseur, sous le formulaire, libellé « Continuer avec » suivi de ce nom. Un clic dessus mène directement au fournisseur, sans page de confirmation intermédiaire.

  3. Redémarrez le conteneur, puis connectez-vous aussitôt avec l’adresse définie dans HOUSECAIRN_BOOTSTRAP_ADMIN_EMAIL, que le fournisseur doit avoir vérifiée.

Qui obtient un compte

  • Première connexion d’une nouvelle instance : tant que l’instance n’a jamais eu de compte, la première identité qui se connecte en devient l’administratrice ; avec HOUSECAIRN_BOOTSTRAP_ADMIN_EMAIL, seule cette adresse vérifiée le peut.

  • Ensuite, avec HOUSECAIRN_OIDC_SIGNUP=closed (le défaut), une identité sans compte est refusée, avec une page qui invite à contacter l’administrateur. Avec open, toute personne que le fournisseur accepte obtient un compte, sans droits d’administration.

  • Adresses invitées : une identité dont l’adresse a une invitation en attente pour un logement obtient un compte, sans droit d’administration, si le fournisseur atteste que l’adresse est vérifiée (email_verified vaut true).

  • Un compte local existant n’est jamais repris par une identité qui en partage seulement l’adresse : connectez-vous avec le compte local, puis liez l’identité depuis les pages du compte.

Exiger l’authentification unique pour un logement

Seul l’administrateur de l’instance déclare les fournisseurs, par les variables ci-dessus. L’authentification unique n’est jamais exigée pour toute l’instance : la connexion intégrée (mot de passe, passkey, deuxième facteur) reste le défaut.

Un propriétaire peut exiger que les membres d’un logement se connectent par un fournisseur déclaré, depuis Foyer et rôles. La règle est contrôlée à chaque ouverture du logement, par le web comme par l’API :

  • une session connectée par mot de passe ou passkey voit le logement dans sa liste, signalé, et obtient une page qui propose de continuer avec le fournisseur ;

  • l’API répond 403 avec "code": "sso_required" et l’identifiant du fournisseur ;

  • les jetons d’API n’ouvrent jamais un tel logement : un jeton n’est pas une connexion par le fournisseur.

Un membre dont le compte n’est pas encore lié au fournisseur le lie depuis les pages du compte, une fois connecté, puis se connecte par le fournisseur. Si un fournisseur est retiré de l’instance, les logements qui l’exigent restent verrouillés jusqu’à la levée de la règle. Un propriétaire ouvre la page verrouillée et choisit Retirer l’exigence de connexion (proposé seulement quand le fournisseur n’est plus déclaré) ; ou l’administrateur utilise Retirer ces exigences sur la page de l’instance, qui les efface toutes sans montrer aucun logement. Quitter un logement verrouillé n’exige jamais le fournisseur.