Tout d'abord, je ne suis pas un pro.
Dans ma quête pour devenir un meilleur développeur, j'essaie de comprendre ce qui est nécessaire et comment réaliser la création d'une inscription/connexion pour une application Ionic-Framework.
La plupart des applications à page unique (SPA) gèrent l'authentification sur un serveur de noeud qui sert également le code HTML pour le client. Dans mon cas, le téléphone lui-même servira le HTML, donc je suppose que je vais peut-être rencontrer des problèmes de COR.
Je comprends que le Ionic-Framework utilise des états et basé sur angular-client-side-auth repo Je devrais m'authentifier chaque fois que je change d'état dans mon application.
J'ai une configuration initiale de l'application, mais maintenant je ne sais pas où aller à partir d'ici.
Les outils dont je dispose:
Mes questions:
Merci de m'avoir aidé à devenir un meilleur développeur.
OK, il y a beaucoup à répondre. Mais la réponse courte est de garder les choses simples et de s'authentifier comme vous le feriez avec une application Web classique.
Dans une application Web classique:
Dans une application mobile:
Quelle est l'approche standard?
Dois-je utiliser Node.JS comme proxy de la base de données?
Suis-je en train de faire tout ça dans le mauvais sens?
Quels sont mes barrages routiers potentiels?
Comment CORS fonctionne-t-il avec les applications hybrides?
Tout ce qui me manque?
IonicFramework est juste un framework HTML5 frontal. À lui seul, il ne peut pas faire de vous une application mobile, il vous donnera simplement une belle interface utilisateur avec laquelle travailler. IonicFramework vous fournit quelques Nice fonctionnalités javascript qu'il implémente en utilisant angulaire. Ainsi, pour tirer le meilleur parti de ionic vous devez être compétent avec angularJs. Apprendre angular vaut bien l'effort alors allez-y.
L'application réelle est compilée par Cordova. Cordova prend vos fichiers html/css/javascript habituels et les regroupe dans le Android apk ou iphone ipa afin qu'ils puissent être installés sur le système d'exploitation respectif en tant qu'applications natives.
Cordova est ce qui vous permettra d'accéder aux fonctionnalités natives du téléphone comme l'appareil photo, la galerie, les contacts, etc.
Authentification basée sur les jetons: je crois que c'est une alternative. C'est un moyen plus propre et plus sûr de gérer l'authentification qui est désormais facilement disponible.
Pour plus d'informations, consultez les liens suivants:
Quels sont les avantages de l'utilisation d'une approche basée sur des jetons?
Cross-domain/CORS: les cookies + CORS ne fonctionnent pas bien sur différents domaines. Une approche basée sur des jetons vous permet de faire des appels AJAX vers n'importe quel serveur, sur n'importe quel domaine car vous utilisez un en-tête HTTP pour transmettre les informations utilisateur. Sans état (alias évolutivité côté serveur): il n'y a pas besoin de conserver un magasin de session, le jeton est une entité autonome qui transmet toutes les informations utilisateur. Le reste de l'état vit dans des cookies ou du stockage local côté client.
CDN: vous pouvez servir tous les actifs de votre application à partir d'un CDN (par exemple javascript, HTML, images, etc.), et votre côté serveur est juste l'API. Découplage: vous n'êtes pas lié à un schéma d'authentification particulier. Le jeton peut être généré n'importe où, donc votre API peut être appelée de n'importe où avec une seule façon d'authentifier ces appels.
Mobile ready: lorsque vous commencez à travailler sur une plateforme native (iOS, Android, Windows 8, etc.), les cookies ne sont pas idéaux lors de la consommation d'une API sécurisée ( vous devez gérer les conteneurs de cookies). L'adoption d'une approche basée sur des jetons simplifie beaucoup cela. CSRF: puisque vous ne comptez pas sur les cookies, vous n'avez pas besoin de vous protéger contre les demandes intersites (par exemple, il ne serait pas possible d'accéder à votre site, de générer une demande POST et de réutiliser le cookie d'authentification existant car il n'y en aura pas).
Performances: nous ne présentons aucun benchmark de performance dur ici, mais un aller-retour réseau (par exemple trouver une session sur une base de données) prendra probablement plus de temps que de calculer un HMACSHA256 pour valider un jeton et analyser son contenu.
La page de connexion n'est pas un cas particulier: Si vous utilisez Protractor pour écrire vos tests fonctionnels, vous n'avez pas besoin de gérer de cas particulier pour la connexion. Basé sur des normes: votre API pourrait accepter un jeton Web JSON standard (JWT). Il s'agit d'un standard et il existe plusieurs bibliothèques backend (.NET, Ruby, Java, Python, PHP) et des entreprises qui soutiennent leur infrastructure (par exemple Firebase, Google, Microsoft). À titre d'exemple, Firebase permet à leurs clients d'utiliser n'importe quel mécanisme d'authentification, tant que vous générez un JWT avec certaines propriétés prédéfinies et signé avec le secret partagé pour appeler leur API.
nathvarun a donné une réponse très complète, mais je voudrais partager les étapes que je fais pour l'authentification dans mon application.
email
+ password
via ajax au serveurtoken
sur le serveur et renvoyez-le à l'applicationemail
+ token
dans localStorage
email
+ token
via POST
true
la méthode est exécutée, si false
je renvoie à l'application une erreur (401)Une bonne chose est que lorsque l'application est ouverte, vous pouvez obtenir le email
+ token
de localStorage
, envoyer au serveur, si ce jeton est correct pour cet utilisateur, redirigez à l'écran principal, sinon redirigez vers la connexion. Ensuite, chaque fois que l'utilisateur vide le cache de l'application, il est redirigé vers l'écran de connexion.
En fait, j'avais besoin de quelque chose comme ça pour quelques applications sur lesquelles je travaille. J'ai passé pas mal de temps à enquêter sur cela et j'ai pu y parvenir.
Je suis assez satisfait du résultat, en plus de l'authentification par e-mail/mot de passe, j'ai ajouté une authentification sociale qui fonctionne de la même manière.
Téléchargez le apk et testez-le.
Si c'est ce que vous recherchez, vous pouvez vérifier le code côté client à l'adresse: https://github.com/malikov/Authenticate.me-client-cordova-ionic
Et le code côté serveur à: https://github.com/malikov/Authenticate.me-Node-Server