Verwenden der Authy-API mit Google Authenticator (oder anderen kompatiblen Authentifikator-Apps)

August 18, 2020
Autor:in:
Prüfer:in:

Verwenden der Authy-API mit Google Authenticator (oder anderen kompatiblen Authentifikator-Apps)


Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von How to use the Authy API with Google Authenticator (or any compatible authenticator app). Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an help@twilio.com freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)

Zeitbasierte Einmalpasswörter (TOTP) sind eine Methode, um kurzlebige Authentifizierungstoken zu erzeugen, die gewöhnlich für die Zwei-Faktor-Authentifizierung (2FA) verwendet werden. Der Algorithmus für TOTP wird in RFC 6238 definiert, was bedeutet, dass der offene Standard auf kompatible Weise in mehreren Anwendungen implementiert werden kann. Wir kennen TOTP vielleicht von Apps wie Authy oder Google Authenticator, aber es gibt noch viele weitere Optionen, darunter Duo und Microsoft Authenticator.

Wenn wir unsere Benutzer zur Aktivierung von 2FA bewegen können, dann haben wir im Kampf um eine bessere Kontosicherheit schon halb gewonnen. Deshalb empfehle ich, Kunden flexibel entscheiden zu lassen, welche Authentifikator-App sie verwenden möchten.

Bei der Authy-API (ist mit der Authy-App verbunden, unterscheidet sich aber von ihr) werden Benutzer zwar standardmäßig in der Authy-App registriert, aber in diesem Blog zeige ich, wie die API so verwendet werden kann, dass unsere Benutzer eine Authentifikator-App ihrer Wahl nutzen können.

Wusstest du schon? TOTP ist ein offener Standard, das heißt, jedes Mal, wenn eine App die Verwendung von Google Authenticator fordert, können wir den QR-Code mit Authy, Duo, Microsoft Authenticator oder jeder anderen App scannen, die diesen Standard implementiert.

Wie funktioniert TOTP?

Zu den Eingaben in den TOTP-Algorithmus gehören ein geheimer Schlüssel und unsere Systemzeit. Diese Eingaben werden durch eine Einwegfunktion geschleust, die ein abgeschnittenes, lesbares Token erzeugt. Da die Eingaben offline verfügbar sind, funktioniert die gesamte Methode offline. Das ist eine gute Option für Benutzer, die möglicherweise instabile Mobilfunkverbindungen für den Empfang von SMS-2FA haben, oder für Benutzer, die sich einen sichereren Kanal als SMS-2FA wünschen.

totp-diagram.png

Hier sehen wir, wie ein Benutzer von der Authy-App dazu aufgefordert wird, ein neues Konto hinzuzufügen. Unsere Empfehlung lautet, den QR-Code zu scannen, der Schlüssel kann aber auch manuell eingegeben werden. So wird der geheime Schlüssel zwischen Konto und Authentifikator-App synchronisiert.

Scan QR Authy

Implementieren der TOTP-2FA in einer Anwendung

Wir empfehlen aus folgenden Gründen, die Authy-API zum Implementieren von TOTP in einer Anwendung zu verwenden:

  • Sie verwaltet das Erzeugen und Bestätigen von Sicherheitscodes.
  • Sie ist SOC2-konform.
  • Sie verfügt über unseren Endbenutzer-Support.
  • Sie verfügt auch über SMS-, Sprach- und E-Mail-Kanäle zur Unterstützung von Fallback oder Benutzerauswahl.

Um einen Benutzer für eine Authentifikator-App zu registrieren, sind einige Schritte erforderlich.

Zuerst melden wir uns bei unserem Twilio-Konto an (oder erstellen ein neues Konto) und erstellen dann eine Authy-Anwendung in der Twilio-Konsole.

Erstellen einer neuen Authy-Anwendung

Als Nächstes aktivieren wir generische TOTP-Token in der Konsole. Wir scrollen nach unten und speichern unsere Änderungen.

Aktivieren von generischen TOTP-Token in der Konsole

Um TOTP-Codes zu bestätigen, müssen wir jeden Benutzer bei der API registrieren, damit eine eindeutige Authy-ID für jeden Benutzer erzeugt wird.

Wir können Benutzer auf drei verschiedene Arten in unserer Anwendung registrieren:

  1. In der Konsole (Telefonnummer und E-Mail-Adresse des Benutzers erforderlich)
  2. Mit der Authy-API (mit Telefonnummer und E-Mail-Adresse des Benutzers)
  3. Mit der Authy-API (ohne PBD wie Telefonnummer oder E-Mail-Adresse)

Registrieren von Benutzern in einer App mit der Twilio Authy-Konsole

Auf der Registerkarte „Users“ (Benutzer) in der Konsole unserer Authy-Anwendung klicken wir auf das rote Pluszeichen, um einen neuen Benutzer hinzuzufügen. Dazu benötigen wir Telefonnummer und E-Mail-Adresse des Benutzers.

 

Benutzeransicht in der Authy-Konsole

Registrieren von Benutzern in einer App mit der Authy-API

Benutzer können über die API auf zwei verschiedene Arten hinzugefügt werden: mit und ohne PBD. Wir sehen uns hier ein Beispiel mit Verwendung von personenbezogenen Daten (PBD) an.

Wir stellen eine Anfrage an die Ressource „Users“ (Benutzer), um einen neuen Benutzer mit dem Authy-API-Schlüssel unserer Anwendung zu erstellen. In diesem Beispiel verwenden wir cURL, aber wir können das auch in einer anderen bevorzugten Sprache vornehmen. In der Dokumentation sind Beispiele in weiteren Sprachen aufgeführt.

