Asynchrone Implementierung

Eine asynchrone Implementierung ähnelt sehr der synchron Methode; anstatt den Geräte-Client zu verwenden, um eine Reihe von Aufrufen zu tätigen, wird jeder Teil des Arbeitsablaufs in Webhook-Rückrufe an eine von Ihnen definierte URL gesendet.

Dieser Leitfaden erklärt, wie die stille Authentifizierung mit dem asynchronen Ansatz implementiert wird, bei dem Ihr Backend einen Callback einrichtet, um das Authentifizierungsergebnis zu erhalten.

VonageApp BackendMobile AppVonageApp BackendMobile AppTrigger VerificationSend Check URLCheck Verification CodeVerify phone numberPOST v2/verifyWebhook 202 OK (check_url, request_id) / ErrorResponse (check_url)GET check_urlSeveral 302 RedirectsHTTP 200 (request_id, code)Request (request_id, code)POST v2/verify/:request_id (code)HTTP 200 (status: completed)Response (Completed)

So verwenden Sie die asynchrone stille Authentifizierung, müssen Sie die JWT-Authentifizierung verwenden in Ihre Anfragen aufnehmen, da Sie sonst nicht die erforderlichen Webhooks für die Implementierung erhalten.

Erstellen einer Applikation

Um zu beginnen, besuchen Sie die Seite Entwickler-Dashboard um Ihre Anwendung zu erstellen:

  • Vergewissern Sie sich, dass Verify unter "Fähigkeiten" aktiviert ist.
  • Konfigurieren Sie die Status-URL für den Empfang von Callback-Ereignissen.
  • Erzeugen einer JWT unter Verwendung der Anwendungs-ID und des privaten Schlüssels der Anwendung.

Trigger-Verifizierung

Um den Prozess der stillen Authentifizierung zu starten, stellen Sie eine Anfrage an /verify. Im folgenden Beispiel wird die Arbeitsablauf legt fest, dass Verify zunächst versucht, die stille Authentifizierung zu verwenden. Wenn die Anfrage aus irgendeinem Grund fehlschlägt, wird auf E-Mail-OTP zurückgegriffen.

Um das Beispiel auszuführen, ersetzen Sie die folgenden Variablen im Beispielcode durch Ihre eigenen Werte:

Variabel Beschreibung
JWT Authentifiziert die API-Anfrage mit JWT.
VERIFY_BRAND_NAME Der Name Ihres Unternehmens oder Ihrer Dienstleistung, der dem Nutzer in der Bestätigungsnachricht angezeigt wird.
VONAGE_APPLICATION_PRIVATE_KEY_PATH Pfad zum privaten Schlüssel Ihrer Anwendung.
VONAGE_APPLICATION_ID Application ID Ihrer Anwendung.
VERIFY_NUMBER Die Telefonnummer, an die das OTP gesendet werden soll, im E.164-Format (z. B., +441112233447).
VERIFY_TO_EMAIL Die E-Mail, an die das OTP gesendet werden soll.

Schreiben Sie den Code

Fügen Sie Folgendes zu request.sh hinzu:

curl -X POST "https://api.nexmo.com/v2/verify" \
  -H "Authorization: Bearer $JWT"\
  -H 'Content-Type: application/json' \
  -d $'{
	 "brand": "'$VERIFY_BRAND_NAME'",
   "workflow": [
      {
         "channel": "silent_auth",
         "to": "'$VERIFY_NUMBER'"
      },
			{
         "channel": "email",
         "to": "'$VERIFY_EMAIL_TO'"
      }
   ]
}'

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

sh request.sh

Antwort

Wenn die Anfrage erfolgreich ist, gibt die Antwort HTTP 200 mit dem check_url im Körper, die wir im nächsten Schritt benötigen:

HTTP/1.1 200 Ok 
{
  "request_id": "470b478f-334c-4f6f-b90d-b44e77ed24bf",
  "check_url": "https://api-eu-4.vonage.com/v2/verify/470b478f-334c-4f6f-aaab-b4a342aed24bf/silent-auth/redirect"
}

