====== Erstellung eines QR-Codes für 2FA ====== Dieses Beispiel erstellt einen QR-Code für das Hinzufügen eines Kontos im Google Authenticator. Voraussetzungen: * Integration der PHP-Klasse [[php:qr_code|QRCode]] in Ihr Projekt um den QR-Code zu erzeugen * Integration von [[https://github.com/Voronenko/PHPOTP|PHPOTP]] in Ihr Projekt, um einen Base32-Code zu errechnen. Der "key" sollte eindeutig sein und keine Bestandteile der anderen Login-Daten (Benutzername und Passwort) oder des Users (Name, Vorname, Geburtsdatum, etc.) beinhalten. Der "key" muss dauerhaft (z. B. in einer mySQL-Datenbank) gespeichert werden, damit der vom User eingegebene Token später wieder validiert werden kann. include( 'oauth2/base32static.php'); include( 'phpqrcode/qrlib.php' ); function getSecret( $key ) { $secret = Base32Static::encode( $key ); return str_replace( "=", "", $secret ); } function createQR( $secret, $account, $issuer ) { $text = "otpauth://totp/" . urlencode( $account ); $text .= "?secret=" . urlencode( $secret ); $text .= "&issuer=" . urlencode( $issuer ); QRcode::png( $text, false, QR_ECLEVEL_M ); } createQR( getSecret( 'MySecretPassword'), "account@domain.de", "Name of Website" ); ===== Erläuterung der Parameter ===== Schematischer Aufbau der URL otpauth://TYPE/LABEL?PARAMETERS **TYPE** | totp | offener Standard mit Berücksichtigung der aktuellen Uhrzeit | | hotp | Anstatt Uhrzeit wird hier ein Zähler verwendet | **LABEL** Benutzername des Kontos (z. B. account@domain.de) **PARAMETERS** | secret | In base32 codierter key | | issuer | Aussteller (z. B. Name der Firma) | | counter | Beim TYP "hotp" ist die Angabe des Zählers notwendig | Weitere Infos unter https://github.com/google/google-authenticator/wiki/Key-Uri-Format