Den Authy-API-Schlüssel finden wir in der Konsole auf der Registerkarte mit den Einstellungen der Authy-Anwendung:

Authi-API-Schlüssel

Wir registrieren den Benutzer mit dem folgenden Befehl:

curl -XPOST "https://api.authy.com/protected/json/users/new" \
-H "X-Authy-API-Key: <your Authy API Key here>" \
--data-urlencode 'user[email]=user@domain.com' \
--data-urlencode 'user[cellphone]=317-338-9302' \
--data-urlencode 'user[country_code]=54'

Oder: Wir folgen den Anweisungen in der Dokumentation zum Hinzufügen eines Benutzers ohne PBD.

Beide Methoden geben eine Authy-ID für den neu registrierten Benutzer zurück. Wir speichern diese zusammen mit den Benutzerdatensätzen, da die ID ein erforderlicher Parameter für nachfolgende API-Anfragen ist.

Erstellen eines QR-Codes für die Integration in Google Authenticator oder eine andere vom Benutzer bevorzugte TOTP-App

Der Benutzer ist jetzt bei der Authy-App registriert. Solange er sich bei der Client-App (iOS, Android oder Computer) mit derselben Telefonnummer, die wir für seine Registrierung verwendet haben, angemeldet hat, wird unser Konto automatisch als Kachel in der Authy-App angezeigt.

Wenn der Benutzer eine andere App verwenden möchte, müssen wir einen QR-Code erzeugen, damit er den geheimen Schlüssel mit der Authentifikator-App seiner Wahl synchronisieren kann.

Wir erzeugen einen QR-Code mit dem folgenden Befehl. Unsere Empfehlung lautet, im Feld „label“ etwas Identifizierbares einzugeben, damit der Benutzer weiß, an welchen Benutzernamen oder an welche E-Mail-Adresse dieser Authentifizierungsfaktor gebunden ist:

curl -XPOST "https://api.authy.com/protected/json/users/<AUTHYID>/secret" \
-H "X-Authy-API-Key: <your Authy API Key here>" \
-d label="Kelley - krobinson@twilio.com"

Das folgende JSON wird zurückgegeben:

{
  "issuer": "Authy and Google Authenticator",
  "label": "Kelley - krobinson@twilio.com",
  "qr_code": "https://s3.amazonaws.com/qr-codes-xxxxxxxxxxxxx/yyyyyyyyyyyyyy.png",
  "success": true
}

Die im QR-Code codierten geheimen Schlüssel sind 24 Stunden gültig. Danach verfällt der Code und wir müssen einen neuen QR-Code erzeugen. Wir lassen den QR-Code unter dem Link dem Endbenutzer anzeigen, damit er ihn mit der App seiner Wahl scannen kann. Nachdem ich den QR-Code gescannt habe, sieht das Ergebnis in Google Authenticator so aus:

Google Authenticator Added Token

Bevor wir einen Benutzer als „2FA aktiviert“ markieren, müssen wir dafür sorgen, dass er mindestens eine erfolgreiche Bestätigung mit der neuen Authentifikator-App-Einrichtung durchgeführt hat.

Bestätigen eines TOTP-Codes mit der Authy-API

Wir verwenden den folgenden Befehl, wobei wir TOKEN und AUTHY_ID durch die entsprechenden Werte ersetzen.

curl -i "https://api.authy.com/protected/json/verify/{TOKEN}/{AUTHY_ID}" \
   -H "X-Authy-API-Key: <your Authy API Key here>"

Wenn wir diesen Befehl mit einem generischen Authentifikator-Token, z. B. von Google oder Microsoft Authenticator, ausführen, wird Folgendes zurückgegeben:

{
  "message": "Token is valid.",
  "token": "is valid",
  "success": "true",
  "device": {
    "id": null,
    "os_type": "generic",
    "registration_date": 1597437548,
    "registration_method": null,
    "registration_country": null,
    "registration_region": null,
    "registration_city": null,
    "country": null,
    "region": null,
    "city": null,
    "ip": null,
    "last_account_recovery_at": null,
    "last_sync_date": null
  }
}

Wir sehen eine Menge null-Daten zum Gerät, weil wir nichts über das Gerät wissen, das der Benutzer besitzt. Wenn der Benutzer alternativ einen Authy-Anwendungstoken verwendet, enthält die API-Antwort zusätzliche Informationen zu seinem Gerät.

Die Authy-Hilfebibliotheken für Python, Ruby, PHP, Node.js und Java unterstützen diesen API-Aufruf ebenfalls. Weitere Informationen findest du in der Dokumentation zu Authy-Einmalpasswörtern.

Wie geht es weiter?

Gut gemacht! Du konntest deine Benutzer jetzt für 2FA registrieren. Mehr Flexibilität bietet das Senden von Einmalpasswörtern via SMS, Sprache oder sogar E-Mail. Weitere Informationen dazu findest du in der entsprechenden API-Dokumentation. Das Schöne an der Authy-API ist, dass wir die Token mit derselben API bestätigen können, unabhängig von der Methode, mit der das Token gesendet wird.

Benötigst du Hilfe, Benutzer zur Aktivierung von 2FA zu bewegen? Dann findest du Antworten darauf in meinem Blog So kannst du Benutzer dazu anregen, 2FA zu aktivieren. Wenn du noch mehr darüber erfahren möchtest, dann sieh dir meinen Vortrag zu 2FA-Kanälen und den damit verbundenen Kompromissen an, den ich bei BSides San Francisco dieses Jahr gehalten habe.

Hast du noch Fragen, wie du mit 2FA am besten beginnst? Dann hinterlasse einen Kommentar oder kontaktiere mich auf Twitter @kelleyrobinson. Ich bin gespannt, von deinen Entwicklungen zu hören.