Liegt ein Fehler in der Anfrage vor, z. B. eine falsch formatierte Telefonnummer, enthält die Antwort eine HTTP 422 Fehler wie dieser:

HTTP/1.1 422 Unprocessable Entity 
{
  "title": "Invalid params",
  "detail": "The value of one or more parameters is invalid",
  "instance": "b30db5a7-338e-402e-aa5a-40073a9aa07c",
  "type": "https://developer.vonage.com/en/api-errors#invalid-params",
  "invalid_parameters": [
    {
      "name": "workflow[0]",
      "reason": "`to` Phone number is invalid"
    }
  ]
}

Da wir die asynchrone Implementierung verwenden, erhalten Sie parallel zur API-Antwort eine Rückruf (oder Webhook) an die in den Einstellungen Ihrer Dashboard-Anwendung angegebene URL, um Sie über den Fortschritt der Anfrage zu informieren.

Während des API-Aufrufs an /verifyführt die Verify-API interne Vorprüfungen durch. Wenn alles in Ordnung ist, enthält der Callback den folgenden Body:

HTTP/1.1 200 Ok 
{
  "request_id": "21a425df-04b2-43f2-990e-b19ee22e18a0",
  "triggered_at": "2025-07-14T17:01:47.032Z",
  "channel": "silent_auth",
  "status": "action_pending",
  "action": {
    "type": "check",
    "check_url": "https://api-eu-4.vonage.com/v2/verify/21a425df-04b2-43f2-990e-b19ee22e18a0/silent-auth/redirect"
  },
  "type": "event"
}

Bis der Antrag abläuft oder storniert wird, check_url wird verwendet, um eine Überprüfung der stillen Authentifizierung durchzuführen, indem Senden der Auth-URL. Wenn Sie diesen Rückruf erhalten, müssen Sie eine

GET
-Anfrage an die check_url von dem mobilen Gerät, das Sie zu authentifizieren versuchen.

Um den Benutzer zu verifizieren, muss die

GET
-Anfrage über eine mobile Datenverbindung gestellt werden. Siehe Umgehen von Wi-Fi für stille Authentifizierung für Informationen darüber, wie Sie eine mobile Verbindung erzwingen können.

Wenn eine dieser Vorprüfungen fehlschlägt, z. B. aufgrund eines Netzwerkfehlers oder eines nicht unterstützten Operators, sieht der Callback wie folgt aus:

HTTP/1.1 200 Ok 
{
  request_id: "470b478f-334c-4f6f-b90d-b44e77ed24bf",
  triggered_at: "2025-07-14T16:53:16.965Z",
  channel: "silent_auth",
  status: "failed",
  type: "event"
}

Wenn Ihr /verify Anfrage einen Rückfallkanal enthält, verwendet Verify diesen Kanal weiter, wie im folgenden Sequenzdiagramm dargestellt:

VonageApp BackendMobile AppVonageApp BackendMobile AppTrigger VerificationVerify phone numberPOST v2/verifyInternal coverage checkWebhook 200 (status: failed)fallback channel

Auth URL senden

Sobald Sie die

GET
-Anfrage gestellt haben, erhalten Sie eine oder mehrere HTTP 302 Umleitungen je nach Gebiet und Träger des Zielgeräts:

HTTP/1.1 302 Found
Location: https://eu.api.silentauth.com/phone_check/v0.2/checks/31eaf23d-b2db-4c42-9d1d-e847e75ab330/redirect

Die Befolgung der Weiterleitungen führt entweder zu einer HTTP 200 oder HTTP 4xx Antwort je nach Ergebnis. Wenn es ein Problem mit dem Netzwerk gibt, könnten Sie eine Antwort wie diese sehen:

HTTP/1.1 412 Precondition Failed
Content-Type: application/json

{
  "title": "Network not supported",
  "detail": "Device number does not resolve to a supported Mobile Network Operator.",
  "instance": "78e23b55-1633-465e-9325-6abcf186dd00",
  "type": "https://developer.vonage.com/en/api-errors/verify-v2#precondition-failed"
}

