Sécurité

Par défaut, tous les points d'extrémité d'une application VCR sont accessibles au public. Les points d'extrémité de l'application security bloc en vcr.yml vous permet de contrôler l'accès par chemin à l'aide de trois niveaux d'accès et d'une authentification optionnelle.

Il est fortement recommandé de configurer des règles de sécurité pour tous les points finaux de votre application. Le fait de ne pas protéger les points de terminaison expose votre application à des accès non autorisés, à des abus et à des coûts inattendus. Au minimum, définissez un niveau d'accès par défaut restrictif et n'ouvrez explicitement que les chemins qui doivent être publics (tels que les rappels du webhook de Vonage).

Niveaux d'accès

Niveau Description
public Aucune authentification n'est requise. N'importe qui peut atteindre le point d'extrémité.
private Non accessible depuis l'extérieur de la plate-forme. Seuls les services internes du magnétoscope peuvent l'appeler.
authenticated Nécessite des informations d'identification API Vonage valides dans le fichier Authorization (HTTP Basic : base64(api_key:api_secret)). La plateforme valide les informations d'identification avant de transmettre la demande à votre application.

Configuration

instance:
    security:
        access: private
        override:
            - path: "/webhooks/*"
              access: public
            - path: "/api/**"
              access: authenticated
              auth-method: vonage_basic
  • access définit le par défaut le niveau d'accès pour tous les chemins d'accès qui ne correspondent pas à une dérogation.
  • override est une liste de règles spécifiques à un chemin. Les règles sont évaluées dans l'ordre ; la correspondance la plus spécifique l'emporte.
  • auth-method est nécessaire lorsque access est authenticated. La seule valeur prise en charge est vonage_basic.

Jokers de chemin d'accès

Carte joker Correspondances Exemple
* Un seul segment de chemin /users/*/profile correspondances /users/123/profile mais pas /users/123/settings/profile
** Un nombre quelconque de segments de chemin /api/** correspondances /api/v1, /api/v1/users, /api/v1/users/123, etc.

Les points de terminaison Webhook nécessitent un accès illimité

Les rappels de la plateforme Vonage (appels entrants, messages entrants, reçus de livraison, etc.) proviennent de l'extérieur de votre instance. Ces points d'extrémité doivent être réglés sur publicsinon la plateforme Vonage ne peut pas les atteindre et vos fournisseurs ne recevront pas les événements.

instance:
    security:
        access: private
        override:
            - path: "/onCall"
              access: public
            - path: "/onMessage"
              access: public
            - path: "/api/**"
              access: authenticated
              auth-method: vonage_basic

Comment fonctionne l'accès authentifié

Lorsqu'une demande rencontre un authenticated chemin, le contrôleur de la circulation :

  1. Vérifie qu'un Authorization est présent. S'il n'y en a pas, il renvoie 401 Unauthorized.
  2. Valide les informations d'identification par rapport au service d'authentification de Vonage et confirme que l'appelant appartient au même Account Vonage que le propriétaire de l'instance. En cas d'invalidité ou de non-concordance, renvoie 403 Forbidden.
  3. Si la validation est réussie, il transmet la demande à votre application sans modification.

Les vonage_basic La méthode d'authentification de Vonage utilise l'authentification de base HTTP. L'appelant doit envoyer sa clé et son secret d'API Vonage encodés en tant que justificatif d'authentification de base :

Authorization: Basic base64(api_key:api_secret)

La plupart des clients HTTP gèrent cela automatiquement lorsque vous fournissez un nom d'utilisateur et un mot de passe :

// Example: calling an authenticated VCR endpoint from a client
const response = await fetch('https://my-app.use1.runtime.vonage.cloud/api/data', {
  headers: {
    'Authorization': 'Basic ' + btoa(`${API_KEY}:${API_SECRET}`),
  },
});

Votre code d'application n'a pas besoin de valider les informations d'identification lui-même - la plateforme applique l'authentification avant que la demande n'atteigne votre gestionnaire. Si vous avez besoin d'identifier l'appelant à l'intérieur de votre gestionnaire, la plateforme injecte l'identifiant du compte vérifié par l'intermédiaire de l'élément x-neru-apiaccountid l'en-tête :

app.get('/api/data', async (req, res) => {
  const accountId = req.headers['x-neru-apiaccountid'];
  res.json({ accountId });
});

Héritage des méthodes d'authentification

Si un override jeux d'entrée access: authenticated mais omet auth-method, il hérite du niveau supérieur auth-method (valeur). Si aucune valeur n'est définie, l'API de déploiement rejettera la configuration.

instance:
    security:
        access: public
        auth-method: vonage_basic   # inherited by all authenticated overrides
        override:
            - path: "/admin/**"
              access: authenticated  # uses vonage_basic from above
            - path: "/api/**"
              access: authenticated  # also uses vonage_basic from above