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
accessdéfinit le par défaut le niveau d'accès pour tous les chemins d'accès qui ne correspondent pas à une dérogation.overrideest 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-methodest nécessaire lorsqueaccessestauthenticated. La seule valeur prise en charge estvonage_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 :
- Vérifie qu'un
Authorizationest présent. S'il n'y en a pas, il renvoie401 Unauthorized. - 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. - 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