Statut
Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n’utilisez pas de registre de paquets externe.
L’état du package est Package actuel. Il implémente un contrat natif de session par jeton: redirection Hosted Auth avec PKCE S256, validation de l’état et du nonce lors du callback deep link, claims vérifiés du jeton d’identité, échange du code d’autorisation et persistance sécurisée de la session via un adaptateur de stockage injecté.
Un aller-retour réel avec un IdP sur une infrastructure de production esten attente de vérification manuelle. Cette page documente le comportementimplémenté ; ce n’est pas une affirmation de disponibilité en production.
Configuration du fournisseur
Injectez un TokenCache (stockage sécurisé de la plateforme) et unBrowserInterface (navigateur in-app) dans XidProvider. LeSDK ne lie pas en dur de module natif ; les applications Expo peuventutiliser les adaptateurs prêts à l’emploi de @xid-kit/expo.
import { XidProvider } from '@xid-kit/react-native'
import type { BrowserInterface, TokenCache } from '@xid-kit/react-native'
import * as Keychain from 'react-native-keychain'
const tokenCache: TokenCache = {
async getToken(key) {
const result = await Keychain.getGenericPassword({ service: key })
return result ? result.password : null
},
async saveToken(key, value) {
await Keychain.setGenericPassword('xid', value, { service: key })
},
async deleteToken(key) {
await Keychain.resetGenericPassword({ service: key })
},
}
const browser: BrowserInterface = {
async openAuthSession(url, redirectUri) {
// Open url with your in-app browser library, wait for the redirectUri
// deep link, then return { type: 'success', url } or { type: 'cancel' }.
throw new Error('Implement with your preferred in-app browser library.')
},
}
export function App() {
return (
<XidProvider
issuer="https://xid.dev"
clientId="your_client_id"
redirectUri="myapp://auth/callback"
tokenCache={tokenCache}
browser={browser}
>
<RootNavigator />
</XidProvider>
)
}Se connecter
signIn() construit l’URL d’autorisation PKCE S256, stocke le vérificateur, l’état OAuth et le nonce dans le cache de jetons, ouvre l’adaptateur de navigateur et échange le code retourné contre une session native vérifiée. Les échecs du navigateur, les incohérences d’état, les erreurs de vérification du jeton d’identité et d’échange de jetons sont exposés via signInState.status === 'error'.
import { useSignIn } from '@xid-kit/react-native'
function SignInScreen() {
const { signIn, signInState } = useSignIn()
return (
<Button
title={signInState.status === 'pending' ? 'Signing in...' : 'Sign in'}
onPress={() => void signIn()}
/>
)
}Callback deeplink
Lorsque l’adaptateur de navigateur ne peut pas capturer lui-même la redirection, enregistrez le schéma URI de redirection dans le manifeste de votre application et transférez le deep link à handleRedirect(url). Il valide et consomme l’état OAuth, le vérificateur et le nonce, échange le code, vérifie le jeton d’identité et stocke la session native.
import { useSignIn } from '@xid-kit/react-native'
import { useEffect } from 'react'
import { Linking } from 'react-native'
function DeepLinkHandler() {
const { handleRedirect } = useSignIn()
useEffect(() => {
const sub = Linking.addEventListener('url', ({ url }) => {
if (url.startsWith('myapp://auth/callback')) {
void handleRedirect(url)
}
})
return () => sub.remove()
}, [handleRedirect])
return null
}API exportée
| Exporter | Type | Objectif |
|---|---|---|
XidProvider |
composant | Fournit un contexte natif de session par jeton utilisant tokenCache, browser, issuer, clientId, redirectUri, scopes et un fetcher facultatif |
useSignIn |
hook | signIn(options?) exécute le flux de redirection complet ;handleRedirect(url) traite un callback deeplink ; signInState rapporteidle, pending, complete, cancelled ou error |
useSignOut |
hook | signOut() efface la session locale et les identifiants hérités; signOutState signale la progression ou les échecs de stockage; aucune requête de révocation n’est envoyée |
useXidRnContext |
hook | Contexte d’adaptateur brut (usage avancé et tests) |
exchangeCodeForTokens |
function | POST de bas niveau vers le point de terminaison de jeton avec grant_typeauthorization_code et le vérificateur PKCE ; retourne un TokenSet |
saveTokenSet / clearTokenSet |
fonctions | Persister ou supprimer l’ensemble de jetons dans l’adaptateur TokenCache |
TOKEN_KEYS |
objet as const | Noms de clés TokenCache pour l’enveloppe de session actuelle et les enregistrements PKCE, d’état et de nonce en attente; les clés de jetons héritées servent uniquement au nettoyage |
createPkceVerifier / createPkceChallenge |
fonctions | Utilitaires PKCE S256 délégués à @xid-kit/protocol (Web Crypto) |
createRandomString / base64UrlEncode |
fonctions | Chaîne aléatoire sûre pour les URL pour l’état OAuth ; assistantd’encodage base64url |
Hooks et contrôles natifs
Contrairement à @xid-kit/react, ce package utilise son propre contexte natif de jetons. Il exporte useAuth, useUser, useSession, useSignIn, useSignOut, useXidRnContext, SignedIn, SignedOut, XidLoaded, XidLoading, exchangeCodeForTokens, saveTokenSet, readTokenSet et clearTokenSet; il n’importe ni ne réexporte le SDK web React.
Types
| Type | Description |
|---|---|
XidProviderProps |
Props du provider natif: children, tokenCache, browser, issuer, clientId, redirectUri, scopes facultatifs (par défaut openid, profile, email) et fetcher facultatif |
TokenCache |
Contrat de l’adaptateur de stockage : getToken, saveToken, deleteToken(tous asynchrones) |
BrowserInterface |
openAuthSession(url, redirectUri) se résolvant en un BrowserResult |
BrowserResult |
Union de succès (avec URL de callback), annulation et fermeture |
SignInOptions |
Surcharges par appel pour signIn : redirectUri, scopes |
SignInState / SignOutState |
Unions de statuts discriminantes retournées par les hooks |
UseSignInReturn / UseSignOutReturn |
Formes de retour des hooks : actions et état |
TokenExchangeInput / TokenSet |
Entrée et résultat de exchangeCodeForTokens: accessToken, idToken, expiresIn et claims vérifiés du jeton d’identité |
XidRnContextValue |
Forme du contexte d’adaptateur retournée par useXidRnContext |
Limites connues
- Le SDK ne possède aucune liaison d’expéditeur DPoP, rejette offline_access et exige un nouveau flux d’autorisation après l’expiration du jeton d’accès.
- useAuth().isSignedIn reflète une session stockée localement uniquement après la vérification du jeton d’identité; il ne lit pas une session de cookie web.
- Le contexte d’organisation n’est pas encore alimenté depuis les jetonsstockés.
Sécurité
- Code d’autorisation avec PKCE S256 uniquement. Pas de flux implicite ni de password grant.
- Les clients publics ne stockent jamais de secrets client.
- Le vérificateur PKCE et l’état OAuth résident dans l’adaptateur destockage sécurisé injecté et sont supprimés après l’échange de code.
- signOut efface la session locale et les identifiants hérités sans requête de renouvellement ni de révocation; les échecs de stockage sont exposés dans signOutState.