Eingehende Analyse der tokenbasierten Authentifizierung und OAuth 2.0 in MQTT

Zusätzlich zu den in den vorherigen Artikeln erwähnten Authentifizierungsmethoden wird in diesem Artikel eine eingehende Analyse und Diskussion anderer Authentifizierungsmethoden durchgeführt.

Konkret werfen wir einen detaillierten Blick auf die tokenbasierte Authentifizierung und OAuth 2.0, erklären ihre Prinzipien und zeigen ihre Anwendung in MQTT.

Tokenbasierte Authentifizierung

Machen wir uns zunächst mit der tokenbasierten Authentifizierung vertraut und verstehen einige ihrer Vorteile gegenüber der herkömmlichen Authentifizierung mit Benutzername und Passwort.

Was ist tokenbasierte Authentifizierung?

Einfach ausgedrückt verwendet die tokenbasierte Authentifizierung Token zur Überprüfung der Clientidentitäten anstelle herkömmlicher Anmeldeinformationen (wie Benutzernamen und Passwörter). Der Vorgang ähnelt dem Betreten eines Hotelzimmers mit einer elektronischen Schlüsselkarte. Wenn Sie Ihren Ausweis an der Rezeption vorzeigen, erhalten Sie eine elektronische Schlüsselkarte, mit der Sie die Hoteltür öffnen können. Diese elektronische Türkarte fungiert während Ihres Aufenthalts als Token. Sie müssen sich nicht bei jedem Betreten des Zimmers an der Rezeption ausweisen, sondern ziehen einfach die Karte durch.

Ein wichtiges Merkmal des Tokens ist, dass er eine begrenzte Gültigkeitsdauer hat und nach Ablauf ablaufen kann. Beispielsweise funktioniert Ihre Hotelschlüsselkarte nach dem Auschecken nicht mehr. Sie können jedoch in einem anderen Hotel einchecken und eine Schlüsselkarte für ein neues Zimmer erhalten. Daher ist Token im Vergleich zu Benutzername und Passwort flexibler und einfacher zu verwalten. Der elektronische Schlüsselkartenleser an der Hotelzimmertür muss keinen gültigen Benutzernamen und kein gültiges Passwort aufzeichnen, sondern lediglich die Zimmernummer und das Ablaufdatum auf der Schlüsselkarte überprüfen.

Im Folgenden werden wir uns mit einigen tokenbasierten Authentifizierungsmethoden befassen, die für MQTT geeignet sind.

Tokenbasierte MQTT-Authentifizierungsmethode

In MQTT verwenden wir normalerweise JWT für die Token-Authentifizierung.

JWT (JSON Web Token) ist eine prägnante Möglichkeit, die Clientidentität im MQTT Broker zu überprüfen. Der Client sendet ein signiertes JWT-Token an den Broker und der Broker überprüft die Identität des Clients anhand des Tokens. Der Broker muss den Benutzernamen und das Passwort des Kunden nicht speichern.

JWT Token besteht aus folgenden Teilen:

  • Header : In Base64 codiert – Beschreibt den Algorithmus, der zum Generieren der Signatur verwendet wird.
  • Nutzlast : In Base64 kodiert – Enthält Ansprüche, die den Client authentifizieren können.
  • Signatur : Nachdem Sie den Header und die Nutzlast verkettet haben, codieren Sie ihn mit Base64 und signieren Sie ihn dann mit einem Schlüssel.

Das folgende Diagramm zeigt die Struktur eines JWT:

Struktur von JWT

Beachten Sie, dass der Header und die Nutzdaten nicht verschlüsselt sind, sondern lediglich mit der Base64-Binär-zu-Text-Kodierungsfunktion kodiert werden. Da es sich um eine umkehrbare Funktion handelt, dekodieren Sie die Funktion einfach mit Base64, um den Inhalt leicht erkennen zu können. Platzieren Sie daher keine vertraulichen Informationen im Header- und Payload-Bereich. Außerdem ist es am besten, Clientverbindungen mit TLS zu verschlüsseln. Das JWT wird mit einem geheimen Schlüssel signiert .

Der Broker muss überprüfen, ob das JWT gültig ist. Dies kann auf zwei Arten erreicht werden: Zum einen wird der Schlüssel lokal gespeichert, wobei es sich um einen mit dem Client geteilten Schlüssel oder um einen öffentlichen Schlüssel handeln kann, der dem privaten Schlüssel entgegengesetzt ist, der zum Ausstellen des JWT verwendet wird. Zum anderen wird JWKS verwendet ( JSON Web Key Set) ist JWKS ein Satz öffentlicher Schlüssel, mit denen überprüft werden kann, ob der Schlüssel gültig ist. Der Broker kann den öffentlichen Schlüssel über den JWKS-Endpunkt erhalten, ohne ihn selbst zu besitzen.

Nachdem das JWT-Token ausgestellt wurde, kann es nicht mehr widerrufen werden, nur bis es abläuft. Bewahren Sie es daher unbedingt an einem sicheren Ort auf. Sollte es in die falschen Hände geraten, kann ein Angreifer damit Zugriff auf den Broker erlangen.

Das JWT-Token kann mithilfe eines Authentifizierungsservers abgerufen werden. In diesem Fall stellt der Client zunächst eine Verbindung zum Authentifizierungsserver her und der Authentifizierungsserver stellt dem Client nach Überprüfung seiner Identität ein JWT-Token aus. Der Client verwendet dieses Token, um eine Verbindung zum Broker herzustellen.

