Passer au contenu principal

Halo

Halo est une plateforme auto-hébergée de sites web et de blogs. Son plugin OAuth2 ajoute la connexion avec GitHub, GitLab, Gitee et un fournisseur personnalisé appelé SSO. Avec Casdoor comme fournisseur SSO, les utilisateurs se connectent à Halo avec leur compte Casdoor.

Créer l'application dans Casdoor​

  1. Dans la console d'administration de Casdoor, ouvrez l'organisation de vos utilisateurs et ajoutez une application, ou ouvrez-en une existante.

  2. Ajoutez le callback du fournisseur SSO aux Redirect URLs :

    https://halo.example.com/login/oauth2/code/sso

    Utilisez l'URL publique de Halo, sans /console. La dernière partie, sso, est l'ID fixe du fournisseur personnalisé.

  3. Sur l'onglet OIDC/OAuth, définissez Token format sur JWT-Standard. Halo récupère alors le nom d'utilisateur à partir de preferred_username et le nom d'affichage à partir de name. Avec le format par défaut JWT, le champ name du jeton d'identification est le nom d'utilisateur, il devient donc aussi le nom d'affichage.

  4. Enregistrez, et notez le Client ID et le Client secret.

Installer le plugin OAuth2​

  1. Dans la console Halo, installez OAuth2 认证 depuis l'app store, ou téléchargez le JAR depuis les versions de plugin-oauth2 et téléversez-le dans la gestion des plugins. Utilisez la version 1.7.1 ou ultérieure du plugin, qui nécessite Halo 2.20.0 ou ultérieur.
  2. Activez le plugin.

Configurer le fournisseur SSO​

  1. Dans la console Halo, allez dans 用户 (Users) et cliquez sur 身份认证 (Authentication) en haut à droite. Les versions antérieures appellent ce bouton 认证方式.

  2. Ouvrez SSO et remplissez 自定义单点登录 OAuth 配置 :

    FieldValue
    Client ID<your-client-id>
    Client Secret<your-client-secret>
    Authorization Urlhttps://door.example.com/login/oauth/authorize
    Token Urlhttps://door.example.com/api/login/oauth/access_token
    UserInfo Urlhttps://door.example.com/api/userinfo
    Scopesopenid profile email
    UserName Attributesub
    Issuer URIhttps://door.example.com
    JWK Set URIhttps://door.example.com/.well-known/jwks
    • <your-client-id>, <your-client-secret> : Les valeurs provenant de l'application Casdoor.
    • Scopes : Avec openid, le plugin connecte les utilisateurs via OpenID Connect et vérifie le jeton d'identification. Il a ensuite besoin de Issuer URI et JWK Set URI.
    • UserName Attribute : La revendication qui lie le compte Halo à l'utilisateur Casdoor. sub est l'ID utilisateur Casdoor, qui ne change pas lorsque l'utilisateur est renommé.
    • Issuer URI : Doit être exactement l'issuer affiché sur https://door.example.com/.well-known/openid-configuration.
  3. Enregistrez, et activez le fournisseur SSO.

Le plugin envoie le client secret avec une authentification HTTP Basic, que Casdoor accepte.

Permettre l'inscription des nouveaux utilisateurs​

Ce qui se passe lors de la première connexion dépend de la version de Halo :

  • Halo 2.26.0 et ultérieur demande à l'utilisateur de lier un compte Halo existant ou d'en enregistrer un nouveau. L'enregistrement nécessite que 开放注册 (open registration) soit activé et qu'un 默认角色 (default role) soit défini dans les paramètres utilisateur de Halo. Halo récupère le nom d'utilisateur à partir de preferred_username, en minuscules. S'il est inférieur à 4 caractères ou sinon non valide comme nom d'utilisateur Halo, Halo utilise un nom aléatoire commençant par user- à la place.
  • Les versions antérieures ne connectent que les utilisateurs ayant lié Casdoor à leur compte Halo. Un utilisateur se connecte à Halo avec un mot de passe et lie SSO dans les paramètres d'authentification de son profil.

Vérifier le résultat​

  1. Ouvrez https://halo.example.com/login dans une fenêtre de navigation privée. La page de connexion affiche un bouton pour le fournisseur SSO.
  2. Cliquez dessus et connectez-vous à Casdoor. Halo connecte l'utilisateur, ou sur Halo 2.26.0 et ultérieur, demande à un nouvel utilisateur de lier ou d'enregistrer un compte.

Dépannage​

SymptomCause and fix
Halo returns to /login?oauth2_errorHalo shows no reason on the page. Look for Failed to authentication with OAuth2 in the Halo log, which names the cause.
The log shows missing_signature_verifierScopes contains openid, but JWK Set URI is empty. Fill it in.
Saving fails with scope contains invalid charactersPlugin versions before 1.7.1 accept only one scope. Upgrade the plugin.
Casdoor shows Redirect URI: ... doesn't exist in the allowed Redirect URI listHalo builds the callback from halo.external-url. Set it to the public URL of Halo, and add the URL from the error to Redirect URLs.
Sign-in fails with an issuer errorIssuer URI differs from the issuer in Casdoor's discovery document. Set origin in Casdoor's conf/app.conf to its public URL and use the same value.
A new user sees that registration is closedTurn on 开放注册 and set 默认角色 in Halo, or have the user bind an existing account.

Voir aussi​