
Teilen Sie:
Benjamin Aronov ist ein Entwickler-Befürworter bei Vonage. Er ist ein bewährter Community Builder mit einem Hintergrund in Ruby on Rails. Benjamin genießt die Strände von Tel Aviv, das er sein Zuhause nennt. Von Tel Aviv aus kann er einige der besten Startup-Gründer der Welt treffen und von ihnen lernen. Außerhalb der Tech-Branche reist Benjamin gerne um die Welt auf der Suche nach dem perfekten Pain au Chocolat.
Verhinderung von SIM-Swap-Betrug in Python mit der Identity Insights API
Lesedauer: 3 Minuten
SIM-Swap-Betrug ist eine wachsende Bedrohung für die mobile Sicherheit, bei der Angreifer die Telefonnummer eines Opfers kapern, indem sie sie auf eine neue SIM-Karte übertragen. Dadurch können sie Anrufe, SMS und sogar Zwei-Faktor-Authentifizierungscodes abfangen. Beängstigend!
In diesem Tutorial werden wir die Vonage Identity Insights API in Python verwenden, um potenzielle SIM-Tausche zu erkennen und Ihre Benutzer zu schützen.
>> TL;DR: Holen Sie sich den vollständigen funktionierenden Code auf GitHub
Voraussetzungen
Um mitzumachen, brauchen Sie:
Ein Vonage Developer Account
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.
Projekt einrichten
Erstellen einer Vonage-Anwendung
Um eine Anwendung zu erstellen, gehen Sie auf die Seite Erstellen einer Anwendung auf dem Vonage Dashboard und legen Sie einen Namen für Ihre Anwendung fest.
Wenn Sie eine API verwenden möchten, die Webhooks nutzt, benötigen Sie einen privaten Schlüssel. Klicken Sie auf "Generate public and private key", der Download sollte automatisch starten. Bewahren Sie ihn sicher auf; dieser Schlüssel kann bei Verlust nicht erneut heruntergeladen werden. Er folgt der Namenskonvention privat_<Ihre App-ID>.key. Dieser Schlüssel kann nun zur Authentifizierung von API-Aufrufen verwendet werden. Hinweis: Ihr Schlüssel funktioniert erst, wenn Ihre Anwendung gespeichert ist.
Wählen Sie die benötigten Funktionen (z. B. Voice, Nachrichten, RTC usw.) und stellen Sie die erforderlichen Webhooks bereit (z. B. Ereignis-URLs, Antwort-URLs oder URLs für eingehende Nachrichten). Diese werden im Lernprogramm beschrieben.
Zum Speichern und Bereitstellen klicken Sie auf "Neue Anwendung generieren", um die Einrichtung abzuschließen. Ihre Anwendung ist nun bereit für die Verwendung mit Vonage-APIs.
Ihr Python-Skript verwendet die Sandbox der Netzwerkregistrierung. Erstellen Sie dazu eine Vonage-Anwendung im Dashboard von Vonage mit:
Netzwerkregistrierungsfunktion aktiviert, und wählen Sie "Playground".
Erzeugen Sie eine
private.keymüssen Sie diese im folgenden Abschnitt in das Stammverzeichnis Ihres Verzeichnisses verschieben
Erstellen Sie Ihr Projekt und installieren Sie Abhängigkeiten
Erstellen Sie Ihren Projektordner und die Dateien in Ihrem Terminal.
mkdir sim_swap_checker
cd sim_swap_checker
touch main.py .env>> Sie können nun Ihre heruntergeladenen
private.keyin dassim_swap_checkerVerzeichnis verschieben.
2. Richten Sie eine virtuelle Umgebung ein.
Dadurch wird sichergestellt, dass Ihre Abhängigkeiten von Ihrem System Python isoliert bleiben.
python3 -m venv venv
source venv/bin/activate3. Installieren Sie die erforderlichen Pakete.
Wir verwenden requests um HTTP-Anfragen an die Identity Insights API zu stellen, python-dotenv um unsere API-Anmeldeinformationen sicher aus einer Umgebungsdatei zu laden, und vonage-jwt um sichere JWT-Tokens für die Authentifizierung unserer Anfragen zu erzeugen.
pip install requests python-dotenv vonage-jwt Konfigurieren Sie Ihre ENV-Datei
Fügen Sie die ID Ihrer Vonage-Anwendung und die Standard-Telefonnummer + Zeitraum in Stunden, für den die API die SIM-Swap-Prüfung durchführen wird.
Sie können in der API-Referenz für Identitätseinblicke sehen, dass der Einblick in Sim Swap von einem einzigen Parameter namens periodWir nennen ihn Stunde und setzen den Standardwert auf 240.
VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY_PATH=./private.key
PHONE_NUMBER=+990123455
DEFAULT_HOURS=240 Schreiben Sie das Python-Skript, um auf einen Sim-Tausch zu prüfen
Schritt 1: Einrichten der Importe und der Umgebung
In der Datei main.py erstellen wir das Hauptskript, das prüft, ob ein SIM-Tausch innerhalb eines benutzerdefinierten Zeitraums (Standardwert: 240 Stunden oder 10 Tage) stattgefunden hat.
Beginnen Sie mit dem Importieren der erforderlichen Bibliotheken und dem Laden der Umgebungsvariablen aus der .env-Datei. Dadurch wird sichergestellt, dass wir keine sensiblen Werte fest einprogrammieren, und es ist einfacher, die Telefonnummer und den Zeitraum schnell zu aktualisieren, um verschiedene Werte zu testen.
# main.py
import requests
from dotenv import load_dotenv
import os
from vonage_jwt import JwtClient
load_dotenv()
API_URL = "https://api-eu.vonage.com/v0.1/identity-insights"
PHONE_NUMBER = os.getenv("PHONE_NUMBER")
DEFAULT_HOURS = int(os.getenv("DEFAULT_HOURS"))
application_id = os.getenv("VONAGE_APPLICATION_ID")
private_key_path = os.getenv("VONAGE_PRIVATE_KEY_PATH") Schritt 2: Authentifizierung mit JWT
Bevor wir die Identity Insights API aufrufen können, müssen wir uns mit einem JSON-Web-Token (JWT). Dies ist für alle Vonage Network APIs erforderlich.
Ein JWT identifiziert Ihre Anwendung auf sichere Weise mit Ihrem APPLICATION_ID und des privaten Schlüssels und enthält Metadaten wie den Zeitpunkt der Ausstellung ( iat ) und wann es abläuft ( exp ). Diese Token werden mit dem RS256 Algorithmus signiert und sind in der Regel nur wenige Minuten lang gültig, was sie sicher und kurzlebig macht.
Unterhalb Ihrer Umgebungsvariablen initialisieren Sie Ihren JwtClient. Wir werden diesen Client verwenden, um den eigentlichen JWT zu generieren, wenn wir die API-Anfrage stellen.
with open(private_key_path, "r") as f:
private_key_str = f.read()
jwt_client = JwtClient(application_id, private_key_str) Schritt 3: Definieren der Core SIM Swap Check Funktion
Als Nächstes fahren wir unten fort und definieren eine check_sim_swap() Funktion, die eine Telefonnummer und einen Zeitraum in Stunden annimmt. Sie verwendet den JWT-Client zur Authentifizierung und sendet eine POST-Anfrage an die Identity Insights API.
# main.py
def check_sim_swap(phone_number, hours):
jwt_token = jwt_client.generate_application_jwt()
headers = {
"Authorization": f"Bearer {jwt_token}",
"Content-Type": "application/json"
}
payload = {
"phone_number": phone_number,
"purpose": "FraudPreventionAndDetection",
"insights": {
"format": {},
"sim_swap": {
"period": hours
}
}
}
print(f"\n🔍 Checking SIM swap status for {phone_number}...")
res = requests.post(API_URL, headers=headers, json=payload)
if res.status_code != 200:
print("❌ Error:", res.status_code, res.text)
return
data = res.json()Dieser Code setzt den Zweck auf "FraudPreventionAndDetection" eine Voraussetzung für die Verwendung von SIM-Swap-Einsichten. Wenn die API etwas anderes als ein 200 OKzurückgibt, wird der Fehler auf der Konsole ausgegeben und der Code beendet.
Schritt 4: Analysieren und Anzeigen der SIM-Tauschergebnisse
Als Nächstes extrahieren wir die SIM-Tauschdaten und prüfen den Antwortstatus. Wenn alles in Ordnung ist, zeigen wir an, ob im angegebenen Zeitraum ein SIM-Tausch erkannt wurde und wann der letzte SIM-Tausch stattgefunden hat.
sim_swap_info = data.get("insights", {}).get("sim_swap", {})
status_code = sim_swap_info.get("status", {}).get("code")
if status_code != "OK":
print(f"\n⚠️ SIM Swap check failed. Status: {status_code}")
print(" Message:", sim_swap_info.get("status", {}).get("message"))
return
swapped = sim_swap_info.get("swapped")
swap_time = sim_swap_info.get("latest_sim_swap_at")
print(f"\n🔒 SIM Swap Results:")
print(f" SIM Swapped: {'❌ Yes' if swapped else '✅ No'}")
print(f" Last SIM Swap: {swap_time if swap_time else 'None detected'}") Schritt 5: Hinzufügen eines CLI-Wrappers für Interaktivität
Schließlich fügen wir einen main Block hinzu, damit die Benutzer das Skript interaktiv über die Befehlszeile ausführen können. Es fordert zur Eingabe der Telefonnummer und der Anzahl der zu prüfenden Stunden auf und greift auf die Standardeinstellungen zurück, wenn keine eingegeben werden.
Die Virtuelle Vermittlungsstelle verfügt über 9 Telefonnummern für die Identity Insights API, die Sie zu Testzwecken verwenden können. Die API liefert deterministische SIM-Swap-Antworten:
Wenn
hours > 500gibt erswapped = trueWenn
hours < 500gibt erswapped = false
Sie können auch versuchen, mit allowlist numbers auf dem Network Registry Playground testen.
if __name__ == "__main__":
print("=== Vonage Identity Insights - SIM Swap Checker ===")
phone = input(f"Enter phone number [Default: {PHONE_NUMBER}]: ").strip() or PHONE_NUMBER
hours = input(f"How many hours ago to check for? [Default: {DEFAULT_HOURS}]: ").strip() or DEFAULT_HOURS
hours = int(hours)
check_sim_swap(phone, hours)>> Vergewissern Sie sich, dass dieser Code nicht automatisch von Ihrem Linter eingefügt wird, um innerhalb der
check_sim_swapFunktion.
Testen Sie das Skript mit dem virtuellen Operator
Jetzt können Sie Ihre kleine App testen!
python3 main.pyZunächst können Sie die Standardwerte verwenden und feststellen, dass der Sim nicht vertauscht wurde:
(venv) ➜ sim_swap_checker python main.py
=== Vonage Identity Insights - SIM Swap Checker ===
Enter phone number [Default: +990123455]:
How many hours ago to check for? [Default: 240]:
🔍 Checking SIM swap status for +990123455...
🔒 SIM Swap Results:
SIM Swapped: ✅ No
Last SIM Swap: 2025-07-10T08:48:55.143ZUnd dann können Sie einen Wert für Stunden verwenden, der höher als 500 ist, um einen Sim Swap zu sehen:
(venv) ➜ sim_swap_checker python main.py
=== Vonage Identity Insights - SIM Swap Checker ===
Enter phone number [Default: +990123455]:
How many hours ago to check for? [Default: 240]: 600
🔍 Checking SIM swap status for +990123455...
🔒 SIM Swap Results:
SIM Swapped: ❌ Yes
Last SIM Swap: 2025-07-10T08:50:16.733Z Schlussfolgerung
Mit nur wenigen Zeilen Python und der Vonage Identity Insights API können Sie SIM-Swap-Ereignisse identifizieren und proaktiv Hochrisikoszenarien in Ihren Applikationen kennzeichnen. Während diese Demo den Virtual Operator zum Testen verwendet, funktioniert das gleiche Setup in der Produktion, sobald Ihre Anwendung in der Netzwerk-Registrierung.
Haben Sie Fragen oder bauen Sie etwas Cooles? Besuchen Sie uns im Vonage Community Slackoder folgen Sie unserem YouTube-Kanal, oder abonnieren Sie den Entwickler-Newsletter für Updates.
Teilen Sie:
Benjamin Aronov ist ein Entwickler-Befürworter bei Vonage. Er ist ein bewährter Community Builder mit einem Hintergrund in Ruby on Rails. Benjamin genießt die Strände von Tel Aviv, das er sein Zuhause nennt. Von Tel Aviv aus kann er einige der besten Startup-Gründer der Welt treffen und von ihnen lernen. Außerhalb der Tech-Branche reist Benjamin gerne um die Welt auf der Suche nach dem perfekten Pain au Chocolat.
