Se connecter avec Apple

J’ai essayé de mettre à jour notre fork du plugin pour utiliser la dernière version d’omniauth-apple. (Notez que d’autres modifications sont nécessaires, pas seulement une mise à jour du numéro de version).

tl;dr : ça ne fonctionne toujours pas

J’ai réussi à le faire fonctionner sur mon bac à sable, mais il reste plusieurs problèmes :

  1. Apple utilise une requête POST sur le callback. Ce n’est pas courant dans les implémentations OAuth car cela signifie que les cookies samesite=Lax ne seront pas envoyés avec la requête. Cela empêche Discourse de lire les cookies de session pendant le callback, ce qui déclenche une erreur CSRF.

    Le contournement NON SÉCURISÉ consiste à désactiver cette sécurité en changeant les cookies de Discourse pour samesite=None.

  2. L’utilisation d’une requête POST sans jeton CSRF déclenche également une autre mesure de sécurité dans le cœur du système.

    Le contournement NON SÉCURISÉ consiste à supprimer cette ligne.

  3. Je recevais une erreur 403 de la part d’Apple lorsque le gem omniauth récupérait les JWKs. Je soupçonne que l’en-tête Accept: n’est pas défini correctement, mais je ne l’ai pas vérifié.

    Le contournement NON SÉCURISÉ consistait à coder les clés en dur.

Après tout cela, j’ai enfin réussi à me connecter avec Apple. Vous pouvez l’essayer sur https://sandbox.dtaylor.uk (je le laisserai fonctionner pendant quelques jours, mais veuillez ne rien entrer de sensible car c’est NON SÉCURISÉ).

Et ensuite… les adresses e-mail et les noms ne sont toujours inclus que lors de la première authentification. Vous pouvez essayer cela : connectez-vous avec Apple, annulez la création du compte, puis réessayez. La deuxième tentative sera sans vos informations.

Donc, en supposant qu’Apple ne changera rien de sitôt… comment pourrions-nous faire fonctionner cela ?

Pour (1) et (2), je pense que nous pourrions convertir le POST d’Apple en GET sans nuire à la sécurité. Lorsque nous recevons un POST sur le callback, nous rendons du JavaScript qui définit window.location='/auth/apple/callback?code=...&state=.... À partir de là, cela fonctionnerait comme n’importe quel autre fournisseur. Cependant, je pense qu’intercepter le POST nécessiterait des modifications de l’API principale.

Pour (3), je pense que cela pourrait probablement être corrigé avec un peu de travail dans le gem omniauth.

Mais nous sommes toujours bloqués sans nom/e-mail, donc je ne suis pas sûr que cela vaille la peine de résoudre ces autres problèmes :cry:

8 « J'aime »