
Verbessern Sie Ihre Multifaktor-Authentifizierung mit Verify und SIM Swap APIs
Lesedauer: 6 Minuten
Einführung
SIM-Swap-Angriffe bergen viele Risiken, darunter Identitätsdiebstahl und Identitätsübernahme, um nur einige zu nennen. In diesem Tutorial wird gezeigt, wie man die Sicherheit beim Zurücksetzen von Passwörtern erhöht, indem man prüft, ob die SIM-Karte aus dem Mobiltelefon ausgetauscht wurde und eine SMS zur Wiederherstellung des Kontos sendet. Der Ablauf verwendet die Verify-API um ein Token zu verifizieren und die SIM-Tausch-API um festzustellen, ob eine SIM-Karte in den letzten Tagen ausgetauscht wurde. Ist dies der Fall, wird der Verifizierungscode nicht gesendet.
Hinweis: Die Netzwerk-APIs sind in folgenden Ländern verfügbar folgenden Ländern und Kommunikationsdienstleistern (CSPs)
Quellcode
Den Quellcode der Anwendung finden Sie auf unserem GitHub-Repositorium.
Voraussetzungen
Node.js und npm auf Ihrem Rechner installiert.
Ein Code-/Texteditor und Grundkenntnisse in JavaScript.
Anwendungsarchitektur
Die Anwendung basiert auf einer Client-Server-Architektur. Der Client wickelt die Benutzerinteraktionen über HTML und JavaScript ab, einschließlich der Eingabe von Telefonnummern und der Übermittlung von Prüfcodes. Der Client und der Server kommunizieren über GET/POST-Anfragen. Der Server, der in Node.js mit Express entwickelt wurde, verwaltet die Backend-Logik, einschließlich der Schnittstellen zu den APIs SIM Swap und Verify v2 von Vonage für Sicherheitsüberprüfungen und Authentifizierung.
Ein neues Projekt erstellen
Erstellen Sie ein neues Projekt und wechseln Sie in dessen Verzeichnis.
mkdir improve-your-auth && cd improve-your-auth
Ein neues Node-Projekt starten
Initialisieren Sie in Ihrem neu erstellten Projektverzeichnis ein neues Knotenprojekt. Dadurch wird eine neue package.json
Datei. Die -y
Flagge füllt automatisch die Standardwerte aus, ohne nach den Details zu fragen.
npm init -y
Installieren Sie die Abhängigkeiten
Um alle Abhängigkeiten in einem Rutsch zu installieren, führen Sie den folgenden Befehl aus. Er fügt sie automatisch zu Ihrer package.json
Datei hinzu und installiert sie im Projekt node_modules
Verzeichnis.
npm install @vonage/server-sdk @vonage/auth axios dotenv express
Erstellen einer neuen Vonage-Anwendung
Nachdem wir nun die Ordner und Abhängigkeiten festgelegt haben, die wir für das Projekt verwenden werden, ist es an der Zeit, eine Vonage-Anwendung mit Verify- und SIM-Swap-Funktionen zu erstellen.
Nachdem Sie sich für ein Vonage-Konto angemeldet habenkönnen Sie eine neue Anwendung im Dashboard erstellen, indem Sie zu 'Ihre Anwendungen'klicken, um eine neue Anwendung zu erstellen, ihr einen Namen geben, z. B. "Multifaktor-Authentifizierung", und die Option "Verify V2" und "Network APIs" aktivieren.
Hinweis: Registrieren Sie Ihre Anwendung bei Vonage und den Communication Service Providern (CSP), bevor Sie die SIM Swap API nutzen. Wenn Ihre Registrierung bereits genehmigt ist, können Sie sofort mit der Erstellung Ihrer Lösung beginnen. Falls nicht, lesen Sie unseren Leitfaden zur Vonage Netzwerk-Registrierung für weitere Details.
Erstellen Sie ein öffentliches/privates Schlüsselpaar für die API-Authentifizierung; dadurch wird eine private.key
. Fügen Sie diese Datei zu Ihrem Node-Projektordner hinzu.
Serverseitige Implementierung
SIM-Swap-Übersicht
Der wichtige Aspekt der SIM-Swap-API, den wir für diese Demonstration verwenden werden, ist die Möglichkeit, zu prüfen, ob der Tausch in den letzten Tagen stattgefunden hat, um den Nutzer darauf hinzuweisen, dass ein potenzieller Betrug vorliegen könnte, falls der Tausch nicht von ihm selbst vorgenommen wurde.
Die SIM Swap API stärkt SIM-basierte Authentifizierungsmethoden, einschließlich SMS One-Time Passwords und stille Authentifizierung. Sie verfolgt den letzten SIM-Tausch für eine bestimmte Mobilfunknummer und überprüft das Aktivierungsdatum einer SIM-Karte in Echtzeit.
Erstellen Sie die Serverdatei
Die server.js
Datei ist unser Hauptserver-Skript, das mit den Vonage SIM Swap und Verify v2 APIs integriert ist, um Benutzer sicher zu authentifizieren. Es dient auch den Webseiten für unser Banking-Dashboard und übernimmt die Benutzeranmeldung und -verifizierung.
Authentifizierungsfunktion
Wir müssen unsere Anfragen authentifizieren, um mit der SIM-Tausch-API. Hier sehen Sie, wie wir eine Authentifizierungsfunktion mit OAuth2 einrichten können. Sie erfordert zwei POST-Anfragen, eine zum Abrufen des auth_req_id
und die andere, um ein neues Zugriffstoken zu erhalten.
async function authenticate(phone, scope) {
try {
const authReqResponse = await axios.post(
authReqUrl,
{
login_hint: phone,
scope: scope,
},
{
headers: {
Authorization: `Bearer ${process.env.JWT}`,
"Content-Type": "application/x-www-form-urlencoded",
},
}
);
const authReqId = authReqResponse.data.auth_req_id;
const tokenResponse = await axios.post(
tokenUrl,
{
auth_req_id: authReqId,
grant_type: "urn:openid:params:grant-type:ciba",
},
{
headers: {
Authorization: `Bearer ${process.env.JWT}`,
"Content-Type": "application/x-www-form-urlencoded",
},
}
);
return tokenResponse.data.access_token;
} catch (error) {
console.error(
"Error during authentication:",
error.response?.data || error.message
);
throw error;
}
}
SIM-Swap-Prüfung
Die Funktion checkSim
prüft, ob die Telefonnummer kürzlich ausgetauscht wurde. Sie verwendet die authenticate
Funktion, um ein Zugriffs-Token zu erhalten und fragt dann die SIM-Tausch-API. Ich habe eine MAX_AGE
Umgebungsvariable gesetzt, die Sie auf die Anzahl der Stunden setzen können, vor denen Sie prüfen wollen, ob der SIM-Tausch stattgefunden hat.
async function checkSim(phoneNumber) {
try {
const accessToken = await authenticate(scope);
const response = await axios.post(simSwapApiUrl, {
phoneNumber: phoneNumber,
maxAge: process.env.MAX_AGE,
}, {
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
});
return response.data.swapped;
} catch (error) {
console.error("Error checking SIM swap:", error.response?.data || error.message);
throw error;
}
}
Verify V2 API hinzufügen
Die Verify V2 API ermöglicht es uns in unserem Anwendungsfall, einen Verifizierungscode an die Telefonnummer eines Nutzers zu senden, wenn kein kürzlich erfolgter SIM-Wechsel festgestellt wurde.
Antrag auf Verifizierung
Im Folgenden wird eine Verifizierungsanfrage bearbeitet. Wenn kein SIM-Tausch erkannt wird, wird ein Verifizierungscode über die Verify V2 API gesendet:
app.post("/sendcode", async (req, res) => {
const phone = req.body.phone; // phone number to verify
if (!await checkSim(phone)) {
try {
const response = await vonage.verify2.newRequest({
brand: "Vonage Bank",
workflow: [{ channel: Channels.SMS, to: phone }]
});
res.json({ message: "Verification code sent.", request_id: response.requestId });
} catch (error) {
console.error("Error during verification:", error);
res.status(500).json({ message: "Error processing request." });
}
} else {
console.log("SIM swap detected. Verification code not sent.");
res.status(403).json({ message: "Verification denied due to recent SIM swap." });
}
});
PIN-Einreichung
Nach Erhalt des Verifizierungscodes kann der Nutzer diesen über unseren Dienst übermitteln. Hier sehen Sie, wie wir die übermittelte PIN verifizieren:
app.post("/verify", async (req, res) => {
const { pin, requestId } = req.body; // pin and request ID from user input
try {
const result = await vonage.verify2.checkCode(requestId, pin);
if (result === "completed") {
res.json({ message: "Verification successful." });
} else {
res.json({ message: "Invalid PIN. Please try again." });
}
} catch (error) {
console.error("Error during PIN verification:", error);
res.status(500).json({ message: "Error during PIN verification." });
}
});
Erstellen Sie die Umgebungsvariablendatei
Erstellen Sie eine .env
Datei für Ihr Projekt und fügen Sie die Umgebungsvariablen hinzu, die Sie in dem unten stehenden Codeausschnitt finden. Siehe auch Michaels Blogbeitrag für eine wunderbare Erklärung der Verwendung von Umgebungsvariablen in Node.js.
Die VONAGE_API_SECRET
und VONAGE_API_SECRET
finden Sie auf dem Dashboard von Vonage.
Vonage Dashboard
# Your Vonage application
VONAGE_API_KEY=your_api_key
VONAGE_API_SECRET=your_api_secret
VONAGE_APPLICATION_ID=your_application_id
VONAGE_APPLICATION_PRIVATE_KEY=/path/to/your/private.key
# Use this URL to generate a new JWT: https://developer.vonage.com/en/jwt
JWT=your_jwt_token
# Number of hours to check SIM Swap events
MAX_AGE=72
Client-seitige Implementierung
Hinzufügen von Inhalt und Styling
In der Datei index.html-Dateifügen wir zwei Formulare hinzu: eines für die Eingabe einer Telefonnummer und ein weiteres für die Anmeldung mit einer PIN. Dieses Layout ermöglicht es dem Benutzer, seine Identität sicher zu authentifizieren. Der Einfachheit und Klarheit halber belasse ich das Passwort im Klartext. In realen/produktiven Szenarien müssen Sie das Kennwort natürlich verschlüsseln und eventuell einen Salt-Wert hinzufügen, um die Sicherheit zu erhöhen.
In der Datei main.html-Dateibefindet sich das Dashboard unserer Bank, das nach erfolgreicher Anmeldung zugänglich ist.
Die Datei style.css-Datei enthält das Styling für beide HTML-Dateien. Sie können die einfachen Stile verwenden, die ich für dieses Projekt hinzugefügt habe, oder kreativ sein und Ihre eigenen erstellen!
Fügen Sie dieclient.js
Datei
In der Datei client.js-Dateiregeln wir, was passiert, wenn Benutzer Formulare auf unserer Website ausfüllen. Sie verwaltet die Schritte, bei denen die Benutzer ihre Telefonnummern eingeben und einen Verifizierungscode erhalten, wenn ihre SIM-Karte nicht kürzlich ausgetauscht wurde.
Das Skript teilt den Nutzern schnell mit, ob sie aufgrund eines kürzlich erfolgten SIM-Tauschs nicht authentifiziert werden können oder ob sie einen Code erhalten, mit dem sie sich anmelden können. So wird sichergestellt, dass nur Nutzer mit sicheren Konten auf sensible Funktionen zugreifen können.
Testen Sie es aus
Um alles in Aktion zu sehen, starten Sie die Anwendung, indem Sie sie ausführen:
node server.js
Öffnen Sie dann Ihren Webbrowser und navigieren Sie zu:
http://localhost:3000/
Stellen Sie sich vor, Sie haben Ihr Passwort vergessen. Klicken Sie auf "Passwort vergessen", um die Wiederherstellung zu starten. Sie werden aufgefordert, Ihre Telefonnummer einzugeben und eine Bestätigung anzufordern.
Wenn die Anwendung feststellt, dass die SIM-Karte vor kurzem ausgetauscht wurde, wird eine Warnung eingeblendet: Warnung! Eine kürzliche Änderung der SIM-Kopplung im Zusammenhang mit dem mobilen Konto des Benutzers ist erfolgt. Fortfahren?" Wenn Sie diesen Tausch nicht veranlasst haben und "Nein, ich war es nicht" wählen, ist dies ein Zeichen dafür, dass mit Ihrer Nummer möglicherweise ein Betrug vorliegt. Dies ist ein Hinweis darauf, dass Sie sich bei Ihrem Mobilfunkanbieter melden sollten.
Hinweis: In der Demonstration werden Sie aufgefordert, zu bestätigen, dass Sie die SIM-Karte ausgetauscht haben. In einem realen Szenario würde der Benutzer wahrscheinlich aufgefordert werden, sich direkt an den Dienstanbieter zu wenden, um die Identität zu überprüfen.
In ähnlicher Weise könnte dieser Ansatz auf die Multifaktor-Authentifizierung bei der Anmeldung angewandt werden, bei der vor der Übermittlung des Einmal-Tokens eine Überprüfung stattfindet. Wird ein kürzlich erfolgter SIM-Tausch festgestellt, wird der Nutzer aufgefordert, sich für weitere Identitätsprüfungen direkt an den Dienstanbieter zu wenden.
Wenn Sie hingegen Ihre SIM-Karte ausgetauscht und "Ja, ich war es" ausgewählt haben, verwendet die App die Verify-API, um einen Verifizierungscode an Ihr Telefon zu senden. Geben Sie diesen Code auf dem nächsten Bildschirm ein und legen Sie ein neues Passwort fest. Danach können Sie sich mit Ihren neuen Anmeldedaten bei Ihrem simulierten Bankkonto anmelden.
Schlussfolgerung
Herzlichen Glückwunsch, Sie haben das Ende dieses Lernprogramms erreicht! Sie haben gelernt, wie Sie mit der Verify-API ein Token verifizieren und mit der SIM-Swap-API feststellen können, ob die Telefonnummer in den letzten Tagen ausgetauscht wurde.
Wenn Sie weitere Fragen haben, wenden Sie sich an Vonage Community Slack oder senden Sie uns eine Nachricht auf X.
Weiter lesen
Sehen Sie sich den Blogbeitrag an: Verifizierungscode prüfen.
Sie können auch mehr über die SIM-Tausch-API in unserer Entwicklerdokumentation.
Erfahren Sie mehr über Erste Schritte mit der SIM Swap API.