Ir para o conteúdo

@xid-kit/react-native

Provider e hooks React Native para redirecionamento do Hosted Auth,PKCE S256, callback de deep link e adaptadores de armazenamentoseguro de tokens.

Ver como Markdown

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()}
    />
  )
}

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.
Navegação

Digite para pesquisar...

Use as teclas de seta para navegarPressione Enter para selecionarPressione Escape para fechar