---
title: "sdk/linux"
description: "SDK Rust pour bureau Linux utilisant xdg-open pour lancer le navigateur,TCP loopback pour le callback d'autorisation, PKCE S256 et le stockage dejetons Secret Service de freedesktop.org."
locale: "fr"
---

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

# sdk/linux

## Statut

L'état du package est **Implémenté et vérifié localement**. La suite de tests unitaires Rust réussit. Le stockage Secret Service via D-Bus, xdg-open, le callback loopback complet et un aller-retour réel avec un IdP nécessitent encore un environnement d'intégration Linux de bureau. Cette page documente le comportement implémenté; elle ne constitue pas une déclaration d'aptitude à la production.

Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n'utilisez pas de registre de paquets externe.

## Prérequis

- Rust (stable, édition 2021)
- runtime async tokio
- Linux bureau avec xdg-open (xdg-utils) pour lancer le navigateur systèmeet une session D-Bus active avec gnome-keyring ou kwallet pour le stockageSecret Service
- Environnements headless / CI : utilisez la fonctionnalitéin-memory-storage ou injectez InMemoryStorage directement

## Installation

Ajoutez vonvon-linux dans Cargo.toml :

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

## Démarrage rapide

```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(())
}
```

## Utilisation headless / CI

Quand aucun démon D-Bus Secret Service n'est disponible, passezInMemoryStorage pour éviter une erreur d'exécution :

```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()))?;
```

## API principale

| Méthode | Description |
| --- | --- |
| `VonvonConfigBuilder::new()` | Constructeur pour VonvonConfig. Champs requis : issuer, client\_id,redirect\_uri. Optionnels : scopes, redirect\_port (par défaut 51234),http\_timeout\_secs (par défaut 30). |
| `VonvonClient::configure(config)` | Créer le client avec le SecretServiceStorage par défaut. |
| `VonvonClient::configure_with_storage(config, adapter)` | Créer le client avec un StorageAdapter personnalisé (p. ex.InMemoryStorage). |
| `sign_in(options) async` | Ouvrir le navigateur via xdg-open, démarrer l'écouteur TCP loopback surredirect\_port, attendre le callback de code d'autorisation, l'échanger,stocker les jetons et retourner une Session. |
| `get_session() async` | Retourner la session stockée actuelle non expirée; l'expiration efface l'état local du jeton et retourne SessionExpired. |
| `get_access_token(options) async` | Retourner le jeton d'accès actuel non expiré; l'expiration ou force\_refresh efface l'état local du jeton et retourne SessionExpired. |
| `sign_out() async` | Effacer le stockage local des jetons et de la session invitée; aucune requête de révocation n'est envoyée. |
| `set_token_storage(adapter)` | Remplacer l'adaptateur de stockage après la construction. |

## Adaptateurs de stockage

| Adaptateur | Description |
| --- | --- |
| `SecretServiceStorage` | Par défaut. Stocke les jetons dans le Secret Service freedesktop.org(gnome-keyring ou kwallet) via D-Bus. Nécessite une session bureau active. |
| `InMemoryStorage` | Mémoire en cours de processus uniquement. Les jetons sont perdus à la findu processus. À utiliser pour les tests ou les environnements CI sansSecret Service. |

## Sécurité

- Client public — aucun secret client stocké ni transmis.
- PKCE S256 uniquement. Le serveur rejette la méthode plain challenge.
- État OAuth validé sur le callback loopback pour prévenir le CSRF(redirection loopback RFC 8252).
- Secret Service chiffre les jetons au repos via le démon de trousseau dubureau — l'application ne gère pas directement les clés de chiffrement.
- Le SDK rejette offline\_access tant que DPoP n'est pas implémenté; les champs de réponse refresh\_token inattendus ne sont pas persistés.

## Limites connues

- La vérification des jetons d'identité adossée à JWKS, la validation du nonce et le renouvellement du cache JWKS sont implémentés et testés localement. Un Secret Service de bureau et un aller-retour réel avec un IdP restent requis avant le support L4.
- Le port de redirection est fixe et doit correspondre au redirect\_urienregistré dans la console Vonvon. La randomisation dynamique du port (RFC8252) nécessite la prise en charge de l'enregistrement dynamique declient.
- La redirection du navigateur systeme et le stockage Secret Service necessitent une preuve d environnement de bureau.

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