• graphql
  • hasura
  • api

Logto x Hasura: Jak używać open-source auth + GraphQL, aby zwiększyć swój projekt

W tym artykule skupimy się na połączeniu Logto i Hasura, co umożliwia wdrożenie uwierzytelniania, autoryzacji i GraphQL API bez tarć. Dzięki temu możesz szybko rozpocząć swoją działalność bez nauki na poziomie rakietowym.

Gao
Gao
Founder

Wprowadzenie

Kiedy rozpoczynasz nowy projekt, zazwyczaj nie możesz pominąć kilku rzeczy: API, uwierzytelniania + autoryzacji, tożsamości i przepływu logowania końcowego użytkownika. Kiedyś trudno było zacząć te rzeczy, ponieważ istnieje wiele koncepcji i technologii, które są szeroko rozpowszechnione: RESTful/GraphQL, frontend internetowy, natywny klient, łączenie klientów z API, najlepsze praktyki autoryzacji do zrównoważenia bezpieczeństwa i doświadczenia użytkownika, itp.

Większość z tych prac jest również "powtarzana". To znaczy, że są one potrzebne i podobne dla prawie każdego projektu, z pewnymi modyfikacjami.

Brzmi przerażająco i nużąco? Nie panikuj. Dziś mamy open source. Dzięki dwóm poniższym projektom open-source rzeczy stają się mniej skomplikowane:

  • Logto: Pomaga w budowaniu logowania, autoryzacji i tożsamości użytkownika w ciągu kilku minut.
  • Hasura: Niezwykle szybkie, natychmiastowe, rzeczywiste GraphQL API na twojej bazie danych z precyzyjną kontrolą dostępu.

W tym artykule skupimy się na połączeniu Logto i Hasura, co umożliwia wdrożenie uwierzytelniania, autoryzacji i GraphQL API bez tarć. Dzięki temu możesz szybko rozpocząć swoją działalność bez nauki na poziomie rakietowym.

Rozpoczęcie

Wymagania wstępne

Ponieważ zarówno Logto, jak i Hasura mają przyzwoity przewodnik startowy, zakładamy, że je przeczytałeś i masz podstawowe pojęcie. Potrzebny jest dostęp do działającej instancji obu.

Zakładamy, że dostępne punkty końcowe to:

  • Logto: http://localhost:3001
  • Hasura: http://localhost:8080

Zakładamy również, że masz preferowaną platformę i framework do budowy aplikacji klienckiej, powiedzmy React lub Next.js.

Konfiguracja API w Logto

W lewym pasku nawigacyjnym w Logto Admin Console, kliknij „API Resources”, a zobaczysz stronę zarządzania zasobami API.

Następnie kliknij duży przycisk „+ Create API Resource” w prawym górnym rogu. W otwartym oknie modalnym wpisz Hasura jako nazwę API i https://hasura.api jako identyfikator API.

Create API modal

Będziemy używać tego identyfikatora API w reszcie naszego artykułu. Ale śmiało zmieniaj wartości według własnych preferencji.

Kliknij „Create API Resource”, a pojawi się komunikat, że zasób został pomyślnie utworzony. To wszystko, czego teraz potrzebujemy w Logto.

Tworzenie roli dla Hasura

Aby wykorzystać zarządzanie uprawnieniami Hasura, stworzymy role w Logto, które będą mapowane na role Hasura.

Create Role

Pamiętaj, aby przypisać rolę do użytkowników.

Włączanie uwierzytelniania webhook w Hasurze

Hasura używa zarządzania dostępem opartego na rolach, które obsługuje autoryzację. Zatem musimy tylko zająć się uwierzytelnianiem. Obsługuje dwie metody: Webhook i JWT. Wybieramy webhook ponieważ jest bardziej elastyczny.

Aby włączyć uwierzytelnianie webhook, musisz ustawić tajny klucz administratora i punkt końcowy hook autoryzacji.

  • Sekret administratora to klucz do uzyskania dostępu do administracji Hasury podczas wysyłania żądań. Jest wymagany przed włączeniem uwierzytelniania webhook. Pamiętaj, aby go przechowywać w bezpiecznym miejscu i nie używać go w produkcji.
  • Punkt końcowy hook autoryzacji to URL, pod który wysyłane są żądania uwierzytelniania.

Możesz je ustawić poprzez zmienne środowiskowe:

Możesz zauważyć, że używamy identyfikatora API wypełnionego w Logto, aby zbudować punkt końcowy hook autoryzacji. Zapewnia to, że użytkownik przesyła poprawny token bearer zamiast losowego, który może pochodzić od złośliwego użytkownika.

Musisz zaktualizować punkt końcowy hooka autoryzacji, jeśli masz inny punkt końcowy Logto lub identyfikator API. Powiedzmy, że masz https://logto.domain.com jako punkt końcowy Logto i https://graphql.domain.com jako identyfikator API, wtedy będzie to:

Od teraz, przy każdym żądaniu GraphQL, Hasura przekaże wszystkie nagłówki żądania do punktu końcowego hooka autoryzacji Logto, a Logto odpowiednio zareaguje.

Wysyłanie zabezpieczonych żądań GraphQL

Podsumowanie

Ponieważ nie będziemy używać sekretu administracyjnego Hasura w produkcji, każde żądanie GraphQL jest zabezpieczone przez następujące nagłówki:

  • Authorization standardowy token bearer, który generuje Logto.
  • Expected-Role Rola, którą chcesz, aby Logto pokazało w odpowiedzi hooka autoryzacji.

Nagłówek Authorization wymaga ważnego access tokenu w formacie JWT z identyfikatorem API Hasura dla odbiorców. Poczekaj - dość trudno jest zapamiętać i złożyć wszystkie te rzeczy. Na szczęście mamy SDK Logto do uproszczenia tej zaawansowanej części.

Integracja SDK Logto

Postępuj zgodnie z przewodnikiem integracji, aby zintegrować SDK Logto w swojej aplikacji klienckiej. Umożliwia to nie tylko generowanie ważnych tokenów dostępu dla żądań GraphQL, ale także płynne doświadczenie logowania dla twoich użytkowników końcowych.

Po zakończeniu przewodnika, potrzeba tylko jednej małej modyfikacji do LogtoConfig: Dodaj identyfikator API, który utworzyłeś w Logto Admin Console do resources. Przykład w SDK React:

Wysyłanie żądań

Na koniec! Po zalogowaniu się użytkownika, użyj getAccessToken() w SDK Logto, aby pobrać token dostępu dla żądań GraphQL Hasura:

Podsumowanie

Dzięki powyższym działaniom pomyślnie wdrożyliśmy wszystkie niepomijane elementy we wprowadzeniu:

  • Punkt końcowy API GraphQL oparty na schemacie bazy danych
  • Usługa uwierzytelniania i tożsamości oparta na protokole OIDC
  • Kompletny przepływ logowania końcowego użytkownika i zarządzanie stanem uwierzytelnienia
  • Zabezpieczony dostęp do API oparty na tożsamości użytkownika i rolach

Nie tak trudne, prawda? Jeśli napotkasz jakieś problemy, dołącz do serwera discord Logto lub Hasura aby porozmawiać na żywo z zespołem.