Tożsamość dla Twoich aplikacji, na otwartych standardach
Zaprasza do środka.
Jedno konto. Wszystkie drzwi.
Usher Identity loguje użytkowników do Twoich aplikacji przez OpenID Connect i OAuth 2.1: klucze dostępu, kody, logowanie społecznościowe i organizacje, a każde środowisko jest oddzielone od wszystkich pozostałych.
Na start za darmo. Działa też na Twoich serwerach.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
Lobby
Strona logowania, która wita, a nie przesłuchuje.
Lobby to strona logowania, którą Usher Identity hostuje dla Twojej aplikacji. Zawsze mówi, dokąd ktoś przechodzi, i wygląda tak samo bez względu na to, z której aplikacji ta osoba przyszła, więc ludzie nabierają do niego zaufania.
- Za każdym razem podaje nazwę produktu, do którego przechodzisz.
- Klucze dostępu, kody wysyłane e-mailem i magiczne linki, a hasła tylko wtedy, gdy ich chcesz.
- Ta sama spokojna strona, jasna lub ciemna, w każdym produkcie.
To działająca kopia Lobby. Działa na tej stronie, niczego nie wysyła i nikogo nie loguje.
Standardy, bez uzależnienia od dostawcy
Mówi językiem protokołów, które Twój stos technologiczny już zna.
Usher Identity jest przede wszystkim dostawcą OpenID Connect. Korzystaj z naszego SDK, kiedy Ci to odpowiada, albo z dowolnej biblioteki OIDC w dowolnym języku. Jeśli kiedyś zmienisz dostawcę, Twoje aplikacje nie będą musiały zmieniać sposobu logowania użytkowników.
- OIDC Core · Discovery
OpenID Connect
Dokument wykrywania dla każdego środowiska, tokeny ID i userinfo. Działa każda certyfikowana biblioteka kliencka.
- Tylko S256
OAuth 2.1 z PKCE
Kod autoryzacji z PKCE dla każdego klienta, publicznego czy poufnego. Bez przepływu niejawnego i bez haseł w punkcie końcowym tokenu.
- RS256 · ES256 · EdDSA
JWKS i rotacja kluczy
Każde środowisko podpisuje tokeny własnymi kluczami, publikowanymi pod jego jwks_uri. Rotuj je bez przerywania sesji zalogowanych osób.
- RFC 7662 · RFC 7009
Introspekcja i unieważnianie
Sprawdź, czy token jest wciąż ważny, albo unieważnij go od razu. Usher Identity sprawdza własne sesje przy każdym żądaniu, więc zakończenie sesji działa natychmiast.
Wylogowanie inicjowane przez RP i back-channel
Wyloguj użytkownika z poziomu aplikacji albo pozwól, by Usher Identity powiadamiał każdą aplikację, gdy sesja gdziekolwiek się kończy.
- RFC 9449
DPoP
Wiąże tokeny z kluczem, który ma klient, więc skradziony token sam w sobie jest bezużyteczny.
- WebAuthn
Klucze dostępu
Pełnoprawna funkcja, a nie dodatek. Ludzie logują się odciskiem palca, twarzą albo kluczem bezpieczeństwa i nie ma niczego, co dałoby się wyłudzić.
- TOTP
Aplikacje uwierzytelniające
Kody czasowe z dowolnej aplikacji uwierzytelniającej, z kodami zapasowymi. Drugi składnik może być opcjonalny lub wymagany.
Magiczne linki
Jedno dotknięcie w skrzynce odbiorczej. Krótkotrwałe, jednorazowe i powiązane ze środowiskiem, które je wysłało.
Kody e-mail
Sześć cyfr dla osób, które logują się na jednym urządzeniu, a pocztę czytają na innym.
Logowanie społecznościowe
Google, GitHub, Microsoft i Apple. Konto jest łączone tylko wtedy, gdy jego adres e-mail został potwierdzony.
Organizacje i zespoły
Członkowie, role i zaproszenia dla firm, które korzystają z Twojej aplikacji.
- Wkrótce
SAML
Logowanie jednokrotne przez firmowych dostawców tożsamości Twoich klientów.
- Wkrótce
SCIM
Automatyczne zakładanie i usuwanie kont na podstawie katalogów Twoich klientów.
Jak działa logowanie
Pięć kroków, każdy zgodny ze standardem.
To przepływ kodu autoryzacji z PKCE w OpenID Connect, ten sam, którym posługuje się każdy poważny dostawca tożsamości. Przewiń, aby prześledzić go krok po kroku.
- 01
Twoja aplikacja kieruje użytkownika do Lobby.
Gdy ktoś wybierze „Kontynuuj przez Usher Identity”, Twoja aplikacja przekierowuje tę osobę do punktu końcowego autoryzacji Twojego środowiska, z wyzwaniem PKCE i wartością state, którą później sprawdzi.
GET acme.usherid.com/api/auth/oauth2/authorize ?response_type=code &client_id=acme_web &redirect_uri=https://app.acme.example/callback &scope=openid profile email offline_access &state=k3Jx… &code_challenge=E9Mel…cM &code_challenge_method=S256
- 02
Użytkownik loguje się po swojemu.
Klucz dostępu, kod wysłany e-mailem, magiczny link, konto społecznościowe lub hasło: Lobby oferuje tylko to, na co pozwala Twoje środowisko, i zawsze mówi, do której aplikacji ktoś przechodzi.
Usher IdentityUsher IdentityPrzechodzisz do aplikacji AcmeWitaj ponownie.
Użyj klucza dostępuWyślij mi kod e-mailem - 03
Użytkownik zgadza się udostępnić dane.
Za pierwszym razem ludzie widzą, o co prosi Twoja aplikacja (profil, adres e-mail, utrzymanie sesji), i wyrażają zgodę raz.
Aplikacja Acme prosi o:
- Dostęp do Twojego imienia i zdjęcia
- Dostęp do Twojego adresu e-mail
- Utrzymywanie Twojej sesji
AnulujZezwól - 04
Usher Identity odsyła kod.
Przeglądarka wraca do Twojego URI przekierowania z jednorazowym kodem ważnym przez pięć minut i z wysłaną przez Ciebie wartością state, którą sprawdza Twoja aplikacja.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
Twoja aplikacja wymienia go na tokeny.
Twój serwer wysyła kod i weryfikator PKCE do punktu końcowego tokenu. W odpowiedzi otrzymuje token ID, który mówi, kim jest użytkownik, token dostępu do Twojego API i token odświeżania, który podtrzymuje sesję.
POST acme.usherid.com/api/auth/oauth2/token grant_type=authorization_code&code=Splx… &code_verifier=dBjftJeZ4CVP… { "token_type": "Bearer", "access_token": "eyJhbGciOiJSUzI1NiIs…", "id_token": "eyJhbGciOiJSUzI1NiIs…", "refresh_token": "8xLOxBtZp8…", "expires_in": 600 }
Izolacja z założenia
Każde środowisko to osobny budynek.
Twoje środowiska produkcyjne i deweloperskie, a także środowiska wszystkich innych klientów, nie współdzielą niczego istotnego. Błąd w jednym z nich nie pozwoli odczytać danych innego, podpisać niczego w jego imieniu ani się do niego zalogować.
- Własny schemat Postgres
- Nie kolumna najemcy we wspólnej tabeli, tylko schemat utworzony dla tego środowiska, w którym nie ma niczego innego.
- Własne klucze podpisywania
- Tokenów z jednego środowiska nigdy nie da się zweryfikować kluczami innego.
- Własne zapieczętowane sekrety
- Zapieczętowane własnym kluczem danych środowiska, który z kolei jest opakowany kluczem głównym.
- Własny host
- Wystawcy działają w innej domenie niż witryna Usher i Usher Console, z plikami cookie przypisanymi do hosta.
usheridentity.com
Witryna, Usher Identity Console, konta Usher Identity
*.usherid.com
Jeden wystawca na środowisko, w osobnej domenie
Użytkownicy, sesje i tokeny znajdują się w schemacie utworzonym dla tego środowiska. Zapytania trafiają do tego schematu, nigdy do wspólnej tabeli z kolumną najemcy.
Skopiuj zapieczętowany sekret klienta Google ze środowiska produkcyjnego Acme do środowiska produkcyjnego Northwind.
Dla deweloperów
Twoje pierwsze logowanie, na trzy sposoby.
Dodaj SDK, gdy się pojawi, użyj biblioteki OIDC, której już ufasz, albo zacznij od przeczytania dokumentu wykrywania. Pod spodem to wciąż ten sam protokół.
// app/layout.tsx
import { UsherProvider } from '@usher/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<UsherProvider>{children}</UsherProvider>
</body>
</html>
)
}
// app/page.tsx
import { SignIn, UserButton, currentUser } from '@usher/nextjs'
export default async function Page() {
const user = await currentUser()
return user ? <UserButton /> : <SignIn />
}Uruchom u siebie
Twoje serwery, Twoje klucze.
Korzystaj z Usher Identity jako usługi albo uruchom tę samą platformę na własnych serwerach, z własnymi kluczami i własną bazą danych.
Docker
Jeden plik Compose: aplikacje, Postgres, Valkey, warstwa brzegowa Caddy i serwer proxy ruchu wychodzącego. Kontenery działają bez możliwości zdobycia nowych uprawnień i z odebranymi capabilities.
Ubuntu
Wystarczy zwykły serwer z Ubuntu. Caddy terminuje TLS, a sekrety są plikami przekazywanymi do kontenerów i nigdy nie są wbudowywane w obrazy.
Postgres
Postgres przechowuje wszystko, po jednym schemacie na środowisko. Baza i Valkey działają w sieci, z której nie ma trasy do internetu.
# on an Ubuntu server with Docker Engine and the Compose plugin
bash infra/scripts/setup-env.sh --prod \
--domain usher.example --tenant-domain usherid.example
docker compose -f compose.yaml -f compose.prod.yaml \
--profile core --profile apps --profile edge up -d --wait
pnpm db:migrate # applies the database migrationsPełny przewodnik po samodzielnym hostowaniu jest w drodze. Powyższe polecenia pokazują, jak będzie wyglądać.
Zaproś użytkowników do środka.
Utwórz obszar roboczy i projekt, a Twoje pierwsze środowisko dostanie własnego wystawcę, własne klucze i własne Lobby.
Jedno logowanie. Wszędzie jak u siebie.