Synchrone Implementierung
In diesem Leitfaden wird erklärt, wie die stille Authentifizierung mit dem synchronen Ansatz implementiert wird, bei dem Ihr Backend auf eine direkte Antwort wartet, nachdem der Benutzer weitergeleitet wurde.
Hinweis: Wenn Sie eine synchrone Implementierung verwenden, ist das Einschalten der Verify-Funktionen auf dem Anwendungs-Dashboard optional, da dies nur die Fähigkeit zum Empfang von Status-Webhooks ändert (die für eine synchrone Implementierung nicht erforderlich sind).
Das folgende Diagramm zeigt die notwendigen Schritte zur Implementierung der synchronen Version von Silent Authentication:
Verifizierungscode anfordern
Um den Prozess der stillen Authentifizierung zu starten, stellen Sie eine Anfrage an /verify Endpunkt. Im folgenden Beispiel wird der 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.
Hinweis: Bei Verwendung mehrerer Kanäle, stille Authentifizierung muss ist der erste Kanal im Arbeitsablauf.
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 | Privater 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., +44111223344). |
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'"
}
]
}'Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
npm install @vonage/server-sdk @vonage/verify2Erstellen Sie eine Datei mit dem Namen send-request-with-fallback.js und fügen Sie den folgenden Code hinzu:
const { Vonage } = require('@vonage/server-sdk');
const { Channels, SilentAuthChannel } = require('@vonage/verify2');
const vonage = new Vonage({
applicationId: VONAGE_APPLICATION_ID,
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
});Schreiben Sie den Code
Fügen Sie Folgendes zu send-request-with-fallback.js hinzu:
vonage.verify2.newRequest({
brand: VERIFY_BRAND_NAME,
workflow: [
{
channel: SilentAuthChannel.SILENT_AUTH,
to: VERIFY_NUMBER,
},
{
channel: Channels.EMAIL,
to: VERIFY_TO_EMAIL,
},
],
})
.then(({requestId}) => console.log(requestId))
.catch((err) => console.error(err));Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
Fügen Sie Folgendes zu build.gradle hinzu:
implementation 'com.vonage:server-sdk-kotlin:2.1.1'Erstellen Sie eine Datei mit dem Namen SendVerificationRequestWithFallback und fügen Sie den folgenden Code in die Methode main ein:
val client = Vonage {
applicationId(VONAGE_APPLICATION_ID)
privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
}Schreiben Sie den Code
Fügen Sie der Methode main in der Datei SendVerificationRequestWithFallback Folgendes hinzu:
val response = client.verify.sendVerification(VERIFY_BRAND_NAME) {
silentAuth(VERIFY_NUMBER)
email(VERIFY_TO_EMAIL)
}
println("Verification sent: ${response.requestId}")Führen Sie Ihren Code aus
Wir können das Applikation Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.kt.verify durch das Paket, das SendVerificationRequestWithFallback enthält:
Voraussetzungen
Fügen Sie Folgendes zu build.gradle hinzu:
implementation 'com.vonage:server-sdk:9.3.1'Erstellen Sie eine Datei mit dem Namen SendRequestWithFallback und fügen Sie den folgenden Code in die Methode main ein:
VonageClient client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();Schreiben Sie den Code
Fügen Sie der Methode main in der Datei SendRequestWithFallback Folgendes hinzu:
VerificationResponse response = client.getVerify2Client().sendVerification(
VerificationRequest.builder()
.addWorkflow(new SilentAuthWorkflow(VERIFY_NUMBER))
.addWorkflow(new EmailWorkflow(VERIFY_TO_EMAIL))
.brand(VERIFY_BRAND_NAME).build()
);
System.out.println("Verification sent: " + response.getRequestId());Führen Sie Ihren Code aus
Wir können das Applikation Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.verify2 durch das Paket, das SendRequestWithFallback enthält:
Voraussetzungen
Install-Package VonageErstellen Sie eine Datei mit dem Namen StartVerificationRequestWithFallback.cs und fügen Sie den folgenden Code hinzu:
using Vonage;
using Vonage.Request;
using Vonage.VerifyV2.StartVerification;
using Vonage.VerifyV2.StartVerification.Email;
using Vonage.VerifyV2.StartVerification.SilentAuth;Fügen Sie Folgendes zu StartVerificationRequestWithFallback.cs hinzu:
var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_APPLICATION_PRIVATE_KEY_PATH);
var client = new VonageClient(credentials);Schreiben Sie den Code
Fügen Sie Folgendes zu StartVerificationRequestWithFallback.cs hinzu:
var request = StartVerificationRequest.Build()
.WithBrand(BRAND_NAME)
.WithWorkflow(SilentAuthWorkflow.Parse(TO_NUMBER))
.WithFallbackWorkflow(EmailWorkflow.Parse(TO_EMAIL))
.Create();
var response = await client.VerifyV2Client.StartVerificationAsync(request);Voraussetzungen
composer require vonage/clientErstellen Sie eine Datei mit dem Namen request.php und fügen Sie den folgenden Code hinzu:
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
pip install vonage python-dotenvSchreiben Sie den Code
Fügen Sie Folgendes zu send-request-with-fallback.py hinzu:
from vonage import Auth, Vonage
from vonage_verify import (EmailChannel, SilentAuthChannel,
StartVerificationResponse, VerifyRequest)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
SilentAuthChannel(to=VERIFY_NUMBER),
EmailChannel(to=VERIFY_TO_EMAIL, from_=VERIFY_FROM_EMAIL),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
gem install vonageErstellen Sie eine Datei mit dem Namen request.rb und fügen Sie den folgenden Code hinzu:
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Wenn die Anfrage erfolgreich ist und die Nummer lautet unterstützterhalten Sie eine 200 Ok Antwort, die eine request_id und eine check_url im Körper:
{
"request_id": "c11236f4-00bf-4b89-84ba-88b25df97315",
"check_url": "https://api.nexmo.com/v2/verify/31eaf23d-b2db-4c42-9d1d-e847e75ab330/silent-auth/redirect"
}
Bis der Antrag abläuft oder storniert wird, check_url kann verwendet werden, um eine Überprüfung der stillen Authentifizierung durchzuführen. Nach Erhalt dieser Antwort müssen Sie eine
check_url von dem mobilen Gerät, das Sie zu authentifizieren versuchen. Damit der Mobilfunknetzbetreiber den Benutzer ordnungsgemäß verifizieren kann, muss die GET-Anfrage über eine mobile Datenverbindung gestellt werden. Siehe Android- und iOS-Bibliotheken für Informationen darüber, wie Sie eine mobile Verbindung erzwingen können.
Sobald Sie die
302 leitet je nach Gebiet und Netzbetreiber, den das Zielgerät verwendet, weiter: 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 409 Antwort, je nachdem, ob die Anfrage gültig ist. Wenn es ein Problem mit dem Netzwerk gibt, erhalten Sie eine Antwort wie diese:
HTTP/1.1 409 CONFLICT
Content-Type: application/json
{
"title": "Network error",
"detail": "The Silent Auth request could not be completed due to formatting or the carrier is not supported."
}
Eine vollständige Liste der möglichen Fehlercodes finden Sie in der API-Spezifikation.
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 mitgelieferten Verifizierungscode
Sobald der Endbenutzer den Code erhält, müssen Sie eine
/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'"
}'Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
npm install @vonage/server-sdkErstellen Sie eine Datei mit dem Namen check-verification-code.js und fügen Sie den folgenden Code hinzu:
const { Vonage } = require('@vonage/server-sdk');
const vonage = new Vonage ({
applicationId: VONAGE_APPLICATION_ID,
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
});Schreiben Sie den Code
Fügen Sie Folgendes zu check-verification-code.js hinzu:
vonage.verify2.checkCode(VERIFY_REQUEST_ID, VERIFY_CODE)
.then((status) => console.log(`The status is ${status}`),
)
.catch((err) => console.error(err));Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
Fügen Sie Folgendes zu build.gradle hinzu:
implementation 'com.vonage:server-sdk-kotlin:2.1.1'Erstellen Sie eine Datei mit dem Namen CheckVerificationCode und fügen Sie den folgenden Code in die Methode main ein:
val client = Vonage {
applicationId(VONAGE_APPLICATION_ID)
privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
}Schreiben Sie den Code
Fügen Sie der Methode main in der Datei CheckVerificationCode Folgendes hinzu:
if (client.verify.request(VERIFY_REQUEST_ID).isValidVerificationCode(VERIFY_CODE)) {
println("Code matches.")
}Führen Sie Ihren Code aus
Wir können das Applikation Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.kt.verify durch das Paket, das CheckVerificationCode enthält:
Voraussetzungen
Fügen Sie Folgendes zu build.gradle hinzu:
implementation 'com.vonage:server-sdk:9.3.1'Erstellen Sie eine Datei mit dem Namen CheckVerificationCode und fügen Sie den folgenden Code in die Methode main ein:
VonageClient client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();Schreiben Sie den Code
Fügen Sie der Methode main in der Datei CheckVerificationCode Folgendes hinzu:
try {
client.getVerify2Client().checkVerificationCode(VERIFY_REQUEST_UUID, VERIFY_CODE);
System.out.println("SUCCESS - code matches!");
}
catch (VerifyResponseException ex) {
switch (ex.getStatusCode()) {
case 400: // Code does not match
case 404: // Already verified or not found
case 409: // Workflow does not support code
case 410: // Incorrect code provided too many times
case 429: // Rate limit exceeded
default: // Unknown or internal server error (500)
ex.printStackTrace();
}
}Führen Sie Ihren Code aus
Wir können das Applikation Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.verify2 durch das Paket, das CheckVerificationCode enthält:
Voraussetzungen
Install-Package VonageErstellen Sie eine Datei mit dem Namen VerifyCodeRequest.cs und fügen Sie den folgenden Code hinzu:
using Vonage;
using Vonage.Request;Fügen Sie Folgendes zu VerifyCodeRequest.cs hinzu:
var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_APPLICATION_PRIVATE_KEY_PATH);
var client = new VonageClient(credentials);Schreiben Sie den Code
Fügen Sie Folgendes zu VerifyCodeRequest.cs hinzu:
var request = Vonage.VerifyV2.VerifyCode.VerifyCodeRequest.Build()
.WithRequestId(REQUEST_ID)
.WithCode(CODE)
.Create();
var response = await client.VerifyV2Client.VerifyCodeAsync(request);Voraussetzungen
composer require vonage/clientErstellen Sie eine Datei mit dem Namen send_code.php und fügen Sie den folgenden Code hinzu:
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
pip install vonage python-dotenvSchreiben Sie den Code
Fügen Sie Folgendes zu check-verification-code.py hinzu:
from vonage import Auth, Vonage
from vonage_verify import CheckCodeResponse
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CheckCodeResponse = client.verify.check_code(
request_id=VERIFY_REQUEST_ID, code=VERIFY_CODE
)
print(response)Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
gem install vonageErstellen Sie eine Datei mit dem Namen check.rb und fügen Sie den folgenden Code hinzu:
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Hinweis: Ein Code für einen Workflow zur stillen Authentifizierung kann nur geprüft werden einmal.
Wenn der Code gültig ist, erhalten Sie eine endgültige Antwort 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"
}
An diesem Punkt ist die Überprüfung der stillen Authentifizierung abgeschlossen.