Aller au contenu
Documentation · iOS et Android

iOS et Android

Les apps natives connectent les utilisateurs via le Lobby de leur environnement dans le navigateur du système, jamais dans une vue Web : les utilisateurs se servent de leurs clés d’accès, de leurs mots de passe enregistrés et de leur session Usher, et l’app ne voit jamais aucun mot de passe. Les SDK se chargent du reste d’OpenID Connect pour vous, et conservent les jetons sur l’appareil.

Enregistrer l’app

Dans Usher Console, ouvrez l’environnement, puis Applications → Nouvelle application → Mobile ou ordinateur. Donnez-lui une redirection à usage privé construite à partir d’un domaine qui vous appartient, comme com.example.notes:/oauth/callback. Elle reçoit un ID client mais aucun secret : une app sur un téléphone ne pourrait pas le garder, elle utilise donc PKCE à la place. La Console indique la configuration pour les deux plateformes.

iOS et macOS

swift
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)

Les jetons sont conservés dans le trousseau, sur cet appareil uniquement.

Android

kotlin
// 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))

La connexion s’ouvre dans un onglet personnalisé (Custom Tab). La session est chiffrée avec une clé du Keystore Android.

Ce que vérifient les SDK

  • PKCE, state et nonce à chaque connexion, ainsi que l’émetteur nommé dans la réponse (RFC 9207).
  • La signature du jeton d’ID avec les clés de votre environnement, ainsi que son émetteur, son audience et son expiration.
  • La rotation des jetons d’actualisation : chacun ne sert qu’une fois. La déconnexion le révoque auprès d’Usher.
  • DPoP, si vous l’activez : des jetons liés à une clé de l’appareil, inutilisables s’ils sont copiés ailleurs.

Pour appeler votre propre API avec le jeton d’accès, nommez l’API et demandez-la avec resources : consultez Vos propres API.