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

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 current access token (refreshes transparently if near expiry)
const token = await client.getAccessToken()

// Get full session (userId, organizationId, expiresAt)
const session = await client.getSession()

// Revoke server session and clear all keychain entries
await client.signOut()

// OIDC RP-initiated logout URL for full IdP sign-out
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; renueva el token si está próximo a expirar
getAccessToken(options?) Cadena del access token o null; se renueva automáticamente si está próximo a expirar
signOut() Revoca la sesión del servidor y limpia el llavero
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, xid.refresh_token, xid.session, xid.pkce_verifier, xid.oauth_state.
Navegación

Escribe para buscar...

Usa las flechas para navegarPulsa Intro para seleccionarPulsa Escape para cerrar