Cet article a été mis à jour (11.05.2017) pour refléter les modifications de l'API d'Auth0. La sécurisation des applications d'une page (SPAS) peut être difficile. Les spas consistent souvent en une extrémité frontale distincte (par exemple, AngularJS) et une API de données back-end. L'authentification basée sur la session traditionnelle ne convient pas à cette architecture car elle introduit l'état de l'API, violant les principes de repos et entravant l'intégration des applications mobiles.
Avantages clés de cette approche:
Tokens Web JSON (JWTS): une solution apatride
JWTS surmonte les limites de l'authentification basée sur la session. Cette norme ouverte authentifie les demandes de l'ANGularJS Front-end à l'API back-end. Surtout, les JWT contiennent une charge utile JSON avec des réclamations personnalisées, signée numériquement pour le sabotage.
Implémentation d'authentification AngularJS
Les JWT sont idéaux pour l'authentification AngularJS. Les points de terminaison API sécurisés sont accessibles en stockant le JWT de l'utilisateur dans le stockage local et en l'incluant dans l'en-tête d'autorisation des demandes HTTP. Les JWT invalides ou manquants entraînent un refus d'accès.Au-delà de l'authentification de base, une implémentation AngularJS robuste nécessite:
(image: tableau de bord AUTH0)
Auth0 Configuration
yourcompany.auth0.com
). Cela ne peut pas être modifié plus tard. http://localhost:8080
pour ce tutoriel). Installation et configuration
Installez les packages nécessaires (en utilisant bower install
si vous avez fourré le repo github):
npm install -g http-server
Démarrez le serveur à l'aide de http-server
. Configurez app.js
et index.html
pour intégrer Auth0. Remplacez les valeurs d'espace réservé par vos informations d'identification AUTH0:
// app.js (snippet) angularAuth0Provider.init({ clientID: AUTH0_CLIENT_ID, domain: AUTH0_DOMAIN, responseType: 'token id_token', redirectUri: AUTH0_CALLBACK_URL, audience: AUTH0_API_AUDIENCE, });
le fichier app.run.js
gère le hachage après l'authentification:
// app.run.js (snippet) authService.handleParseHash();
(Image: page de connexion angularjs)
(Image: AngularJS connecté à l'état)
(Image: AngularJS Logout State)
Création de page d'accueil
Le fichier home.html
fournit une interface utilisateur simple avec des boutons de connexion / déconnexion et des boutons d'appel API. Le fichier gère les appels d'API à l'aide de home.controller.js
: $http
// home.controller.js (snippet) vm.getSecretMessage = function() { $http.get('http://localhost:3001/api/private', { headers: { Authorization: 'Bearer ' + localStorage.getItem('access_token') } }) .then(...) .catch(...); };
Service d'authentification () auth.service.js
// auth.service.js (snippet) function authService($state, angularAuth0, authManager) { // ... login, handleParseHash, logout, isAuthenticated functions ... }
Création de serveur Nodejs
Créez un serveur Nodejs à l'aide d'express,, express-jwt
et jwks-rsa
: cors
// server/server.js (snippet) var authCheck = jwt({ secret: jwks.expressJwtSecret({ jwksUri: "https://{YOUR-AUTH0-DOMAIN}.auth0.com/.well-known/jwks.json" }), audience: '{YOUR-AUTH0-API-AUDIENCE}', issuer: "https://{YOUR-AUTH0-DOMAIN}.auth0.com/", algorithms: ['RS256'] }); app.get('/api/private', authCheck, function(req, res) { ... });
. L'application AngularJS peut désormais faire des demandes au point de terminaison de l'API protégé. node server.js
Considérations supplémentaires et FAQ
L'article se termine par une section sur des fonctionnalités AUTH0 supplémentaires (SSO, Loginless sans mot de passe, MFA) et d'autres backends pris en charge et SDK mobile. Une section FAQ complète aborde les questions courantes concernant la connexion sociale, la gestion des sessions, la sécurité des itinéraires, le rafraîchissement des jetons, la gestion des erreurs, la personnalisation, l'authentification multi-facteurs, les crochets, les tests et le débogage. N'oubliez pas de remplacer les espaces réservés comme {YOUR-AUTH0-DOMAIN}
et {YOUR-AUTH0-API-AUDIENCE}
par vos valeurs AUTH0 réelles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!