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

O status do pacote é Pacote atual. Implementa o contratonativo compartilhado: redirecionamento do Hosted Auth com PKCE S256,validação do estado CSRF no callback de deep link, troca de código deautorização no endpoint de token e persistência segura de tokens viaadaptador 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
      publishableKey="pk_live_..."
      apiUrl="https://xid.dev"
      issuer="https://xid.dev"
      clientId="your_client_id"
      redirectUri="myapp://auth/callback"
      tokenCache={tokenCache}
      browser={browser}
    >
      <RootNavigator />
    </XidProvider>
  )
}

Entrar

signIn() constrói a URL de autorização PKCE S256, armazena overificador e o estado OAuth no cache de token, abre o adaptador denavegador e troca o código retornado por tokens. Falhas do navegador,divergência do estado CSRF e erros de troca de token aparecem comosignInState.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 consegue capturar oredirecionamento por conta própria, registre o esquema de URI deredirecionamento no manifesto do seu aplicativo e encaminhe o deeplink para handleRedirect(url). Ele valida o state OAuth, trocao código e armazena o conjunto de tokens.

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 Encapsula o provider @xid-kit/react e injeta tokenCache, browser,issuer, clientId, redirectUri e escopos
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 o conjunto de tokens local e, em seguida, revoga asessão do servidor via useAuth().signOut; signOutState relata oprogresso
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 chave do TokenCache para tokens de acesso, refresh e ID,mais o verificador PKCE e o state OAuth
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

Re-exports de @xid-kit/react

Hooks de sessão e componentes de controle são re-exportados semalterações de @xid-kit/react: useAuth, useUser,useSession, useSessionList, useOrganization,useOrganizationList, useAPIKeys, SignedIn,SignedOut, Protect, XidLoaded,XidLoading, XidFailed e XidDegraded.

Tipos

Tipo Descrição
XidProviderProps Props do provider @xid-kit/react mais tokenCache, browser, issuer,clientId, redirectUri e escopos opcionais (padrão: openid, profile,email)
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,refreshToken, idToken, expiresIn
XidRnContextValue Formato do contexto do adaptador retornado por useXidRnContext

Limitações conhecidas

  • Sem atualização automática de sessão na expiração do token; o refreshtoken armazenado está disponível para renovação gerenciada peloaplicativo.
  • useAuth().isSignedIn reflete a sessão por cookie do XidClient, não oconteúdo do TokenCache. Recarregue o estado do cliente após uma trocade token bem-sucedida para atualizar o estado de autenticação.
  • 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 o conjunto de tokens local e revoga a sessão doservidor; falhas aparecem em signOutState em vez de serem silenciadas.
Navegação

Digite para pesquisar...

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