https://a.storyblok.com/f/270183/1368x665/261b6977ca/multifactor-security-authentication.png

Verbessern Sie Ihre Multifaktor-Authentifizierung mit Verify API und SIM Swap Insight

Zuletzt aktualisiert am May 20, 2024

Lesedauer: 7 Minuten

Dieser Artikel wurde zuletzt aktualisiert am 4. März 2026

Einführung

SIM-Swap-Angriffe bergen viele Risiken, einschließlich Identitätsdiebstahl und Identitätsübernahme. In diesem Tutorial wird gezeigt, wie Sie die Sicherheit beim Zurücksetzen von Passwörtern erhöhen können, indem Sie überprüfen, ob Ihre SIM-Karte auf Ihrem Mobiltelefon ausgetauscht wurde, und eine SMS zur Wiederherstellung Ihres Accounts senden. Der Ablauf verwendet die Verify API zur Verifizierung eines Tokens und die Identitätseinblicke-API um festzustellen, ob eine SIM-Karte in den letzten Tagen ausgetauscht wurde. Ist dies der Fall, wird der Verifizierungscode nicht gesendet.

Hinweis: Die Network Powered Solutions 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.

  • Vonage API-Konto

    Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

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 Schnittstelle zu Vonages Identity Insights und Verify v2 APIs 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 Node-Projekt. Dadurch wird eine neue package.json Datei. Die -y Flagge füllt automatisch die Standardeinstellungen 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/identity-insights 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 Application mit Verify- und Identity Insights-Funktionen zu erstellen.

Nachdem Sie sich für einen Vonage Account angemeldet habenkönnen Sie im Dashboard eine neue Anwendung erstellen, indem Sie zu 'Ihre Applications'klicken Sie auf "Neue Anwendung erstellen", geben Sie ihr einen Namen, z. B. "Multifaktor-Authentifizierung", und schalten Sie Verify V2 und Network Powered Solutions ein.

Hinweis: Registrieren Sie Ihre Anwendung bei Vonage und den Communication Service Providern (CSP), bevor Sie die Identity Insights 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

Identity Insights SIM-Swap Übersicht

Der wichtige Aspekt der Identity Insights API, den wir für diese Demonstration verwenden werden, ist ihre Fähigkeit zu prüfen, ob der Swap in den letzten Tagen stattgefunden hat, um den Nutzer darauf hinzuweisen, dass ein möglicher Betrug vorliegt, wenn der Swap nicht von ihm selbst vorgenommen wurde.

SIM Swap insight stärkt SIM-basierte Authentifizierungsmethoden, einschließlich SMS One-Time Passwords und stille Authentifizierung. Es 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 Datei server.js ist unser Hauptserver-Skript, das mit den Vonage Identity Insights und Verify v2 APIs integriert wird, um Benutzer sicher zu authentifizieren. Es dient auch zur Bereitstellung der Webseiten für unser Banking-Dashboard und übernimmt die Benutzeranmeldung und -verifizierung.

Einrichten des Identity Insights-Client

Beim Start werden zwei Clients initialisiert: der Hauptclient von Vonage für Verify v2 und ein spezieller IdentityInsights Client für SIM-Swap-Prüfungen. Beide authentifizieren sich mit Ihrer Anwendungs-ID und Ihrem privaten Schlüssel, so dass keine manuelle Verwaltung von OAuth2-Tokens erforderlich ist.

const { Vonage } = require("@vonage/server-sdk");
const { Auth } = require("@vonage/auth");
const { Channels } = require("@vonage/verify2");
const { IdentityInsights } = require("@vonage/identity-insights");

const vonage = new Vonage(
  new Auth({
    applicationId: APPLICATION_ID,
    privateKey: keyContent,
  })
);

const identityClient = new IdentityInsights({
  applicationId: APPLICATION_ID,
  privateKey: keyContent,
});

SIM-Swap-Prüfung

Die Funktion checkSim Funktion prüft, ob die Telefonnummer vor kurzem mit Hilfe des Identity Insights SDK ausgetauscht wurde. Ich habe eine PERIOD Umgebungsvariable gesetzt, die Sie auf die Anzahl der Stunden setzen können, vor denen Sie prüfen wollen, ob der SIM-Tausch stattgefunden hat.

Sie können SIM Swap Insight auch verwenden, um das Datum und die Uhrzeit des letzten SIM-Wechsels zu erfahren. Erfahren Sie mehr über einen API-Aufruf mit SIM Swap Insight.

async function checkSim() {
  try {
    const resp = await identityClient.getIdentityInsights({
      phoneNumber: phoneNumber,
      purpose: "FraudPreventionAndDetection",
      insights: {
        simSwap: {
          period: parseInt(PERIOD),
        },
      },
    });

    return resp.insights?.simSwap?.isSwapped === true;
  } catch (error) {
    console.warn("Identity Insights SDK call failed:", error && error.message);
  }
}

