---
title: "@vonvon-kit/tauri"
description: "Tauri-v2-Desktop-SDK mit PKCE-S256-Flow, Deeplink-Callback-Handler,OS-Keychain-Adapter und Rust-Plugin-Vorlage."
locale: "de"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/de/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# @vonvon-kit/tauri

## Zustand

Registry-Status: UNPUBLISHED. Installieren Sie dieses SDK nur aus einem Checkout des Repository-Quellcodes; verwenden Sie keine externe Paket-Registry.

Paketstatus: **Aktuelles Paket**. JS-Bridge, PKCE-S256-Flow,Deeplink-Callback-Handler, OS-Keychain-Adapter und Rust-Plugin-Vorlagesind implementiert. Ein echter IdP-Round-Trip auf Produktionsinfrastruktursteht noch manuell aus.

## Tauri-Konfiguration

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

## Rust-Plugin

Kopieren Sie `templates/vonvon-keychain-plugin.rs` nach `src-tauri/src/vonvon_keychain.rs` und registrieren Sie es gemäß `templates/tauri-app-setup.rs`. Fügen Sie `keyring = \"2\"`, `tauri-plugin-deep-link = \"2\"` und `tauri-plugin-shell = \"2\"` zu `src-tauri/Cargo.toml` hinzu.

## JS-Integration

```ts
import { createVonvonTauriClient, createTauriKeychainAdapter } from '@vonvon-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 = createVonvonTauriClient({
  issuer: 'https://vonvon.id',
  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 })
```

## Token-Abruf und Abmeldung

```ts
// 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())
```

## Entwicklung/Test ohne Tauri-Runtime

```ts
import { createVonvonTauriClient, createMemoryKeychainAdapter } from '@vonvon-kit/tauri'

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

## createVonvonTauriClient-Optionen

| Option | Typ | Beschreibung |
| --- | --- | --- |
| `issuer` | string | Vonvon-Issuer-URL |
| `clientId` | string | OAuth-2.0-client\_id |
| `redirectUri` | string | Callback für benutzerdefiniertes URI-Schema |
| `scopes` | readonly string\[\] | Standard: openid, profile, email |
| `keychain` | VonvonKeychainAdapter | Token-Speicher-Adapter; Standard ist MemoryKeychainAdapter (in ProduktionTauri-Adapter verwenden) |

## VonvonTauriClient-Methoden

| Methode | Beschreibung |
| --- | --- |
| `signIn(options?)` | PKCE-Autorisierungs-URL erstellen; über openUrl-Callback öffnen |
| `handleRedirect(url)` | Deeplink parsen, State validieren, Code gegen Tokens eintauschen |
| `getSession()` | TauriSession oder null für eine aktuelle, nicht abgelaufene lokale Sitzung; abgelaufener Status wird gelöscht |
| `getAccessToken(options?)` | Aktuelle, nicht abgelaufene Zugriffstoken-Zeichenfolge oder null; es wird keine Refresh-Anforderung ausgeführt. Das SDK lehnt offline\_access ab, bis DPoP implementiert ist. |
| `signOut()` | Lokalen Keychain-Status ohne Widerrufsanforderung löschen |
| `buildSignOutUrl(options?)` | OIDC-end\_session-URL für den RP-initiierten Logout erstellen |
| `setTokenStorage(adapter)` | Keychain-Adapter zur Laufzeit tauschen |

## PKCE und Token-Speicherung

- PKCE S256 wird immer verwendet. Plain Challenge wird nie generiert.
- Verifier-Entropie beträgt 64 Bytes; Challenge wird über Web Crypto`crypto.subtle.digest('SHA-256', ...)` abgeleitet.
- Alle Schlüssel verwenden den Namespace `vonvon.*`. `vonvon.access_token` ist aktuell. `vonvon.refresh_token` wird nur zur Bereinigung von Altbeständen entfernt. `vonvon.session`, `vonvon.pkce_verifier` und `vonvon.oauth_state` enthalten den aktuellen Sitzungs- und Autorisierungsstatus; es werden keine Refresh-Anmeldedaten gelesen oder geschrieben.

Source: https://vonvon.id/de/sdks/tauri/index.mdx
