OAuth 2.0: Authentifizierung einfach erklärt | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

235 Dokumentationen verfügbar

Wissensdatenbank

OAuth2 Authentifizierung Erklaert

Zuletzt aktualisiert: 20.01.2026 um 10:03 Uhr

OAuth 2.0: Authentifizierung einfach erklärt

OAuth 2.0 ist der Standard für sichere API-Autorisierung. "Mit Google anmelden", "Mit GitHub anmelden" – das ist OAuth. Dieser Guide erklärt die Konzepte.

Was ist OAuth 2.0?

OAuth 2.0 ist ein Autorisierungsframework, das einer Anwendung erlaubt, im Namen eines Benutzers auf Ressourcen zuzugreifen – ohne dass der Benutzer sein Passwort teilen muss.

Beteiligte Parteien

Rolle Beschreibung Beispiel
Resource Owner Der Benutzer Sie
Client Die Anwendung Eine App die Ihre GitHub-Repos lesen will
Authorization Server Authentifiziert und gibt Tokens aus GitHub Login
Resource Server API mit den geschützten Daten GitHub API

OAuth vs. Andere Methoden

Methode Verwendung
OAuth 2.0 Autorisierung (Zugriff auf Ressourcen)
OpenID Connect Authentifizierung (Identität) auf OAuth 2.0 aufgebaut
API Keys Einfache Server-zu-Server Authentifizierung
JWT Token-Format (kann mit OAuth verwendet werden)

Grant Types (Flows)

1. Authorization Code Flow (empfohlen)

Für Server-side Anwendungen. Sicherster Flow.

1. User klickt "Mit GitHub anmelden"
2. Redirect zu GitHub Login
3. User gibt Zugangsdaten ein
4. GitHub redirected zurück mit Code
5. Server tauscht Code gegen Access Token
6. Server nutzt Token für API-Calls

   ┌──────────┐          ┌─────────────┐          ┌────────────┐
   │  Client  │          │   GitHub    │          │  GitHub    │
   │  (App)   │          │   (Auth)    │          │   (API)    │
   └────┬─────┘          └──────┬──────┘          └──────┬─────┘
        │                       │                        │
        │ 1. Redirect mit       │                        │
        │    client_id, scope   │                        │
        │──────────────────────>│                        │
        │                       │                        │
        │ 2. User Login         │                        │
        │                       │                        │
        │ 3. Redirect mit Code  │                        │
        │<──────────────────────│                        │
        │                       │                        │
        │ 4. Code + Secret      │                        │
        │──────────────────────>│                        │
        │                       │                        │
        │ 5. Access Token       │                        │
        │<──────────────────────│                        │
        │                       │                        │
        │ 6. API Request mit Token                       │
        │───────────────────────────────────────────────>│
        │                       │                        │
        │ 7. Daten              │                        │
        │<───────────────────────────────────────────────│

Authorization Request

GET https://github.com/login/oauth/authorize?
  response_type=code
  &client_id=YOUR_CLIENT_ID
  &redirect_uri=https://yourapp.com/callback
  &scope=read:user%20repo
  &state=random_string

Token Request

POST https://github.com/login/oauth/access_token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=AUTHORIZATION_CODE
&redirect_uri=https://yourapp.com/callback
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET

Token Response

{
  "access_token": "gho_xxxxxxxxxxxx",
  "token_type": "Bearer",
  "scope": "read:user,repo",
  "expires_in": 3600
}

2. Authorization Code Flow mit PKCE

Für Mobile Apps und SPAs. Kein Client Secret nötig.

// 1. Code Verifier generieren
const codeVerifier = generateRandomString(128);

// 2. Code Challenge berechnen
const codeChallenge = base64url(sha256(codeVerifier));

// 3. Auth Request mit Challenge
/authorize?
  ...
  &code_challenge=CHALLENGE
  &code_challenge_method=S256

// 4. Token Request mit Verifier
grant_type=authorization_code
&code=CODE
&code_verifier=VERIFIER

3. Client Credentials Flow

Für Server-zu-Server Kommunikation (kein User involviert).

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=read:data

Access Token verwenden

// API-Anfrage mit Bearer Token
GET https://api.github.com/user
Authorization: Bearer gho_xxxxxxxxxxxx

Refresh Tokens

Access Tokens sind kurzlebig. Refresh Tokens erneuern sie:

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&refresh_token=REFRESH_TOKEN
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET

Scopes

Scopes begrenzen, was die App tun darf:

# Nur Profil lesen
scope=read:user

# Repos lesen
scope=read:user repo

# Mehrere Scopes (Leerzeichen oder Komma)
scope=read:user,repo:status,gist

Implementation mit Node.js

const express = require('express');
const axios = require('axios');

const CLIENT_ID = process.env.GITHUB_CLIENT_ID;
const CLIENT_SECRET = process.env.GITHUB_CLIENT_SECRET;
const REDIRECT_URI = 'http://localhost:3000/callback';

// 1. Login starten
app.get('/login', (req, res) => {
  const authUrl = `https://github.com/login/oauth/authorize?` +
    `client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&scope=read:user`;
  res.redirect(authUrl);
});

// 2. Callback verarbeiten
app.get('/callback', async (req, res) => {
  const { code } = req.query;

  // Code gegen Token tauschen
  const tokenResponse = await axios.post(
    'https://github.com/login/oauth/access_token',
    {
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      code,
      redirect_uri: REDIRECT_URI
    },
    { headers: { Accept: 'application/json' } }
  );

  const accessToken = tokenResponse.data.access_token;

  // 3. API-Anfrage
  const userResponse = await axios.get('https://api.github.com/user', {
    headers: { Authorization: `Bearer ${accessToken}` }
  });

  res.json(userResponse.data);
});

Sicherheits-Best-Practices

⚠️ Sicherheitsregeln:
  • State-Parameter nutzen gegen CSRF
  • PKCE für SPAs/Mobile (kein Secret möglich)
  • HTTPS immer
  • Tokens sicher speichern (nicht in localStorage!)
  • Minimale Scopes anfordern
  • Token-Rotation implementieren

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120