Estado
Status do registry: UNPUBLISHED. Instale este SDK somente a partir do checkout do código-fonte do repositório; não use um registry de pacotes externo.
O status do package é Package atual. Ele implementa um contrato nativo de sessão por token: redirecionamento do Hosted Auth com PKCE S256, validação de estado e nonce no callback de deep link, claims verificados do token de ID, troca do código de autorização e persistência segura da sessão por meio de um adaptador de armazenamento injetado.
Uma ida e volta real com o IdP em infraestrutura de produção aindaestá pendente de verificação manual. Esta página documenta ocomportamento implementado; não é uma declaração de prontidão.
Configuração do provedor
Injete um TokenCache (armazenamento seguro da plataforma) e umBrowserInterface (navegador in-app) em XidProvider. OSDK não vincula rigidamente nenhum módulo nativo; apps Expo podemusar os adaptadores prontos 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>
)
}Entrar
signIn() cria a URL de autorização PKCE S256, armazena o verificador, o estado OAuth e o nonce no cache de tokens, abre o adaptador de navegador e troca o código retornado por uma sessão nativa verificada. Falhas do navegador, divergência de estado, erros de verificação do token de ID e de troca de tokens são expostos como 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 de deep link
Quando o adaptador de navegador não conseguir capturar o redirecionamento, registre o esquema de URI de redirecionamento no manifesto da aplicação e encaminhe o deep link para handleRedirect(url). Ele valida e consome o estado OAuth, o verificador e o nonce, troca o código, verifica o token de ID e armazena a sessão nativa.
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 exportada
| Exportar | Tipo | Finalidade |
|---|---|---|
XidProvider |
componente | Fornece um contexto nativo de sessão por token usando tokenCache, browser, issuer, clientId, redirectUri, scopes e um fetcher opcional |
useSignIn |
hook | signIn(options?) executa o fluxo completo de redirecionamento;handleRedirect(url) processa um callback de deep link; signInStatereporta idle, pending, complete, cancelled ou error |
useSignOut |
hook | signOut() limpa a sessão local e as credenciais legadas; signOutState informa o progresso ou falhas de armazenamento; nenhuma solicitação de revogação é enviada |
useXidRnContext |
hook | Contexto bruto do adaptador (uso avançado e testes) |
exchangeCodeForTokens |
function | POST de baixo nível para o endpoint de token com grant_typeauthorization_code e o verificador PKCE; retorna um TokenSet |
saveTokenSet / clearTokenSet |
funções | Persiste ou remove o conjunto de tokens no adaptador TokenCache |
TOKEN_KEYS |
objeto as const | Nomes de chaves TokenCache para o envelope da sessão atual e registros pendentes de PKCE, estado e nonce; chaves de tokens legadas servem apenas para limpeza |
createPkceVerifier / createPkceChallenge |
funções | Utilitários PKCE S256 delegados a @xid-kit/protocol (Web Crypto) |
createRandomString / base64UrlEncode |
funções | String aleatória segura para URL para o state OAuth; auxiliar decodificação base64url |
Hooks e controles nativos
Ao contrário de @xid-kit/react, este package usa seu próprio contexto nativo de tokens. Ele exporta useAuth, useUser, useSession, useSignIn, useSignOut, useXidRnContext, SignedIn, SignedOut, XidLoaded, XidLoading, exchangeCodeForTokens, saveTokenSet, readTokenSet e clearTokenSet; ele não importa nem reexporta o SDK Web React.
Tipos
| Tipo | Descrição |
|---|---|
XidProviderProps |
Props do provider nativo: children, tokenCache, browser, issuer, clientId, redirectUri, scopes opcionais (padrão openid, profile, email) e fetcher opcional |
TokenCache |
Contrato do adaptador de armazenamento: getToken, saveToken,deleteToken (todos assíncronos) |
BrowserInterface |
openAuthSession(url, redirectUri) que resolve para um BrowserResult |
BrowserResult |
União de sucesso (com URL de callback), cancelamento e descarte |
SignInOptions |
Substituições por chamada para signIn: redirectUri, scopes |
SignInState / SignOutState |
Uniões discriminadas de status retornadas pelos hooks |
UseSignInReturn / UseSignOutReturn |
Formatos de retorno dos hooks: ações mais estado |
TokenExchangeInput / TokenSet |
Entrada e resultado de exchangeCodeForTokens: accessToken, idToken, expiresIn e claims verificados do token de ID |
XidRnContextValue |
Formato do contexto do adaptador retornado por useXidRnContext |
Limitações conhecidas
- O SDK não possui vinculação de remetente DPoP, rejeita offline_access e exige um novo fluxo de autorização após a expiração do token de acesso.
- useAuth().isSignedIn reflete uma sessão armazenada localmente somente após a verificação do token de ID; ele não lê uma sessão de cookie da Web.
- O contexto da organização ainda não é preenchido a partir dos tokensarmazenados.
Segurança
- Código de autorização com PKCE S256 exclusivamente. Sem fluxo implícito nem password grant.
- Clientes públicos nunca armazenam segredos do cliente.
- O verificador PKCE e o state OAuth residem no adaptador dearmazenamento seguro injetado e são excluídos após a troca de código.
- signOut limpa a sessão local e as credenciais legadas sem solicitação de renovação ou revogação; falhas de armazenamento são expostas em signOutState.