Ludovic Frank - Développeur indépendant

Faire fonctionner "Sign in with Apple" avec Symfony

ionicons-v5-k Ludovic Frank 22 avr. 2021
1332 lectures Niveau : Expert

Ahhhh, les mots de passe … j’en ai déjà parlé dans un précédent article, mais dans celui-ci on va parler d’une méthode pour éviter à nos chers petits utilisateurs d’avoir à se rappeler de leurs mots de passe…

Apple permet maintenant de faire du « sign in with Apple », en gros la même chose que Google, Facebbok et tous les autres. Mais ! façon Apple…
Dans cet article, on va voir comment intégrer cette fonctionnalité à une application Symfony.

Il faut avoir un accès développeur Apple pour avoir accès à « sign in with Apple »

Pour commencer, il faudra vous délester de la somme de 99 euros afin d’avoir un compte Apple Développeur… Bah oui ! c’est Apple 😁.
Une fois que vous avez ce compte, vous pouvez suivre ce tutoriel afin de récupérer les identifiants et clefs nécessaires au fonctionnement) de « sign in with apple », le tuto est écrit pour une instance Discourse, mais vous pouvez le suivre pour uniquement générer les informations dont vous aurez besoin.

« Sign in with Apple » dans une application Symfony

Eh bien voilà, vous avez donc récupéré tous les identifiants et toutes les clefs pour connecter votre application web avec « Sign in With Apple », du coup comme un bon élève vous vous précipitez vers HWIOAuthBundle
Et le premier problème arrive, dans la doc du bundle vous voyez qu’il faut un « client_id » et un « client_secret » comme pour tous les autres fournisseurs OAuth, le client_id vous l’avez, mais pour le client secret on fait comment ?
En effet Apple ne fournit qu’une clef « EC » au format P8.

Le client_secret est un JsonWebToken.

Eh oui, en fait, votre client secret vous allez devoir le générer à l’aide de la clef fournie par Apple, pas d’inquiétude, c’est très simple. Mais ce token doit expirer au maximum dans 6 mois, ça veut dire qu’il faut le régénérer au moins une fois tous les 6 mois … pourquoi ne pas automatiser ça plutôt que de faire des copier-coller et perdre du temps pour ça ?

Pour le générer suivez simplement ce petit script Ruby, après avoir fait un petit « gem install jwt »

Remplacez en haut du fichier les informations par les vôtres puis placez votre clef privée (au format p8) dans le même dossier (de base dans le script il cherche key.txt, vous pouvez bien sûr changer cette variable)

Plus qu’à faire un petit « ruby apple-json-web-token.rb » et votre client_secret valable 6 mois apparaitront sous vos yeux.

Conclusion

Comme souvent Apple a sa manière de faire les choses, du coup prendre simplement HWIOAuthBundle ne suffit pas, après il est tout à fait possible de surcharger le RessourceOwner fourni par le bundle pour générer le JWT automatiquement. Mais pour ça, je vous laisse chercher
par vous-même.
Passez une très bonne semaine 😁