Sicherheit

Standardmäßig sind alle Endpunkte einer VCR-Anwendung öffentlich zugänglich. Die security Block in vcr.yml können Sie den Zugriff pro Pfad mit drei Zugriffsebenen und optionaler Authentifizierungsdurchsetzung steuern.

Es wird dringend empfohlen, Sicherheitsregeln für alle Endpunkte in Ihrer Anwendung zu konfigurieren. Wenn Sie die Endpunkte ungeschützt lassen, ist Ihre Anwendung unberechtigtem Zugriff, Missbrauch und unerwarteten Kosten ausgesetzt. Legen Sie zumindest eine restriktive Standardzugriffsstufe fest und öffnen Sie explizit nur die Pfade, die öffentlich sein müssen (z. B. Vonage Webhook-Callbacks).

Zugangsebenen

Ebene Beschreibung
public Keine Authentifizierung erforderlich. Jeder kann den Endpunkt erreichen.
private Von außerhalb der Plattform nicht zugänglich. Nur interne VCR-Dienste können ihn aufrufen.
authenticated Erfordert gültige Vonage-API-Anmeldeinformationen in der Datei Authorization Header (HTTP Basic: base64(api_key:api_secret)). Die Plattform validiert die Anmeldedaten, bevor sie die Anfrage an Ihre Anwendung weiterleitet.

Konfiguration

instance:
    security:
        access: private
        override:
            - path: "/webhooks/*"
              access: public
            - path: "/api/**"
              access: authenticated
              auth-method: vonage_basic
  • access setzt die Standard Zugriffsstufe für alle Pfade, die nicht mit einer Überschreibung übereinstimmen.
  • override ist eine Liste von pfadspezifischen Regeln. Die Regeln werden der Reihe nach ausgewertet; die spezifischste Übereinstimmung gewinnt.
  • auth-method ist erforderlich, wenn access ist authenticated. Der einzige unterstützte Wert ist vonage_basic.

Pfad-Wildcards

Platzhalter Streichhölzer Beispiel
* Ein einzelnes Pfadsegment /users/*/profile passt zu /users/123/profile aber nicht /users/123/settings/profile
** Beliebige Anzahl von Pfadsegmenten /api/** passt zu /api/v1, /api/v1/users, /api/v1/users/123, usw.

Webhook-Endpunkte erfordern uneingeschränkten Zugriff

Rückrufe der Vonage-Plattform (eingehende Anrufe, eingehende Nachrichten, Zustellungsquittungen usw.) stammen von außerhalb Ihrer Instanz. Diese Endpunkte müssen festgelegt werden auf publicAndernfalls kann die Vonage-Plattform sie nicht erreichen und Ihre Provider erhalten keine Ereignisse.

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

So funktioniert der authentifizierte Zugang

Wenn eine Anfrage auf ein authenticated Pfad, der Verkehrslotse:

  1. Überprüft, ob ein Authorization Kopfzeile vorhanden ist. Wenn er fehlt, wird 401 Unauthorized.
  2. Überprüft die Anmeldedaten anhand des Authentifizierungsdienstes von Vonage und bestätigt, dass der Anrufer demselben Vonage Account angehört wie der Instanzinhaber. Falls ungültig oder nicht übereinstimmend, wird 403 Forbidden.
  3. Wenn die Validierung erfolgreich ist, wird die Anfrage unverändert an Ihre Anwendung weitergeleitet.

Die vonage_basic auth-Methode verwendet die HTTP Basic-Authentifizierung. Der Aufrufer muss seinen Vonage API-Schlüssel und sein API-Geheimnis verschlüsselt als Basic-Authentifizierungsnachweis senden:

Authorization: Basic base64(api_key:api_secret)

Die meisten HTTP-Clients erledigen dies automatisch, wenn Sie einen Benutzernamen und ein Passwort angeben:

// 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}`),
  },
});

Ihr Anwendungscode muss die Anmeldedaten nicht selbst validieren - die Plattform erzwingt die Authentifizierung, bevor die Anfrage Ihren Handler erreicht. Wenn Sie den Aufrufer innerhalb Ihres Handlers identifizieren müssen, injiziert die Plattform die verifizierte Account-ID über die x-neru-apiaccountid Kopfzeile:

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

Auth-Methodenvererbung

Wenn ein override Eingabefelder access: authenticated unterlässt aber auth-methoderbt es die oberste Ebene auth-method Wert. Wenn keiner der beiden Werte gesetzt ist, lehnt die Bereitstellungs-API die Konfiguration ab.

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