Deutsch
  • hasura
  • restful api
  • graphql
  • logto
  • custom jwt
  • zugriffskontrolle
  • autorisierung

Logto x Hasura: Nutzung von JWT für Zugriffskontrolle

Dieser umfassende Leitfaden skizziert die Schritte zur Integration von Logto mit Hasuras JWT-Modus-Zugriffskontrolle und erhöht somit die Datensicherheit.

Darcy Ye
Darcy Ye
Developer

Hasura ist ein Werkzeug, das schnell entsprechende GraphQL- und REST-APIs für deine Daten bereitstellen kann. Aufgrund der Datensicherheit bietet Hasura auch die Möglichkeit, die Zugriffskontrolle für jede API feinzutunen.

In der Regel nutzen Hasura-Benutzer andere Identitätsmanagement- und Authentifizierungsdienste, wobei Logto einer der beliebtesten darunter ist.

In diesem Blogbeitrag gehen wir davon aus, dass du bereits Hasura-Dienste verwendest. Wir stellen vor, wie Hasura und Logto integriert werden können, um die Sicherheit deiner Daten zu maximieren. Wenn du noch kein Logto-Konto hast, melde dich an und beginne jetzt damit!

Hintergrund

Hasura verwendet rollenbasierte Zugriffskontrolle, während Logto den Standard Role-based Access Control (RBAC) nutzt.

In Logtos Modell und Best Practices für RBAC empfehlen wir Benutzern, scope für die feinste Granularität der Berechtigungen zu verwenden, role als eine Reihe von scopes für praktische Batch-Operationen zu nutzen und letztendlich scope (normalerweise auf der Seite der Ressourcenanbieter) zu überprüfen, um zu verifizieren, ob ein Benutzer eine bestimmte Operation durchführen kann.

In Hasura entspricht eine role der feinsten Granularität der Berechtigungen, und Berechtigungsprüfungen werden gegen roles durchgeführt. Daher empfehlen wir bei der Konfiguration von Logto, eine role genau einer scope zuzuordnen. Dieser Ansatz kann die Berechtigungen von Logto und Hasura verknüpfen, um Verwirrung und Missbrauch zu vermeiden.

Hasura kann Zugriffskontrolle mit Webhooks oder JWT unterstützen. In unserem vorherigen Blogbeitrag haben wir erklärt, wie man Webhooks verwendet, und in den folgenden Abschnitten erklären wir, wie man die Zugriffskontrolle im JWT-Modus von Hasura nutzt.

Erste Schritte

Beginnen wir mit einem einfachen Beispiel. Angenommen, ein Benutzer hat bereits zwei APIs in Hasura, GET /user und PATCH /user, die jeweils den Rollen user:reader und user:maintainer entsprechen.

1. Erstelle eine Hasura API-Ressource in Logto

Erstelle eine Hasura API-Ressource in Logto.

Hasura API

2. Erstelle Rollen entsprechend der Hasura-Konfiguration in Logto

Wir müssen zwei scopes für die in Schritt 1 erwähnte Hasura API-Ressource erstellen, nämlich read:user und maintain:user, und dann zwei Rollen erstellen: user:reader (enthält die read:user scope) und user:maintainer (einschließlich der maintain:user scope), um eins zu eins mit Hasuras Rollen zu korrespondieren. Weise diese Rollen den Logto-Benutzern nach Bedarf zu.

Hasura API mit scopes

Benutzerr Rolle

Benutzerverwalter Rolle

3. Konfiguriere die Hasura-Umgebungsvariable HASURA_GRAPHQL_JWT_SECRET, um den JWT-Modus zu aktivieren

Durch Überprüfung der Hasura JWT-Konfigurationsoptionen müssen wir die Umgebungsvariable HASURA_GRAPHQL_JWT_SECRET hinzufügen und konfigurieren, bevor wir JWT für die Zugriffskontrolle verwenden können.

Es gibt viele verschiedene Optionen, die konfiguriert werden können, aber hier stellen wir den einfachsten Fall vor: Nur die jwk_url muss konfiguriert werden. Dieser Wert kann von deinem Logto-OpenID-Konfigurationsendpunkt (https://your.logto.domain/oidc/.well-known/openid-configuration) abgerufen werden.

Hasura JWT-Konfiguration

4. Benutzerzugriffstoken anpassen für extra Claims

Verwende die benutzerdefinierte JWT-Funktion von Logto, um die Logik anzupassen und zusätzliche Claims zum JWT-formatigen Benutzerzugriffstoken hinzuzufügen.

Benutzerzugriffstoken-Skript

Passe die Methode getCustomJwtClaims an, um Daten im JWT hinzuzufügen, auf die Hasura für die Implementierung der Zugriffskontrolle angewiesen ist. Dazu können Daten gehören, die mit dem zum Zeitpunkt autorisierten Benutzer zusammenhängen, einschließlich der roles, die sie besitzen und die über context abgerufen werden können.

Wir haben auch eine Umgebungsvariable USER_DEFAULT_ROLE_NAMES definiert, um Hardcodierung zu vermeiden.

5. Logto SDK integrieren

Nach der Konfiguration von Logto und Hasura integriere deine App mit dem Logto SDK. Hier verwenden wir ein Next Beispiel, um das nach Benutzeranmeldung von Logto ausgestellte Benutzerzugriffstoken in der Vorschau anzuzeigen.

Benutzer mit Rollen

Zuerst weisen wir die zuvor erstellten user:reader und user:maintainer Rollen dem Benutzer zu und melden uns dann als dieser Benutzer an.

Holen dir das Benutzerzugriffstoken und fordere die Hasura-APIs an:

Fazit

In diesem Artikel bieten wir eine weitere Methode der JWT-basierten Zugriffskontrolle an, die von Hasura neben Webhook unterstützt wird.

Durch Vergleich der Prozesse der JWT-basierten Webhook- und JWT-Zugriffskontrolle von Hasura können wir sehen, dass der Webhook-Ansatz bei jeder Hasura-Anfrage ein Webhook an Logto sendet und auf eine Antwort wartet; während der JWT-basierte Ansatz kontinuierlich verwendet werden kann, bis das JWT abläuft.

Der JWT-Ansatz kann die Netzwerklast reduzieren und die durch Webhooks verursachte Netzwerkverzögerung eliminieren; während der Webhook-Ansatz Änderungen in Benutzerberechtigungen in Echtzeit synchronisieren kann.

Benutzer können anhand dieser Schlussfolgerungen in Kombination mit ihren tatsächlichen Geschäftsanforderungen den passenden Ansatz wählen.