iOS a Android
Natívne aplikácie prihlasujú ľudí cez Lobby svojho prostredia v systémovom prehliadači, nikdy vo webovom zobrazení: ľudia použijú svoje prístupové kľúče, uložené heslá a reláciu Usher a aplikácia nikdy neuvidí heslo. Zvyšok OpenID Connect za vás urobia SDK a tokeny uchovajú v zariadení.
Zaregistrujte aplikáciu
V Usher Console otvorte prostredie a potom Aplikácie → Nová aplikácia → Mobil alebo počítač. Dajte jej presmerovanie so súkromnou schémou odvodenou od domény, ktorú vlastníte, napríklad com.example.notes:/oauth/callback. Aplikácia dostane ID klienta a žiadny tajný kód: aplikácia v telefóne ho nedokáže uchovať v bezpečí, preto namiesto neho používa PKCE. Console zobrazí nastavenie pre obe 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 sa uchovávajú v Kľúčenke, len v tomto zariadení.
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))Prihlásenie sa otvorí v Custom Tab. Relácia je zašifrovaná kľúčom v úložisku Android Keystore.
Čo SDK kontrolujú
- PKCE, state a nonce pri každom prihlásení a vydavateľa uvedeného v odpovedi (RFC 9207).
- Podpis tokenu ID voči kľúčom vášho prostredia a jeho vydavateľa, príjemcu a platnosť.
- Obnovovacie tokeny sa vymieňajú: každý sa použije len raz. Odhlásenie ho v službe Usher odvolá.
- DPoP, ak ho zapnete: tokeny viazané na kľúč v zariadení, bezcenné, ak ich niekto skopíruje inam.
Ak chcete s prístupovým tokenom volať vlastné API, pomenujte API a vyžiadajte si ho cez resources: pozrite si Vaše vlastné API.