---
title: "sdk/linux"
description: "Rust-SDK für Linux-Desktop mit xdg-open für den Browser-Start,Loopback-TCP für den Autorisierungs-Callback, PKCE S256 undfreedesktop.org-Secret-Service-Token-Speicher."
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.

# sdk/linux

## Zustand

Der Paketstatus lautet **Lokal implementiert und verifiziert**. Die Rust-Unit-Test-Suite ist erfolgreich. Secret-Service-D-Bus-Speicher, xdg-open, der vollständige Loopback-Callback und ein echter IdP-Roundtrip erfordern weiterhin eine Desktop-Linux-Integrationsumgebung. Diese Seite dokumentiert implementiertes Verhalten; sie stellt keine Aussage zur Produktionsreife dar.

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

## Anforderungen

- Rust (stable, Edition 2021)
- Asynchrone tokio-Laufzeitumgebung
- Desktop-Linux mit xdg-open (xdg-utils) für den Systembrowserstart und einelaufende D-Bus-Sitzung mit gnome-keyring oder kwallet fürSecret-Service-Speicherung
- Headless-/CI-Umgebungen: das in-memory-storage-Feature verwenden oderInMemoryStorage direkt injizieren

## Installation

vonvon-linux zu Cargo.toml hinzufügen:

```toml
[dependencies]
vonvon-linux = { path = "../vonvon/sdk/linux" }
tokio = { version = "1", features = ["full"] }
```

## Schnellstart

```rust
use vonvon_linux::{VonvonClient, VonvonConfigBuilder};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
// 1. Build config. offline_access is rejected until DPoP is implemented.
let config = VonvonConfigBuilder::new()
    .issuer("https://vonvon.id")
    .client_id("your_client_id")
    .redirect_uri("http://127.0.0.1:51234/callback")
    .redirect_port(51234)
    .build()?;

// 2. Create client (default: Secret Service storage)
let client = VonvonClient::configure(config)?;

// 3. Sign in. xdg-open launches the browser and loopback TCP receives the callback.
let session = client.sign_in(None).await?;
println!("user: {}", session.user.sub);

// 4. Get the current unexpired access token. Expiry returns SessionExpired.
let token = client.get_access_token(None).await?;

// 5. Clear local token and guest state. No revoke request is sent.
client.sign_out().await?;
Ok(())
}
```

## Headless-/CI-Verwendung

Wenn kein D-Bus-Secret-Service-Daemon verfügbar ist, InMemoryStorageübergeben, um einen Laufzeitfehler zu vermeiden:

```rust
use vonvon_linux::{VonvonClient, VonvonConfigBuilder};
use vonvon_linux::storage::InMemoryStorage;
use std::sync::Arc;

let config = VonvonConfigBuilder::new()
.issuer("https://vonvon.id")
.client_id("your_client_id")
.redirect_uri("http://127.0.0.1:51234/callback")
.build()?;

let client = VonvonClient::configure_with_storage(config, Arc::new(InMemoryStorage::new()))?;
```

## Kern-API

| Methode | Beschreibung |
| --- | --- |
| `VonvonConfigBuilder::new()` | Builder für VonvonConfig. Pflichtfelder: issuer, client\_id, redirect\_uri.Optional: scopes, redirect\_port (Standard 51234), http\_timeout\_secs(Standard 30). |
| `VonvonClient::configure(config)` | Client mit dem Standard-SecretServiceStorage erstellen. |
| `VonvonClient::configure_with_storage(config, adapter)` | Client mit einem benutzerdefinierten StorageAdapter (z. B.InMemoryStorage) erstellen. |
| `sign_in(options) async` | xdg-open-Browser öffnen, Loopback-TCP-Listener auf redirect\_port starten,auf den Autorisierungscode-Callback warten, ihn eintauschen, Tokensspeichern und eine Session zurückgeben. |
| `get_session() async` | Gibt die aktuelle, nicht abgelaufene gespeicherte Sitzung zurück; bei Ablauf wird der lokale Token-Status gelöscht und SessionExpired zurückgegeben. |
| `get_access_token(options) async` | Gibt das aktuelle, nicht abgelaufene Zugriffstoken zurück; Ablauf oder force\_refresh löscht den lokalen Token-Status und gibt SessionExpired zurück. |
| `sign_out() async` | Lokalen Token- und Gastsitzungsspeicher löschen; es wird keine Widerrufsanforderung gesendet. |
| `set_token_storage(adapter)` | Den Speicher-Adapter nach der Konstruktion ersetzen. |

## Speicher-Adapter

| Adapter | Beschreibung |
| --- | --- |
| `SecretServiceStorage` | Standard. Speichert Tokens im freedesktop.org Secret Service(gnome-keyring oder kwallet) über D-Bus. Erfordert eine laufendeDesktop-Sitzung. |
| `InMemoryStorage` | Nur In-Process-Speicher. Tokens gehen beim Beenden des Prozesses verloren.Für Tests oder CI-Umgebungen ohne Secret Service verwenden. |

## Sicherheit

- Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
- Nur PKCE S256. Der Server lehnt die Plain-Challenge-Methode ab.
- OAuth-State wird im Loopback-Callback zur CSRF-Prävention validiert (RFC8252 Loopback-Redirect).
- Der Secret Service verschlüsselt Tokens im Ruhezustand über denDesktop-Keyring-Daemon — die App verwaltet Verschlüsselungsschlüssel nichtdirekt.
- Das SDK lehnt offline\_access ab, bis DPoP implementiert ist; unerwartete refresh\_token-Antwortfelder werden nicht persistiert.

## Bekannte Einschränkungen

- JWKS-gestützte ID-Token-Verifizierung, Nonce-Validierung und JWKS-Cache-Erneuerung sind implementiert und lokal getestet. Vor L4-Unterstützung sind weiterhin ein Desktop Secret Service und ein echter IdP-Roundtrip erforderlich.
- Der Redirect-Port ist fest und muss mit der in der Vonvon-Konsoleregistrierten redirect\_uri übereinstimmen. Dynamische Port-Zufälligkeit(RFC 8252) erfordert Unterstützung für dynamische Client-Registrierung.
- Systembrowser-Weiterleitung und Secret-Service-Speicher benötigen Desktop-Umgebungsevidenz.

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