iOS a Android
Nativní aplikace přihlašují lidi přes Lobby svého prostředí v systémovém prohlížeči, nikdy ve webovém zobrazení: lidé použijí své přístupové klíče, uložená hesla a relaci Usher a aplikace žádné heslo nikdy neuvidí. Zbytek OpenID Connect za vás obstarají sady SDK a tokeny uchovají v zařízení.
Zaregistrujte aplikaci
V Usher Console otevřete prostředí a pak Aplikace → Nová aplikace → Mobilní nebo desktopová. Zadejte přesměrování se soukromým schématem odvozeným od domény, kterou vlastníte, například com.example.notes:/oauth/callback. Aplikace dostane ID klienta a žádný tajný klíč: aplikace v telefonu ho nedokáže uchovat v tajnosti, takže místo něj používá PKCE. Console ukáže nastavení pro obě platformy.
iOS a 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 se ukládají do Klíčenky, jen v tomto zařízení.
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))Přihlášení se otevře v Custom Tab. Relace je zašifrovaná klíčem v úložišti Android Keystore.
Co sady SDK kontrolují
- PKCE, state a nonce při každém přihlášení a vydavatele uvedeného v odpovědi (RFC 9207).
- Podpis ID tokenu proti klíčům vašeho prostředí a jeho vydavatele, příjemce a vypršení platnosti.
- Obnovovací tokeny se vyměňují: každý se použije jen jednou. Odhlášení ho ve službě Usher odvolá.
- DPoP, pokud ho zapnete: tokeny vázané na klíč v zařízení, které jsou k ničemu, když je někdo zkopíruje jinam.
Chcete-li přístupovým tokenem volat své vlastní API, pojmenujte API a požádejte o něj pomocí resources: viz Vaše vlastní API.