Die folgende Abbildung zeigt diesen Vorgang:

Tokenbasierte Authentifizierungsmethode für MQTT

Unten finden Sie ein Beispiel für eine JWT-Nutzlast.

{
 "clientid": "client1",
 "username": "user1",
 "iat": 1516239022,
 "nbf": 1678114325,
 "exp": 1709649185
}

Zusätzlich zu den Feldern „clientid“ und „username“ kann das JWT-Token auch einige Zeitfelder enthalten, die zur Angabe der Gültigkeitsdauer des Tokens verwendet werden. Diese Zeitfelder stellen die Unix-Zeit in Sekunden seit dem 1. Januar 1970 dar.

  • „iat“ : Ausgabezeit – Datum und Uhrzeit der Ausgabe des Tokens. Ausgedrückt in Unix-Zeit.
  • „nbf“ : Gültigkeitszeit – Datum und Uhrzeit, wann das Token wirksam wird. Ausgedrückt in Unix-Zeit.
  • „exp“ : Ablaufzeit – Datum und Uhrzeit, wann das Token abläuft. Ausgedrückt in Unix-Zeit.

Beachten Sie, dass Sie mithilfe des Felds „nbf“ ein JWT ausgeben können, das zu einem späteren Zeitpunkt gültig ist.

OAuth 2.0

Im vorherigen Abschnitt haben wir das Format des JWT-Tokens vorgestellt, aber nicht erklärt, wie man das Token erhält. Sehen wir uns als Nächstes an, wie man OAuth 2.0 mit JWT verwendet, um Clients den Zugriff auf den Broker zu ermöglichen.

Was ist OAuth 2.0?

OAuth 2.0 ist ein Framework, das Benutzern den Zugriff auf Ressourcen auf anderen Websites oder Anwendungen ermöglicht, indem sie ihre Anmeldeinformationen verwenden, die bei einem unabhängigen Authentifizierungs- und Autorisierungsserver (wie Google, Facebook, GitHub usw.) registriert sind. Auf diese Weise müssen Benutzer nicht für jede Website oder Anwendung unterschiedliche Passwörter festlegen und nutzen die Wirkung von Single Sign-On (SSO). Benutzer können dieselben Google-Anmeldeinformationen in verschiedenen Anwendungen verwenden.

Ursprünglich war OAuth 2.0 als Autorisierungsrahmen konzipiert, um Anwendungen von Drittanbietern eingeschränkten Zugriff auf bestimmte Ressourcen zu gewähren. Ein häufiges Beispiel ist der schreibgeschützte Zugriff auf Gmail-Kontakte. Wir können zulassen, dass die App unsere Kontakte liest, möchten aber nicht, dass sie diese löscht. Ein Problem, das OAuth 2.0 löst, besteht darin, dass es die Sicherheit erhöht, indem es uns ermöglicht, einer Drittanbieteranwendung Zugriff auf unsere Kontakte zu gewähren, ohne der Anwendung unser Gmail-Passwort mitzuteilen.

Um die Authentifizierung mithilfe des OAuth 2.0-Protokolls zu erleichtern, wurde eine OAuth 2.0-Erweiterung namens OpenID Connect ins Leben gerufen. Diese Erweiterung definiert eine Standardmethode zur Authentifizierung mit OAuth 2.0. Da die Authentifizierung Gegenstand dieses Artikels ist, kombinieren wir OAuth 2.0 und OpenID Connect, um den Autorisierungsmechanismus für MQTT-Clients für den Zugriff auf Broker zu implementieren.

Wie funktioniert OAuth 2.0 mit MQTT?

Der Client kann OAuth 2.0 und OpenID Connect verwenden, um das entsprechende JWT abzurufen und das JWT dann an den Broker zu senden. Bezugnehmend auf das Bild oben besteht der erste Schritt darin, dass der MQTT-Client ein JWT-Token vom Authentifizierungsserver beantragt. Wir gehen hier davon aus, dass der Authentifizierungsserver OAuth 2.0 mit der OpenID Connect-Erweiterung unterstützt. OpenID Connect schreibt vor, dass das vom Authentifizierungsserver zurückgegebene Token im JWT-Format vorliegen muss. Nachdem der Client das JWT erhalten hat, kann er es an den Broker senden. Normalerweise wird JWT im Passwortfeld der CONNECT-Nachricht an den Broker gesendet.

Epilog

Als weltweit führender MQTT-Broker bietet EMQX eine Vielzahl von Authentifizierungsmethoden, einschließlich JWT-Authentifizierung. Sie können HMAC als Signaturschema oder das sicherere RSA wählen oder direkt einen JWKS-Endpunkt für EMQX konfigurieren, um die JWT-Authentifizierung zu aktivieren.

Durch den Einsatz dieser zusätzlichen Authentifizierungsmethoden können Sie den Schutz des gesamten Systems vor unbefugtem Zugriff und potenziellen Sicherheitsbedrohungen erhöhen. Da die Technologie immer weiter voranschreitet, wird es immer wichtiger, über die neuesten Authentifizierungstechniken auf dem Laufenden zu bleiben.

Copyright-Erklärung: Dieser Artikel ist ein Original von EMQ. Bitte geben Sie für den Nachdruck die Quelle an.
Ursprünglicher Link: https://www.emqx.com/zh/blog/a-deep-dive-into-token-based-authentication-and-oauth-2-0-in-mqtt

Supongo que te gusta

Origin blog.csdn.net/emqx_broker/article/details/131702350
Recomendado
Clasificación