iOS ve Android
Yerel uygulamalar, girişi asla bir web görünümünde değil, sistem tarayıcısında, ortamlarının Lobby’si üzerinden yapar: insanlar geçiş anahtarlarını, kayıtlı parolalarını ve Usher oturumlarını kullanır ve uygulama hiçbir parolayı görmez. OpenID Connect’in geri kalanını SDK’lar sizin için yapar ve belirteçleri aygıtta tutar.
Uygulamayı kaydedin
Usher Console’da ortamı açın, ardından Uygulamalar → Yeni uygulama → Mobil veya masaüstü yolunu izleyin. Uygulamaya, size ait bir alan adından türetilmiş özel kullanımlı bir yönlendirme verin, örneğin com.example.notes:/oauth/callback. Uygulama bir istemci kimliği alır ama gizli anahtar almaz: telefondaki bir uygulama gizli anahtar saklayamaz, bu yüzden onun yerine PKCE kullanır. Console, iki platformun kurulumunu da gösterir.
iOS ve 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)Belirteçler Anahtar Zinciri’nde, yalnızca bu aygıtta tutulur.
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))Giriş bir Custom Tab içinde açılır. Oturum, Android Keystore’daki bir anahtarla şifrelenir.
SDK’lar neyi denetler?
- Her girişte PKCE, state ve nonce ile yanıtta adı geçen yayıncı (RFC 9207).
- Ortamınızın anahtarlarıyla kimlik belirtecinin imzası, ayrıca yayıncısı, hedef kitlesi ve son geçerlilik zamanı.
- Yenileme belirteçleri her kullanımda değişir: her biri bir kez kullanılır. Çıkış yapmak, belirteci Usher’da iptal eder.
- Açarsanız DPoP: aygıttaki bir anahtara bağlı, başka yere kopyalanırsa işe yaramayan belirteçler.
Erişim belirteciyle kendi API’nizi çağırmak için API’yi adlandırın ve resources ile isteyin: bkz. Kendi API’leriniz.