iOS i Android
Aplikacje natywne logują ludzi przez Lobby swojego środowiska w przeglądarce systemowej, nigdy w widoku WWW: ludzie korzystają ze swoich kluczy dostępu, zapisanych haseł i sesji Usher, a aplikacja nigdy nie widzi hasła. Resztą OpenID Connect zajmują się za Ciebie SDK, które przechowują też tokeny na urządzeniu.
Zarejestruj aplikację
W Usher Console otwórz środowisko, a następnie wybierz Aplikacje → Nowa aplikacja → Urządzenie mobilne lub komputer. Nadaj jej przekierowanie z prywatnym schematem utworzonym z domeny, która należy do Ciebie, takie jak com.example.notes:/oauth/callback. Aplikacja dostaje identyfikator klienta, ale nie dostaje sekretu: aplikacja na telefonie nie jest w stanie go bezpiecznie przechować, więc zamiast tego używa PKCE. Console pokazuje konfigurację dla obu platform.
iOS i macOS
import UsherKit
let usher = UsherClient(configuration: .init(
issuer: URL(string: "https://login.example.com")!,
clientID: "…",
redirectURI: URL(string: "com.example.notes:/oauth/callback")!))
let session = try await usher.signIn()
var request = URLRequest(url: URL(string: "https://api.example.com/notes")!)
try await usher.authorize(&request)Tokeny są przechowywane w pęku kluczy, tylko na tym urządzeniu.
Android
// build.gradle.kts: manifestPlaceholders["usherRedirectScheme"] = "com.example.notes"
val usher = Usher.client(context, UsherConfiguration(
issuer = "https://login.example.com",
clientId = "…",
redirectUri = "com.example.notes:/oauth/callback"))
val session = usher.signIn(Usher.customTabs(activity))Logowanie otwiera się w karcie niestandardowej (Custom Tab). Sesja jest szyfrowana kluczem z Android Keystore.
Co sprawdzają SDK
- PKCE, state i nonce przy każdym logowaniu oraz wystawcę wskazanego w odpowiedzi (RFC 9207).
- Podpis tokenu ID kluczami Twojego środowiska, a także jego wystawcę, odbiorcę i czas wygaśnięcia.
- Rotację tokenów odświeżania: każdy jest używany raz. Wylogowanie unieważnia go w Usher.
- DPoP, jeśli je włączysz: tokeny powiązane z kluczem na urządzeniu, bezużyteczne po skopiowaniu gdzie indziej.
Aby wywołać własne API tokenem dostępu, nazwij API i poproś o nie za pomocą resources: zobacz Twoje własne API.