iOS ja Android
Natiivisovellukset kirjaavat ihmiset sisään ympäristönsä Lobbyssa järjestelmän selaimessa, ei koskaan verkkonäkymässä (web view): ihmiset käyttävät pääsyavaimiaan, tallennettuja salasanojaan ja Usher-istuntoaan, eikä sovellus koskaan näe salasanaa. SDK:t hoitavat puolestasi loput OpenID Connectista ja säilyttävät tunnukset laitteella.
Rekisteröi sovellus
Avaa Usher Consolessa ympäristö ja sitten Sovellukset → Uusi sovellus → Mobiili- tai työpöytäsovellus. Anna sille yksityiskäyttöinen uudelleenohjaus, joka on muodostettu omistamastasi verkkotunnuksesta, kuten com.example.notes:/oauth/callback. Sovellus saa asiakastunnuksen mutta ei salaisuutta: puhelimen sovellus ei pysty pitämään sitä salassa, joten se käyttää sen sijaan PKCE:tä. Console näyttää määritykset molemmille alustoille.
iOS ja 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)Tunnukset säilytetään avainnipussa, vain tällä laitteella.
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))Kirjautuminen avautuu Custom Tab -näkymässä. Istunto salataan Android Keystoressa olevalla avaimella.
Mitä SDK:t tarkistavat
- PKCE, state ja nonce jokaisessa kirjautumisessa sekä vastauksessa nimetty myöntäjä (RFC 9207).
- ID-tunnuksen allekirjoitus ympäristösi avaimia vasten sekä sen myöntäjä, yleisö ja vanhenemisaika.
- Päivitystunnukset vaihtuvat: kutakin käytetään kerran. Uloskirjautuminen mitätöi tunnuksen Usherissa.
- DPoP, jos otat sen käyttöön: tunnukset sidotaan laitteella olevaan avaimeen, joten muualle kopioituina ne ovat hyödyttömiä.
Jos haluat kutsua omaa API:asi käyttöoikeustunnuksella, nimeä API ja pyydä sitä resources-asetuksella: katso Omat API:t.