Authentifizierung

Sichern Sie Ihre API-Aufrufe mit Bearer-Token-Authentifizierung

Übersicht

AppHighway verwendet Bearer-Token-Authentifizierung für alle API-Endpunkte. Jeder Benutzer kann mehrere API-Tokens mit individuellen Namen, Berechtigungen und Ratenlimits erstellen.

Multi-Token-Unterstützung

Erstellen Sie mehrere API-Tokens für verschiedene Umgebungen (Produktion, Staging, Entwicklung) oder Anwendungen.

Token-Berechtigungen

Kontrollieren Sie, auf welche APIs jedes Token zugreifen kann. Nützlich zur Begrenzung von Berechtigungen für spezifische Anwendungsfälle.

Ratenlimitierung

Jedes Token hat ein eigenes Ratenlimit (Standard: 60 Anfragen pro Minute). Passen Sie Limits nach Ihren Bedürfnissen an.

Optionale Ablaufzeit

Setzen Sie Ablaufdaten für Tokens, um die Sicherheit zu erhöhen. Tokens ohne Ablaufdatum bleiben unbegrenzt gültig.

Erste Schritte

Folgen Sie diesen Schritten, um AppHighway-APIs mit Authentifizierung zu nutzen:

1. Registrieren oder Anmelden

Erstellen Sie ein AppHighway-Konto oder melden Sie sich über das Dashboard bei Ihrem bestehenden Konto an.

2. API-Token erstellen

Navigieren Sie zur Tokens-Seite in Ihrem Dashboard und erstellen Sie ein neues API-Token. Geben Sie ihm einen aussagekräftigen Namen (z.B. 'Produktionsserver', 'Mobile App').

3. Token verwenden

Fügen Sie Ihr API-Token im Authorization-Header jeder API-Anfrage als Bearer-Token ein.

API-Tokens erstellen

Schritt-für-Schritt-Anleitung zum Erstellen und Verwalten Ihrer API-Tokens

Token über Dashboard erstellen

  1. Navigieren Sie zu Ihrem AppHighway Dashboard
  2. Klicken Sie auf 'Tokens' in der Seitenleiste
  3. Klicken Sie auf die Schaltfläche 'Neues Token erstellen'
  4. Geben Sie einen aussagekräftigen Namen für Ihr Token ein (z.B. 'Produktionsserver', 'Mobile App')
  5. Wählen Sie die API-Berechtigungen für dieses Token aus
  6. Setzen Sie das Ratenlimit (Standard: 60 Anfragen pro Minute)
  7. Optional: Setzen Sie ein Ablaufdatum für erhöhte Sicherheit
  8. Klicken Sie auf 'Token erstellen' und kopieren Sie das generierte Token sofort an einen sicheren Ort

Best Practices für Token-Benennung

Verwenden Sie klare, aussagekräftige Namen zur Identifizierung von Zweck und Umgebung jedes Tokens:

ProduktionsserverEntwicklungsumgebungMobile App - iOSCI/CD PipelineTesting & QA

Token-Berechtigungen

Kontrollieren Sie, auf welche APIs Ihr Token zugreifen kann:

Alle APIs: Vollzugriff auf alle verfügbaren APIs (mit Vorsicht verwenden)
Benutzerdefinierte Berechtigungen: Wählen Sie nur die spezifischen APIs aus, die Ihre Anwendung benötigt (empfohlen)

Authentifizierte Anfragen durchführen

Fügen Sie Ihr API-Token im Authorization-Header mit dem Bearer-Schema ein:

Mit cURL

bash
curl -X POST https://apphighway.com/api/v1/structify \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "John Doe is 35 years old and lives in New York",
    "schema": {
      "name": "string",
      "age": "number",
      "city": "string"
    }
  }'

Mit Node.js

api-client.js
import fetch from 'node-fetch';

const API_TOKEN = 'your_api_token_here';
const API_URL = 'https://apphighway.com/api/v1';

async function callAPI(endpoint, data) {
  const response = await fetch(`${API_URL}/${endpoint}`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
  });

  if (!response.ok) {
    throw new Error(`API call failed: ${response.statusText}`);
  }

  return response.json();
}

// Example: Use Structify API
const result = await callAPI('structify', {
  text: 'John Doe is 35 years old',
  schema: { name: 'string', age: 'number' }
});

console.log(result);

Mit Python

api_client.py
import requests

API_TOKEN = 'your_api_token_here'
API_URL = 'https://apphighway.com/api/v1'

def call_api(endpoint, data):
    headers = {
        'Authorization': f'Bearer {API_TOKEN}',
        'Content-Type': 'application/json'
    }

    response = requests.post(
        f'{API_URL}/{endpoint}',
        headers=headers,
        json=data
    )

    response.raise_for_status()
    return response.json()

# Example: Use Structify API
result = call_api('structify', {
    'text': 'John Doe is 35 years old',
    'schema': {'name': 'string', 'age': 'number'}
})

print(result)

Erweiterte Verwendungsbeispiele

Produktionsreife Beispiele mit Fehlerbehandlung, Retry-Logik und Best Practices

TypeScript-Client mit Fehlerbehandlung

Ein robuster TypeScript-Client mit Typsicherheit und umfassender Fehlerbehandlung für den Produktionseinsatz

apphighway-client.ts
import axios, { AxiosError } from 'axios';

const API_TOKEN = process.env.APPHIGHWAY_API_TOKEN!;
const API_URL = 'https://apphighway.com/api/v1';

interface APIError {
  error: {
    code: string;
    message: string;
    details: string;
  };
}

class AppHighwayClient {
  private token: string;
  private baseURL: string;

  constructor(token: string, baseURL = API_URL) {
    this.token = token;
    this.baseURL = baseURL;
  }

  async call<T = unknown>(
    endpoint: string,
    data: Record<string, unknown>
  ): Promise<T> {
    try {
      const response = await axios.post<T>(
        `${this.baseURL}/${endpoint}`,
        data,
        {
          headers: {
            'Authorization': `Bearer ${this.token}`,
            'Content-Type': 'application/json',
          },
        }
      );

      return response.data;
    } catch (error) {
      if (axios.isAxiosError(error)) {
        const apiError = error.response?.data as APIError;

        if (apiError?.error?.code === 'INSUFFICIENT_POINTS') {
          throw new Error('Insufficient points. Please purchase more points.');
        }

        if (apiError?.error?.code === 'UNAUTHORIZED') {
          throw new Error('Invalid API token. Please check your credentials.');
        }

        if (error.response?.status === 429) {
          throw new Error('Rate limit exceeded. Please wait before retrying.');
        }
      }

      throw error;
    }
  }
}

// Usage
const client = new AppHighwayClient(API_TOKEN);

const result = await client.call('structify', {
  text: 'John Doe is 35 years old',
  schema: { name: 'string', age: 'number' }
});

Implementierung von Retry-Logik

Behandeln Sie vorübergehende Fehler und Ratenlimits mit exponentieller Backoff-Retry-Strategie

api-with-retry.ts
import fetch from 'node-fetch';

const API_TOKEN = process.env.APPHIGHWAY_API_TOKEN;
const API_URL = 'https://apphighway.com/api/v1';

async function callAPIWithRetry(
  endpoint: string,
  data: object,
  maxRetries = 3
) {
  let lastError;

  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const response = await fetch(`${API_URL}/${endpoint}`, {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${API_TOKEN}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(data),
      });

      // Don't retry on client errors (4xx except 429)
      if (response.status >= 400 && response.status < 500 && response.status !== 429) {
        const error = await response.json();
        throw new Error(`API Error: ${error.error.message}`);
      }

      // Retry on server errors (5xx) or rate limits (429)
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
      }

      return await response.json();
    } catch (error) {
      lastError = error;

      if (attempt < maxRetries - 1) {
        // Exponential backoff: 1s, 2s, 4s
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`Retry attempt ${attempt + 1} after ${delay}ms`);
        await new Promise(resolve => setTimeout(resolve, delay));
      }
    }
  }

  throw lastError;
}

// Usage
const result = await callAPIWithRetry('structify', {
  text: 'John Doe is 35 years old',
  schema: { name: 'string', age: 'number' }
});

Go-Implementierung

Produktionsreifer Go-Client mit ordnungsgemäßer Fehlerbehandlung und HTTP-Best-Practices

main.go
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
)

const apiURL = "https://apphighway.com/api/v1"

type APIClient struct {
    Token      string
    HTTPClient *http.Client
}

type APIError struct {
    Error struct {
        Code    string `json:"code"`
        Message string `json:"message"`
        Details string `json:"details"`
    } `json:"error"`
}

func NewClient(token string) *APIClient {
    return &APIClient{
        Token:      token,
        HTTPClient: &http.Client{},
    }
}

func (c *APIClient) Call(endpoint string, data interface{}) ([]byte, error) {
    jsonData, err := json.Marshal(data)
    if err != nil {
        return nil, fmt.Errorf("failed to marshal data: %w", err)
    }

    req, err := http.NewRequest(
        "POST",
        fmt.Sprintf("%s/%s", apiURL, endpoint),
        bytes.NewBuffer(jsonData),
    )
    if err != nil {
        return nil, fmt.Errorf("failed to create request: %w", err)
    }

    req.Header.Set("Authorization", "Bearer "+c.Token)
    req.Header.Set("Content-Type", "application/json")

    resp, err := c.HTTPClient.Do(req)
    if err != nil {
        return nil, fmt.Errorf("request failed: %w", err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        return nil, fmt.Errorf("failed to read response: %w", err)
    }

    if resp.StatusCode != http.StatusOK {
        var apiErr APIError
        if err := json.Unmarshal(body, &apiErr); err == nil {
            return nil, fmt.Errorf("API error: %s", apiErr.Error.Message)
        }
        return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(body))
    }

    return body, nil
}

