Saltar al contenido

@xid-kit/tauri

SDK de escritorio Tauri v2 con flujo PKCE S256, manejador de callback de deep link, adaptador al llavero del SO y plantilla de plugin en Rust.

Ver como Markdown

Estado

Estado del registro: UNPUBLISHED. Instala este SDK únicamente desde el checkout del código fuente del repositorio; no uses un registro de paquetes externo.

El estado del paquete es Paquete actual. El bridge JS, el flujo PKCE S256, el manejador de callback de deep link, el adaptador al llavero del SO y la plantilla de plugin Rust están implementados. Una prueba de ida y vuelta real contra un IdP en infraestructura de producción está pendiente de verificación manual.

Configuración de Tauri

// tauri.conf.json
{
  "bundle": { "identifier": "com.example.myapp" },
  "plugins": {
    "deep-link": { "desktop": { "schemes": ["myapp"] } }
  }
}

Plugin en Rust

Copia templates/xid-keychain-plugin.rs en src-tauri/src/xid_keychain.rs y regístralo siguiendo templates/tauri-app-setup.rs. Añade keyring = "2", tauri-plugin-deep-link = "2" y tauri-plugin-shell = "2" a src-tauri/Cargo.toml.

Integración JS

import { createXidTauriClient, createTauriKeychainAdapter } from '@xid-kit/tauri'
import { invoke } from '@tauri-apps/api/core'
import { open } from '@tauri-apps/plugin-shell'
import { onOpenUrl } from '@tauri-apps/plugin-deep-link'

const client = createXidTauriClient({
  issuer: 'https://xid.dev',
  clientId: 'YOUR_CLIENT_ID',
  redirectUri: 'myapp://auth/callback',
  keychain: createTauriKeychainAdapter({ invoke }),
})

// Register deeplink handler (e.g. on App component mount)
await onOpenUrl(async (urls) => {
  for (const url of urls) await client.handleRedirect(url)
})

// Trigger sign-in: opens system browser
await client.signIn({ openUrl: open })

Obtención de tokens y cierre de sesión

// Get the current unexpired access token. Expiry requires a new sign-in.
const token = await client.getAccessToken()

// Get the current unexpired session (userId, organizationId, expiresAt).
const session = await client.getSession()

// Clear local keychain state. No refresh or revoke request is sent.
await client.signOut()

// To request full IdP sign-out, open an explicit OIDC RP-initiated logout URL.
const logoutUrl = client.buildSignOutUrl({ postLogoutRedirectUri: 'myapp://logout' })
await open(logoutUrl.toString())

Desarrollo/pruebas sin entorno de ejecución Tauri

import { createXidTauriClient, createMemoryKeychainAdapter } from '@xid-kit/tauri'

const client = createXidTauriClient({
  issuer: 'http://localhost:8788',
  clientId: 'test-client',
  redirectUri: 'http://localhost:1420/callback',
  keychain: createMemoryKeychainAdapter(),
})

Opciones de createXidTauriClient

Opción Tipo Descripción
issuer string URL del emisor XID
clientId string client_id de OAuth 2.0
redirectUri string Callback de esquema URI personalizado
scopes readonly string[] Por defecto: openid, profile, email
keychain XidKeychainAdapter Adaptador de almacenamiento de tokens; por defecto es MemoryKeychainAdapter (usa el adaptador Tauri en producción)

Métodos de XidTauriClient

Método Descripción
signIn(options?) Construye la URL de autorización PKCE; ábrel via callback openUrl
handleRedirect(url) Analiza el deep link, valida el estado e intercambia el código por tokens
getSession() TauriSession o null para una sesión local actual no caducada; se borra el estado caducado
getAccessToken(options?) Cadena del token de acceso actual no caducado o null; no se realiza ninguna solicitud de actualización. El SDK rechaza offline_access hasta que se implemente DPoP.
signOut() Borra el estado local del Keychain sin enviar una solicitud de revocación
buildSignOutUrl(options?) Construye la URL OIDC end_session para cierre de sesión iniciado por el RP
setTokenStorage(adapter) Intercambiar el adaptador del llavero en tiempo de ejecución

PKCE y almacenamiento de tokens

  • Siempre se usa PKCE S256. Nunca se genera un challenge plain.
  • La entropía del verificador es de 64 bytes; el challenge se deriva mediante Web Crypto crypto.subtle.digest('SHA-256', ...).
  • Todas las claves usan el espacio de nombres xid.*. xid.access_token está vigente. xid.refresh_token solo se elimina para limpiar datos heredados. xid.session, xid.pkce_verifier y xid.oauth_state contienen el estado actual de la sesión y la autorización; no se leen ni escriben credenciales de actualización.
Navegación

Escribe para buscar...

Usa las flechas para navegarPulsa Intro para seleccionarPulsa Escape para cerrar