Maison > interface Web > js tutoriel > Validation, authentification et autorisation

Validation, authentification et autorisation

Linda Hamilton
Libérer: 2025-01-17 02:35:11
original
748 Les gens l'ont consulté

Validation, Authentication and Authorization

Aperçu du contenu

Cet article développe un didacticiel précédent couvrant la création de base d'API CRUD avec Express.js, en se concentrant sur les aspects de sécurité cruciaux : validation, authentification et autorisation. Nous nous appuierons sur l'exemple précédent, il est donc recommandé de se familiariser avec ce matériel. Le projet complet est disponible sur GitHub (lien fourni ci-dessous).

Concepts clés

  • Validation : Garantir que les données fournies par l'utilisateur sont conformes aux règles et normes prédéfinies. Ceci est primordial pour la sécurité, car il évite les vulnérabilités telles que l’injection SQL. Plusieurs ressources soulignent l'importance d'une validation robuste (liens fournis ci-dessous).

  • Authentification : Vérification de l'identité d'un utilisateur. Cela implique généralement de vérifier les informations d'identification (par exemple, nom d'utilisateur/e-mail et mot de passe) par rapport aux enregistrements stockés.

  • Autorisation : Déterminer les actions qu'un utilisateur est autorisé à effectuer. Cela contrôle l'accès aux ressources en fonction des rôles et des autorisations des utilisateurs.

Mise en œuvre de la validation

Nous allons créer des fonctions de validation pour les champs name, amount et date :

  • name : Chaîne, non vide, 10 à 255 caractères.
  • amount : Nombre ou chaîne numérique, positif, non vide.
  • date : Chaîne, facultatif (par défaut, la date actuelle si elle est omise), format AAAA-MM-JJ.

Ces fonctions (situées dans validations.js) utilisent la vérification de type et la validation de format de base. Une validation plus complète (par exemple, des vérifications de plages de dates) pourrait être ajoutée.

<code class="language-javascript">// validations.js (excerpt)
const isString = (arg) => typeof arg === "string";
const isNumber = (arg) => !isNaN(Number(arg));

function isValidName(name) { /* ... */ }
function isValidAmount(amount) { /* ... */ }
function isValidDate(date) { /* ... */ }

module.exports = { isValidName, isValidAmount, isValidDate };</code>
Copier après la connexion
Copier après la connexion

Ajout d'une authentification et d'une autorisation

Pour la démonstration, nous utiliserons le stockage de données en mémoire (un tableau d'objets) pour les utilisateurs et les dépenses. Ce n'est pas adapté à la production.

Le fichier data.js stocke les données des utilisateurs et des dépenses :

<code class="language-javascript">// data.js (excerpt)
let users = [
    { id: "...", email: "...", password: "..." }, //Example User
    // ...more users
];

let expenditures = [
    { id: "...", userId: "...", name: "...", amount: ..., date: "..." }, //Example Expense
    // ...more expenses
];

module.exports = { expenditures, users };</code>
Copier après la connexion

Point de terminaison d'inscription (/users/signup)

Ce point de terminaison crée de nouveaux utilisateurs. Il valide l'e-mail et le mot de passe, vérifie les doublons d'e-mails, génère un UUID et (pour cette démo uniquement) stocke le mot de passe brut. Un jeton d'authentification codé en base64 (email:UUID) est renvoyé. Le hachage du mot de passe est omis par souci de simplicité mais est crucial dans un environnement de production.

Point de terminaison de connexion (/users/login)

Ce point de terminaison authentifie les utilisateurs existants. Il valide les informations d'identification et renvoie un jeton d'authentification codé en base64 en cas de succès.

Points de terminaison protégés

Pour protéger les points de terminaison (par exemple, /expenditures), nous aurons besoin d'un jeton d'authentification dans les en-têtes de requête (Authorization en-tête). Le jeton est décodé, l'utilisateur est vérifié et seules les propres données de l'utilisateur sont renvoyées.

<code class="language-javascript">// validations.js (excerpt)
const isString = (arg) => typeof arg === "string";
const isNumber = (arg) => !isNaN(Number(arg));

function isValidName(name) { /* ... */ }
function isValidAmount(amount) { /* ... */ }
function isValidDate(date) { /* ... */ }

module.exports = { isValidName, isValidAmount, isValidDate };</code>
Copier après la connexion
Copier après la connexion

Conclusion

Cet article fournit une introduction de base à la validation, à l'authentification et à l'autorisation dans une API Node.js/Express.js. N'oubliez pas que les mesures de sécurité présentées ici sont simplifiées à des fins pédagogiques et ne doivent pas être utilisées dans les systèmes de production. Les applications prêtes pour la production nécessitent un hachage de mot de passe robuste, une gestion sécurisée des jetons (les JWT sont recommandés) et une intégration de base de données.

Ressources

(N'oubliez pas de remplacer les espaces réservés entre crochets par des liens réels.)

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal