@5minds/processcube_app_sdk 8.6.2 → 8.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +88 -0
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -383,6 +383,94 @@ export default async function (payload: any) {
383
383
  }
384
384
  ```
385
385
 
386
+ ### Manuelles Abmelden und Session zurücksetzen
387
+
388
+ Bei der Authentifizierung existieren **zwei getrennte Sessions**:
389
+
390
+ | Ebene | Wo gespeichert | Zweck |
391
+ | --------------------- | --------------------------------- | ------------------------------------------------------ |
392
+ | **NextAuth-Session** | Verschlüsseltes Cookie im Browser | Hält Access Token, ID Token und Refresh Token (JWT) |
393
+ | **Authority-Session** | Bei der ProcessCube Authority | Ausstellende Sitzung, gegen die Tokens erneuert werden |
394
+
395
+ Ein häufiges Fehlerbild ist, dass ein Benutzer **eingeloggt erscheint** (die NextAuth-Session besteht noch), der Access Token aber nicht mehr genutzt werden kann — z. B. weil der zugehörige Authority-Account gelöscht/neu angelegt wurde oder die Authority-Session abgelaufen ist. In diesem Fall schlägt die Token-Erneuerung fehl (`session.error === 'RefreshAccessTokenError'`, siehe [Troubleshooting](#bekannte-fehlerquellen-bei-der-authority-troubleshooting)) und die Lösung ist ein **vollständiges Abmelden mit anschließender Neuanmeldung**, um einen frischen Token zu erhalten.
396
+
397
+ #### 1. NextAuth-Session löschen (Standardfall)
398
+
399
+ `signOut()` aus NextAuth entfernt das Session-Cookie im Browser. Danach fordert die App bei der nächsten geschützten Aktion eine Neuanmeldung an, bei der ein frischer Access Token ausgestellt wird:
400
+
401
+ ```tsx
402
+ 'use client';
403
+
404
+ import { signOut } from 'next-auth/react';
405
+
406
+ export function LogoutButton() {
407
+ // callbackUrl bestimmt, wohin nach dem Abmelden umgeleitet wird
408
+ return <button onClick={() => signOut({ callbackUrl: '/' })}>Abmelden</button>;
409
+ }
410
+ ```
411
+
412
+ > **Hinweis:** `signOut()` löscht nur die **lokale** NextAuth-Session. Die Sitzung bei der Authority bleibt bestehen, sodass eine erneute Anmeldung u. U. ohne erneute Passworteingabe erfolgt (Single Sign-On).
413
+
414
+ #### 2. Zusätzlich bei der Authority abmelden (Federated Logout)
415
+
416
+ Um auch die Sitzung bei der Authority zu beenden, wird nach dem lokalen Abmelden auf den `end_session_endpoint` der Authority umgeleitet. Die konkrete URL steht im OIDC-Discovery-Dokument der Authority (`${PROCESSCUBE_AUTHORITY_URL}/.well-known/openid-configuration`):
417
+
418
+ ```tsx
419
+ 'use client';
420
+
421
+ import { signOut } from 'next-auth/react';
422
+
423
+ async function logoutEverywhere(idToken: string) {
424
+ // 1. Lokale NextAuth-Session löschen (kein Redirect, wir leiten selbst um)
425
+ await signOut({ redirect: false });
426
+
427
+ // 2. end_session_endpoint aus dem Discovery-Dokument holen
428
+ const discovery = await fetch(`${process.env.NEXT_PUBLIC_PROCESSCUBE_AUTHORITY_URL}/.well-known/openid-configuration`).then((r) => r.json());
429
+
430
+ // 3. Zur Authority umleiten, um auch dort abzumelden
431
+ const url = new URL(discovery.end_session_endpoint);
432
+ url.searchParams.set('id_token_hint', idToken);
433
+ url.searchParams.set('post_logout_redirect_uri', window.location.origin);
434
+ window.location.href = url.toString();
435
+ }
436
+ ```
437
+
438
+ Der `id_token_hint` ist das ID Token aus der Session (z. B. über einen `session`-Callback verfügbar gemacht). `post_logout_redirect_uri` muss bei der Authority als erlaubte Redirect-URI konfiguriert sein.
439
+
440
+ ### Bekannte Fehlerquellen bei der Authority (Troubleshooting)
441
+
442
+ | Log-/Fehlermeldung | Wahrscheinliche Ursache | Lösung |
443
+ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
444
+ | `No access token found for authenticated user`<br>`Account not found` | Die NextAuth-Session besteht noch, der zugehörige Authority-Account existiert aber nicht mehr (gelöscht/neu angelegt) oder die Authority-Session ist abgelaufen. Die Token-Erneuerung schlägt fehl. | Vollständig **abmelden und neu anmelden** (siehe [Manuelles Abmelden](#manuelles-abmelden-und-session-zurücksetzen)). Dabei wird ein frischer Token ausgestellt. |
445
+ | `session.error === 'RefreshAccessTokenError'` | Die automatische Token-Erneuerung im `authConfigJwtCallback` ist fehlgeschlagen (abgelaufene/ungültige Session, fehlender Refresh Token). | Fehler in der App auswerten und den Benutzer zur Neuanmeldung auffordern (siehe Snippet unten). |
446
+ | `No refresh token present. Your authority might be configured incorrectly.` | Die Authority stellt keinen Refresh Token aus — meist fehlt der `offline_access`-Scope oder `prompt=consent` in der NextAuth-Provider-Konfiguration. | Provider so konfigurieren, dass ein Refresh Token angefordert wird. Siehe [Authentication mit NextAuth](https://processcube.io/docs/app-sdk/samples/authority/authentication-with-nextauth). |
447
+ | Warnung: `PROCESSCUBE_AUTHORITY_URL, NEXTAUTH_CLIENT_ID and NEXTAUTH_SECRET must be set` | Für die automatische Token-Erneuerung notwendige Umgebungsvariablen fehlen. | `PROCESSCUBE_AUTHORITY_URL`, `NEXTAUTH_CLIENT_ID` und `NEXTAUTH_SECRET` setzen (siehe [Umgebungsvariablen](#umgebungsvariablen)). |
448
+ | `AccessToken or Sub could not be determined!` aus `getIdentity()` | Es existiert keine gültige Benutzer-Session (nicht eingeloggt oder Session ungültig). | Sicherstellen, dass der Aufruf im Kontext eines eingeloggten Benutzers erfolgt; ggf. Neuanmeldung. |
449
+
450
+ #### Erneuerungsfehler in der App erkennen
451
+
452
+ Da `authConfigSessionCallback` einen aufgetretenen Erneuerungsfehler nach `session.error` durchreicht, kann die App gezielt auf abgelaufene Sessions reagieren und den Benutzer zur Neuanmeldung führen:
453
+
454
+ ```tsx
455
+ 'use client';
456
+
457
+ import { useEffect } from 'react';
458
+ import { signIn, useSession } from 'next-auth/react';
459
+
460
+ export function SessionGuard() {
461
+ const { data: session } = useSession();
462
+
463
+ useEffect(() => {
464
+ if (session?.error === 'RefreshAccessTokenError') {
465
+ // Token konnte nicht erneuert werden → Neuanmeldung erzwingen
466
+ signIn();
467
+ }
468
+ }, [session]);
469
+
470
+ return null;
471
+ }
472
+ ```
473
+
386
474
  ## Konfiguration
387
475
 
388
476
  ### withApplicationSdk Plugin
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/processcube_app_sdk",
3
- "version": "8.6.2",
3
+ "version": "8.7.0",
4
4
  "description": "The SDK for ProcessCube Apps",
5
5
  "type": "module",
6
6
  "main": "build/common/index.cjs",
@@ -98,7 +98,7 @@
98
98
  "typescript": "^5.8.3"
99
99
  },
100
100
  "peerDependencies": {
101
- "next": ">=15",
101
+ "next": ">=15.5.24 <16.0.0 || >=16.3.3",
102
102
  "next-auth": "~4.24.12",
103
103
  "react": "^19.1.0"
104
104
  },