WebsitePlatform Login

Security & Authentication Proxy

Absicherung auf meinGPT-Verbindungen und sichere Weitergabe von Nutzerkontext

Zielbild

Deine App akzeptiert nur Requests, die über meinGPT kommen, und nutzt meinGPT als vertrauenswürdigen Auth-Proxy.

Quick Start

Token empfangen - Der JWT wird im URL-Hash übergeben:

const token = new URLSearchParams(window.location.hash.slice(1)).get('token');

Token verifizieren - Prüfe Signatur und Claims serverseitig über den JWKS-Endpunkt.

Ablauf beachten - Tokens laufen nach 1 Stunde ab; Refresh erfolgt per postMessage.

Pflichtchecks in deiner App

  • JWT-Signatur über JWKS verifizieren
  • iss auf meinGPT prüfen
  • aud auf erwartete organizationId prüfen
  • exp/iat validieren
  • Requests ohne validen Token ablehnen

JWKS-Endpunkt:

https://app.meingpt.com/api/custom-apps/v1/jwks/{organizationId}

Relevante JWT-Claims

ClaimBeschreibung
issimmer https://app.meingpt.com
subeindeutige Nutzer-ID
audOrganisations-ID
exp / iatAblauf- und Ausstellungszeit
email, usernameNutzeridentität
role, teamsRollen-/Teamkontext für Autorisierung

Das allgemeine, produktübergreifende Muster findest Du unter JWT Identity Forwarding.

Nur meinGPT als Einbettungsquelle erlauben

Setze CSP für dein Frontend:

Content-Security-Policy: frame-ancestors https://app.meingpt.com;

Optional mit weiteren erlaubten Domains (z. B. regionale Hostnamen), falls bei euch verwendet.

Proxy-Prinzip für Dritt-APIs

  • API-Keys bleiben serverseitig in deiner App
  • Frontend ruft nur deine Backend-Endpunkte
  • Backend setzt Berechtigungen anhand der meinGPT-JWT-Claims durch

Damit fungiert meinGPT als Identity-Quelle und dein Backend als Policy-Enforcer.

Minimal-Middleware (Node/Express)

import * as jose from 'jose';

const JWKS = jose.createRemoteJWKSet(
  new URL('https://app.meingpt.com/api/custom-apps/v1/jwks/<ORG_ID>')
);

export async function requireMeinGPTAuth(req, res, next) {
  try {
    const token = req.headers.authorization?.replace('Bearer ', '');
    if (!token) return res.status(401).json({ error: 'Missing token' });

    const { payload } = await jose.jwtVerify(token, JWKS, {
      issuer: 'https://app.meingpt.com',
      audience: '<ORG_ID>',
    });

    req.user = payload;
    next();
  } catch {
    res.status(401).json({ error: 'Invalid token' });
  }
}

Verwandte Doku

Auf dieser Seite