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
issauf meinGPT prüfenaudauf erwarteteorganizationIdprüfenexp/iatvalidieren- Requests ohne validen Token ablehnen
JWKS-Endpunkt:
https://app.meingpt.com/api/custom-apps/v1/jwks/{organizationId}
Relevante JWT-Claims
| Claim | Beschreibung |
|---|---|
iss | immer https://app.meingpt.com |
sub | eindeutige Nutzer-ID |
aud | Organisations-ID |
exp / iat | Ablauf- und Ausstellungszeit |
email, username | Nutzeridentität |
role, teams | Rollen-/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' });
}
}