iOS und Android
Native Apps melden Menschen über die Lobby ihrer Umgebung im Systembrowser an, nie in einer Web View: So können Menschen ihre Passkeys, gesicherten Passwörter und ihre Usher-Sitzung verwenden, und die App bekommt nie ein Passwort zu sehen. Den Rest von OpenID Connect erledigen die SDKs für dich, und die Tokens bleiben auf dem Gerät.
Registriere die App
Öffne in Usher Console die Umgebung und dann Anwendungen → Neue Anwendung → Mobil oder Desktop. Gib ihr eine Redirect-URI mit privatem Schema, gebildet aus einer Domain, die dir gehört, etwa com.example.notes:/oauth/callback. Die App bekommt eine Client-ID und kein Secret: Eine App auf einem Smartphone kann keines geheim halten, deshalb verwendet sie stattdessen PKCE. Console zeigt dir die Einrichtung für beide Plattformen.
iOS und 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)Die Tokens werden im Schlüsselbund aufbewahrt, nur auf diesem Gerät.
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))Die Anmeldung öffnet sich in einem Custom Tab. Die Sitzung wird mit einem Schlüssel im Android Keystore verschlüsselt.
Was die SDKs prüfen
- PKCE, State und Nonce bei jeder Anmeldung, und den in der Antwort genannten Issuer (RFC 9207).
- Die Signatur des ID-Tokens mit den Schlüsseln deiner Umgebung, dazu seinen Issuer, seine Audience und seine Ablaufzeit.
- Refresh-Tokens werden rotiert: Jedes wird nur einmal verwendet. Beim Abmelden widerruft das SDK es bei Usher.
- DPoP, wenn du es aktivierst: Tokens, die an einen Schlüssel auf dem Gerät gebunden sind und anderswo kopiert nutzlos sind.
Um deine eigene API mit dem Access-Token aufzurufen, gib die API an und fordere sie mit resources an: siehe Deine eigenen APIs.