func main() {
    client := NewClient(os.Getenv("APPHIGHWAY_API_TOKEN"))

    data := map[string]interface{}{
        "text": "John Doe is 35 years old",
        "schema": map[string]string{
            "name": "string",
            "age":  "number",
        },
    }

    result, err := client.Call("structify", data)
    if err != nil {
        fmt.Printf("Error: %v\n", err)
        return
    }

    fmt.Printf("Result: %s\n", result)
}

Token-Verwaltung

Best Practices für die Verwaltung Ihrer API-Tokens:

Aussagekräftige Namen

Verwenden Sie klare, aussagekräftige Namen für Ihre Tokens, um deren Zweck und Umgebung zu identifizieren. Beispiele:

ProduktionsserverEntwicklungsumgebungMobile AppCI/CD-Pipeline

Token-Rotation

Rotieren Sie Ihre API-Tokens regelmäßig für erhöhte Sicherheit. Erstellen Sie ein neues Token, aktualisieren Sie Ihre Anwendungen und löschen Sie das alte Token.

Sofortiger Widerruf

Wenn ein Token kompromittiert wurde, widerrufen Sie es sofort über Ihr Dashboard, um unbefugten Zugriff zu verhindern.

Fehlerbehandlung

Häufige authentifizierungsbezogene Fehler und deren Behandlung:

401

Nicht autorisiert

Ihr API-Token ist ungültig, abgelaufen oder fehlt. Überprüfen Sie, ob Sie das korrekte Token im Authorization-Header senden.

json
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or expired API token",
    "details": "The provided token is not valid or has expired"
  }
}
402

Zahlung erforderlich (Unzureichende Punkte)

Ihr Konto hat nicht genügend Punkte für diesen API-Aufruf. Kaufen Sie weitere Punkte, um fortzufahren.

json
{
  "error": {
    "code": "INSUFFICIENT_POINTS",
    "message": "Insufficient points. Required: 3, Available: 1",
    "details": "Please purchase more points to continue using the API"
  }
}
429

Zu viele Anfragen

Sie haben das Ratenlimit für Ihr Token überschritten. Warten Sie vor weiteren Anfragen oder erhöhen Sie Ihr Ratenlimit.

Token-Sicherheits-Best-Practices

Kritische Sicherheitsrichtlinien zum Schutz Ihrer API-Tokens und zur Verhinderung unbefugten Zugriffs

Sichere Token-Speicherung

Niemals Tokens in Ihrem Code oder der Versionskontrolle offenlegen

Umgebungsvariablen verwenden

Speichern Sie Tokens in Umgebungsvariablen (.env-Dateien) und committen Sie sie niemals in Git. Fügen Sie .env zu Ihrer .gitignore-Datei hinzu.

Secrets-Management-Systeme verwenden

Verwenden Sie für Produktionsumgebungen dedizierte Secrets-Management-Lösungen wie AWS Secrets Manager, HashiCorp Vault oder Azure Key Vault.

Niemals Tokens hartcodieren

Vermeiden Sie es, Tokens direkt in Quellcode, Konfigurationsdateien oder clientseitigen Anwendungen zu hartcodieren.

Niemals in clientseitigem Code offenlegen

API-Tokens sollten nur in serverseitigem Code verwendet werden. Fügen Sie sie niemals in Frontend-JavaScript, Mobile Apps oder anderen clientseitigen Code ein.

Token-Rotation

Rotieren Sie Tokens regelmäßig, um Sicherheitsrisiken zu minimieren

Alle 90 Tage rotieren

Implementieren Sie einen regelmäßigen Rotationsplan (empfohlen alle 90 Tage), um das Expositionsfenster bei Kompromittierung eines Tokens zu begrenzen.

Zero-Downtime-Rotationsprozess

Erstellen Sie ein neues Token, aktualisieren Sie Ihre Anwendungen, um beide Tokens temporär zu verwenden, und entfernen Sie dann das alte Token, sobald alle Systeme migriert sind.

Rotation automatisieren

Verwenden Sie Automatisierungstools und CI/CD-Pipelines, um den Token-Rotationsprozess zu optimieren und manuelle Fehler zu reduzieren.

Zugriffskontrolle & Scoping

Implementieren Sie das Prinzip der minimalen Berechtigung

Minimale Berechtigungen verwenden

Gewähren Sie nur Zugriff auf die spezifischen APIs, die Ihre Anwendung benötigt. Vermeiden Sie Tokens mit Vollzugriff, es sei denn, dies ist absolut notwendig.

