Récupération et envoi du token avec Vapor

Bonjour,

J’ai suivi avec attention le cours de Maxime sur Vapor et notamment la partie sensible de l’authentification avec Token.
J’ai réalisé un petit webservice qui semble fonctionnel.
Là ou je galère, c’est du coté App iOS . J’ai créé une fonction pour envoyer à Vapor (et Fluent) un nouvel utilisateur (avec nom, email et password).

J’arrive à vérifier avec Paw que la création se fait bien, donc jusque là tout va bien…

Là ou je galère depuis plusieurs jours, c’est pour comprendre:
1- comment je récupère le token généré dans Vapor lors de la création de l’utilisateur ?
2- où je l’enregistre dans mon App iOS ?
3- comment je le fais parvenir à mon webservice (à l’aide d’une fonction « login » par exemple) lors dune nouvelle connexion de l’utilisateur ?

Si quelqu’un peut m’éclairer sur ces questions plutôt axées frontend pour le coup.

En vous remerciant par avance,

Benoît

Bonjour,
Tu devrais utiliser au maximum PAW pour bien comprendre les HTTP request et HTTP response.
Et cela pour la partie login, ou bien envoi du Token, récupération du Token.
Une fois que tu arrives à faire tout cela, tu peux plus facilement jouer avec dans ton appli.
Cela dépend comment tu as programmé ton webservice. Par exemple, une fois que tu as réussi le login, ton webservice peut te renvoyer le Token généré. Pour le stockage, si dans ton Appli tu as aucune BDD, tu peux le mettre dans tes Userdefaults. ce n’est pas très Secure mais te permet d’avancer.
L’intérêt du Token c’est de ne pas d’embêter avec le login. Mais il faut que tu aies cette logique là côté backend. user+token valid et tu acceptes et établit le dialogue.
Voilà, j’espère que cela va t’aider un peu

1 « J'aime »

Bonjour @sylvain,

Merci de ta réponse. Cela reste encore un peu flou pour moi, mais je vais continuer mes recherches et expérimentations.
Concernant la sauvegarde du Token, je pensais bien le stocker dans mes Userdefaults, mais tu dis que ce n’est pas très secure. Tu crées donc une base de données style core data ou Realm pour stocker les Tokens ?
Merci pour ton aide.

Je disais cela si tu fais une application commerciale. Si c’est en perso tu t’en fiches. Ne va pas créer un realm esprès si tu n’as pas le besoin. Le pas Secure c’est théorique. C’est si l’iPhone SE faisait pirater. ou alors, tu peux le crypter / décrypter aussi.

@sylvain,

Ok merci pour tes conseils avisés.

Pour plus d’information, vous pouvez vous rendre ici :

Et voici un petit schéma qui montre comment fonctionne l’attribution de ce token.

Merci @ThonyF,

Je vais regarder tout ça. Cependant j’aurais aimé rester dans la logique de ce que propose Maxime dans son cours sur Vapor.

Merci.

@Behache Le schéma montre bien la logique que Maxime utilise. Le client s’authentifie avec un login et mot de passe une première fois.

Il reçoit un code garantissant ça bonne authentification et renvoi le code au même serveur pour qui lui fournit un jeton.

Et seulement à partir de là, il peut utiliser le jeton pour récupérer des ressources.

Mais, si tu lis l’article de Wikipédia, tu comprendras mieux comment ça fonctionne.

Après comme dit, ça permet de sécuriser les identifiants du client en ne les envoyant pas à chaque requête sur le réseau et ainsi éviter une interception par une tierce personne.

Par contre, c’est bien à toi de sécuriser ce jeton, sauvegardé en local sur ton téléphone en le chiffrant.

Merci @ThonyF d’avoir pris le temps de fournir des explications plus précises.

Je crois que j’ai réussi à me débrouiller. J’arrive maintenant à récupérer le jeton et le renvoyer pour accéder à mes ressources sur le serveur.

Dernière question peut-être : comment est-ce que tu chiffres le token ?

Encore merci pour tes précieuses indications.

Pour chiffrer les données en Swift tu peux utiliser cette librairie :

Pour stocker ton token côté client, tu devrais utiliser le trousseaux sécurisé du système. C’est une vieille API en C… mais heureusement il existe des wrapper en swift et je crois que je l’avais montré dans l’ancien cours de Swift.
Par exemple tu as KeychainAccess qui est très simple à utiliser et te permettra de stocker le token en toute sécurité.

@ThonyF : si tu utilises de la crypto manuellement, j’ai peur que tu sortes du cadre legal des exception US concernant le chiffrement. Tu devras donc déclarer aux douanes US ce que tu fais comme chiffrement dans ton app.

@mbritto effectivement, j’ai oublié de préciser qu’il faut respecter la législation en vigueur aux USA, mais aussi dans le ou les pays ou vous distribuer votre application.

Et oui, le chiffrage étant considéré comme une arme de guerre, celle-ci est réglementée.

D’ailleurs, Apple le précise pour les USA ici :

https://developer.apple.com/documentation/security/complying_with_encryption_export_regulations

J’ai aussi trouvé des frameworks qui peuvent être intéressants dans mes recherches.

https://developer.apple.com/documentation/cryptokit

https://developer.apple.com/documentation/cryptotokenkit

Bonjour,

Merci à vous, je vais regarder ça de près.