Verify V2 API hinzufügen

In unserem Anwendungsfall ermöglicht es uns die Verify V2 API, einen Verifizierungscode an die Telefonnummer eines Nutzers zu senden, wenn kein kürzlich erfolgter SIM-Wechsel festgestellt wurde.

SIM-Wechsel-Route

Die /simswap-Route führt die SIM-Swap-Prüfung separat durch, so dass der Client das Ergebnis verarbeiten kann, bevor er entscheidet, ob er einen Prüfcode anfordert:

app.post("/simswap", async (req, res) => {
  phoneNumber = req.body.phone;
  try {
    const simSwapped = await checkSim();
    res.json({
      swapped: simSwapped,
    });
  } catch (error) {
    console.error("Error checking SIM swap:", error);
    res.status(500).json({ message: "Error processing request." });
  }
});

Antrag auf Verifizierung

Im Folgenden wird eine Verifizierungsanfrage bearbeitet. Sobald der Client das Ergebnis der SIM-Swap-Prüfung bestätigt hat und der Benutzer fortfahren möchte, senden wir einen Verifizierungscode über die Verify V2 API:

app.post("/sendcode", async (req, res) => {
  const phone = process.env.RECIPIENT_NUMBER ? process.env.RECIPIENT_NUMBER : req.body.phone;
  try {
    const response = await vonage.verify2.newRequest({
      brand: "Vonage Bank",
      workflow: [
        {
          channel: Channels.SMS,
          to: phone,
        },
      ],
    });
    verifyRequestId = response.requestId;
    res.json({
      message: "Verification code sent.",
      verifycode: true,
      request_id: verifyRequestId,
    });
  } catch (error) {
    console.error("Error during verification:", error);
    res.status(500).json({ message: "Error processing request.", verifycode: false });
  }
});

PIN-Einreichung

Sobald der Nutzer seinen Code erhalten hat, kann er ihn ganz einfach einreichen:

app.post("/verify", (req, res) => {
  const { pin, newPass } = req.body;
  vonage.verify2
    .checkCode(verifyRequestId, pin)
    .then((status) => {
      if (status === "completed") {
        const user = Object.values(users).find(user => user.username === "user1");
        if (user) {
          user.password = newPass;
        } else {
          res.status(404).json({ message: "User not found." });
          return;
        }
        res.json({ message: "Success" });
      } else {
        res.json({ message: "Invalid verification code. Please try again." });
      }
    })
    .catch((err) => {
      console.error("Error during PIN verification:", err);
      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.

It shows where the API Key and API Secrets are. Right under the text API key and API Secret]Vonage Dashboard

# Your Vonage application 
VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY=/path/to/your/private.key


# Number of hours to check SIM Swap events
PERIOD=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!

Hinzufügen der Datei client.js

In der Datei client.js-Dateiwerden die Formulareingaben auf unserer Website bearbeitet. Sie verwaltet die Schritte, bei denen 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 Accounts 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 kürzlich ausgetauscht wurde, wird eine Warnung angezeigt: "Warnung! Für den mobilen Account des Benutzers wurde kürzlich ein SIM-Kopplungswechsel durchgeführt. Fortfahren?"Wenn Sie diesen Tausch nicht veranlasst haben und 'Nein, ich war es nicht' wählen, ist das ein Zeichen dafür, dass es sich bei Ihrer Nummer um einen Betrug handeln könnte. 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 für weitere Identitätsprüfungen direkt an den Dienstanbieter zu wenden.

In ähnlicher Weise könnte dieser Ansatz auf die Multifaktor-Authentifizierung bei der Anmeldung angewandt werden, bei der vor der Übermittlung des einmaligen 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 Tutorials erreicht! Sie haben gelernt, wie Sie mit der Verify API ein Token verifizieren und mit SIM Swap Insight feststellen können, ob die Telefonnummer in den letzten Tagen ausgetauscht wurde.

Haben Sie eine Frage oder möchten Sie etwas mitteilen? Beteiligen Sie sich am Gespräch auf dem Vonage Community Slackund bleiben Sie auf dem Laufenden mit dem Entwickler-Newsletter, folgen Sie uns auf X (früher Twitter), abonnieren Sie unseren YouTube-Kanal für Video-Tutorials, und folgen Sie der Vonage Entwickler-Seite auf LinkedInein Raum für Entwickler, um zu lernen und sich mit der Community zu vernetzen. Bleiben Sie in Verbindung, teilen Sie Ihre Fortschritte und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden!

Teilen Sie:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroAdvokat für Entwickler