iOS e Android
Le app native fanno accedere le persone tramite la Lobby del loro ambiente nel browser di sistema, mai in una web view: le persone usano le proprie passkey, le password salvate e la sessione Usher, e l’app non vede mai una password. Gli SDK si occupano del resto di OpenID Connect al posto tuo e conservano i token sul dispositivo.
Registra l’app
In Usher Console, apri l’ambiente, poi Applicazioni → Nuova applicazione → Mobile o desktop. Assegnale un reindirizzamento a uso privato ricavato da un dominio di tua proprietà, come com.example.notes:/oauth/callback. L’app riceve un client ID e nessun segreto: un’app su un telefono non è in grado di custodirlo, quindi usa invece PKCE. Console mostra la configurazione per entrambe le piattaforme.
iOS e 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)I token sono conservati nel Portachiavi, solo su questo dispositivo.
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))L’accesso si apre in una Custom Tab. La sessione è cifrata con una chiave nell’Android Keystore.
Cosa verificano gli SDK
- PKCE, state e nonce a ogni accesso, e l’issuer indicato nella risposta (RFC 9207).
- La firma del token ID con le chiavi del tuo ambiente, e il suo issuer, il destinatario e la scadenza.
- I token di aggiornamento cambiano a ogni uso: ognuno viene usato una sola volta. Uscendo, viene revocato presso Usher.
- DPoP, se lo attivi: token vincolati a una chiave sul dispositivo, inutili se copiati altrove.
Per chiamare la tua API con il token di accesso, indica l’API e richiedila con resources: vedi Le tue API.