Lingara Lingara Dokumentation Ratgeber API Bibliotheken Apps Erstellen Web-App
Sprache: Deutsch

Authentifizierung

Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen

Sie erstellen einen Client mit der Client-ID und dem Client-Secret eines OAuth-Clients. Den Rest erledigt die Bibliothek. Sie fragt Sie nie nach einem Zugriffstoken.

Was die Bibliothek für Sie erledigt

  • Ein Austausch, gemeinsam genutzt. Der erste Aufruf, der ein Token braucht, tauscht Ihre Zugangsdaten gegen eines ein. Starten mehrere Aufrufe gleichzeitig, warten alle auf diesen einen Austausch, statt jeweils einen eigenen zu beginnen.
  • Im Cache, bis es fast abgelaufen ist. Das Token wird bis 60 Sekunden vor seinem Ablauf wiederverwendet und dann beim nächsten Aufruf ersetzt. Im Hintergrund wird nichts erneuert, sodass ein untätiger Prozess keine Anfragen stellt.
  • Eine Wiederholung bei 401. Lehnt die API ein Token ab, verwirft die Bibliothek es, holt ein frisches und wiederholt den Aufruf einmal. Ein zweiter 401 wird als API-Fehler ausgelöst.
  • Ein begrenzter Austausch. Eine Token-Anfrage, die keine Antwort erhält, schlägt nach 30 Sekunden fehl, sodass ein langsamer Token-Endpunkt nicht alle Aufrufer blockieren kann.
  • Nichts, was durchsickert. Das Client-Secret und jedes Zugriffstoken erscheinen in Logs, Debug-Ausgaben und Fehlermeldungen als [REDACTED].

Operationen, die kein Token benötigen, etwa das Auflisten der API-Versionen, senden nie eines, sodass auch ein ohne Zugangsdaten erstellter Client sie aufrufen kann.

Das Secret bleibt auf Ihrem Server

Ein Client-Secret identifiziert Ihre Anwendung, nicht Ihre Nutzer. Bewahren Sie es in der Konfiguration oder im Secret-Store Ihres Servers auf und liefern Sie es niemals an einen Browser oder eine mobile App aus.

Sprache des Codebeispiels

TypeScript

import { Lingara } from "@lingara/api";

const client = new Lingara({
  clientId: process.env.LINGARA_CLIENT_ID!,
  clientSecret: process.env.LINGARA_CLIENT_SECRET!,
});

Rust

use lingara::Client;

let client = Client::builder()
    .client_credentials(std::env::var("LINGARA_CLIENT_ID")?, std::env::var("LINGARA_CLIENT_SECRET")?)
    .build()?;

Go

import (
	"os"

	lingara "github.com/Spinning-Cat-Studios/lingara_api_clients/go"
)

client, err := lingara.New(
	lingara.WithClientCredentials(os.Getenv("LINGARA_CLIENT_ID"), os.Getenv("LINGARA_CLIENT_SECRET")),
)
if err != nil {
	return nil, err
}

Java

import com.getlingara.client.LingaraClient;

LingaraClient client =
    LingaraClient.builder()
        .clientCredentials(
            System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
        .build();

Kotlin

import com.getlingara.kotlin.LingaraClient

val client =
    LingaraClient {
        clientCredentials(System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
    }

Ruby

require "lingara"

client = Lingara::Client.new(client_id: client_id, client_secret: client_secret)

PHP

use Lingara\Client;

$client = new Client(clientId: $clientId, clientSecret: $clientSecret);

Was diese Seite kapselt