Eine vollständige Liste der möglichen Fehlercodes finden Sie in der API-Spezifikation.

Die Timeout-Verwaltung Abschnitt des Leitfadens zu bewährten Verfahren enthält nützliche Informationen zum Umgang mit Situationen wie Netzsignal- oder Netzabdeckungsproblemen während dieses Schritts.

Wenn die Anfrage gültig ist, erhalten Sie eine HTTP 200 Antwort mit Ihrer request_id und eine code:

{
  "request_id": "c11236f4-00bf-4b89-84ba-88b25df97315",
  "code": "si9sfG"
}

Hinweis: Um eine sichere Authentifizierungsprüfung zu gewährleisten und einen möglichen Man-in-the-Middle-Angriff abzuschwächen, speichern Sie das Original request_id und vergleichen Sie es mit dem request_id die in der Antwort zurückgegeben werden. Wenn die IDs nicht übereinstimmen, sollte die stille Authentifizierungsprüfung abgebrochen werden. Siehe unsere Beispielanwendung für eine Beispielimplementierung, wie der Angriff abgewehrt werden kann.

Überprüfen Sie den Verifizierungscode

Sobald der Endbenutzer den Code erhält, muss Ihre Client-Anwendung eine

POST
-Anfrage an die /v2/verify/{request_id} Endpunkt und ersetzt damit {request_id} mit der ID, die Sie beim letzten Anruf erhalten haben.

Um das Beispiel auszuführen, ersetzen Sie die folgenden Variablen im Beispielcode durch Ihre eigenen Werte:

Variabel Beschreibung
JWT Authentifiziert die API-Anfrage mit JWT.
VERIFY_REQUEST_ID Die request_id die Sie im vorherigen Schritt erhalten haben.
VONAGE_APPLICATION_PRIVATE_KEY_PATH Privater Schlüssel Ihrer Anwendung.
VONAGE_APPLICATION_ID Application ID Ihrer Anwendung.
VERIFY_CODE Der vom Endnutzer erhaltene Verifizierungscode

Schreiben Sie den Code

Fügen Sie Folgendes zu check-verification-code.sh hinzu:

curl -X POST "https://api.nexmo.com/v2/verify/$VERIFY_REQUEST_ID" \
  -H "Authorization: Bearer $JWT"\
  -H 'Content-Type: application/json' \
  -d $'{
    "code": "'$VERIFY_CODE'"
  }'

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

sh check-verification-code.sh

Hinweis: Ein Code für einen Workflow zur stillen Authentifizierung kann nur geprüft werden einmal.

Wenn der Code gültig ist, erhalten Sie einen Rückruf mit dem Status completed:

{
   "request_id": "31eaf23d-b2db-4c42-9d1d-e847e75ab330",
   "status": "completed"
}

Wenn ein Fehler auftritt, wird "Ungültiger Code" angezeigt:

{
   "title": "Invalid Code",
   "type": "https://www.developer.vonage.com/api-errors/verify#invalid-code",
   "detail": "The code you provided does not match the expected value.",
   "instance": "bf0ca0bf927b3b52e3cb03217e1a1ddf"
}

Sie erhalten dann einen letzten Rückruf mit dem Ergebnis der Prüfung. Im Erfolgsfall erhalten Sie einen Callback mit "status": "completed":

{
    "request_id": "c11236f4-00bf-4b89-84ba-88b25df97315",
    "triggered_at": "2020-01-01T14:00:00.000Z",
    "type": "event",
    "channel": "silent_auth",
    "status": "completed",
}

Ist dies nicht der Fall, z. B. wenn der Benutzer abgewiesen wurde, wird dies in der status Feld:

{
    "request_id": "c11236f4-00bf-4b89-84ba-88b25df97315",
    "triggered_at": "2020-01-01T14:00:00.000Z",
    "type": "event",
    "channel": "silent_auth",
    "status": "user_rejected",
}

An diesem Punkt ist die Überprüfung der stillen Authentifizierung abgeschlossen.