Separate Tokens pro Umgebung

Verwenden Sie unterschiedliche Tokens für Produktions-, Staging- und Entwicklungsumgebungen. Verwenden Sie Produktions-Tokens niemals in niedrigeren Umgebungen wieder.

Ein Token pro Anwendung

Erstellen Sie separate Tokens für jede Anwendung oder jeden Service. Dies erleichtert die Nachverfolgung der Nutzung und den Widerruf des Zugriffs bei Bedarf.

Überwachung & Erkennung

Erkennen und reagieren Sie auf verdächtige Aktivitäten

Token-Nutzung überwachen

Überprüfen Sie regelmäßig die Token-Nutzung in Ihrem Dashboard. Achten Sie auf unerwartete Spitzen, ungewöhnliche API-Aufrufe oder Zugriffe von unbekannten Standorten.

Benachrichtigungen einrichten

Konfigurieren Sie Benachrichtigungen für ungewöhnliche Aktivitätsmuster wie Ratenlimit-Verstöße, fehlgeschlagene Authentifizierungsversuche oder API-Aufrufe von unerwarteten IPs.

Umfassendes Logging implementieren

Protokollieren Sie alle API-Anfragen mit Zeitstempeln, aufgerufenen Endpunkten und Antwortcodes. Dies hilft bei Debugging und Sicherheitsaudits.

Incident Response

Handeln Sie schnell, wenn ein Token kompromittiert wurde

Kompromittierte Tokens sofort widerrufen

Wenn Sie vermuten, dass ein Token offengelegt oder kompromittiert wurde, widerrufen Sie es sofort über Ihr Dashboard, um unbefugten Zugriff zu verhindern.

Auswirkungen bewerten

Überprüfen Sie API-Nutzungsprotokolle, um festzustellen, welche Aktionen mit dem kompromittierten Token durchgeführt wurden und bewerten Sie potenzielle Datenoffenlegungen.

Neues Token erstellen

Nach dem Widerruf eines kompromittierten Tokens erstellen Sie ein neues Token mit geeigneten Berechtigungen und aktualisieren Sie Ihre Anwendungen.

Punktenutzung überprüfen

Überprüfen Sie Ihren Punktestand und Ihre Nutzungshistorie. Unbefugte API-Aufrufe könnten Punkte verbraucht haben. Kontaktieren Sie den Support bei betrügerischer Nutzung.

Sichere Übertragung

Schützen Sie Tokens während der Übertragung

Immer HTTPS verwenden

Führen Sie API-Aufrufe nur über HTTPS durch, um Tokens während der Übertragung zu verschlüsseln. Senden Sie Tokens niemals über unverschlüsselte HTTP-Verbindungen.

TLS-Zertifikate verifizieren

Stellen Sie sicher, dass Ihr HTTP-Client SSL/TLS-Zertifikate verifiziert, um Man-in-the-Middle-Angriffe zu verhindern.

Tokens nicht protokollieren

Protokollieren Sie niemals vollständige API-Tokens in Anwendungsprotokollen, Fehlermeldungen oder Debug-Ausgaben. Falls Logging notwendig ist, schwärzen oder maskieren Sie den Token-Wert.

Compliance & Governance

Compliance mit Sicherheitsstandards aufrechterhalten

Token-Nutzung dokumentieren

Führen Sie ein Inventar aller aktiven Tokens, deren Zwecke, Eigentümer und Ablaufdaten.

Regelmäßige Zugriffsüberprüfungen

Überprüfen Sie regelmäßig alle aktiven Tokens und widerrufen Sie diejenigen, die nicht mehr benötigt werden oder ehemaligen Teammitgliedern gehören.

Ablaufdaten festlegen

Setzen Sie für temporäre Anwendungsfälle oder kurzfristige Projekte Token-Ablaufdaten, um deren Lebensdauer automatisch zu begrenzen.

Best Practices

Folgen Sie diesen Sicherheits-Best-Practices bei der Nutzung von AppHighway-APIs:

  • Speichern Sie API-Tokens in Umgebungsvariablen, niemals direkt im Quellcode
  • Verwenden Sie verschiedene Tokens für verschiedene Umgebungen (Produktion, Staging, Entwicklung)
  • Setzen Sie geeignete Berechtigungen, um Token-Zugriffe nur auf benötigte APIs zu beschränken
  • Implementieren Sie Token-Rotation alle 90 Tage für erhöhte Sicherheit
  • Überwachen Sie die Token-Nutzung in Ihrem Dashboard, um verdächtige Aktivitäten zu erkennen
  • Setzen Sie Ablaufdaten für Tokens, die nur temporär benötigt werden
Authentifizierung - AppHighway API-Dokumentation