Login- und Session-Architekturen für native Mobile Apps mit IdP
- Ziel und KontextDieser Artikel beschreibt saubere Architektur-Varianten für Authentifizierung und Session-Handling in nativen Mobile-Apps, die einen externen Identity Provider (IdP) über OAuth 2.0 / OpenID Connect (OIDC) nutzen.
Ziel ist:- klare Trennung der Mechanismen
- vergleichbare Varianten
- belastbare Entscheidungsgrundlage
- klare Trennung der Mechanismen
- Architektur-Grundlagen (präzise Begriffe)2.1 Beteiligte Komponenten
- Mobile App (Public Client)
- Authorization Server / IdP
- Resource Server (API)
2.2 Token-Artefakte- Access Token
- kurzlebig (typisch: Minuten)
- Zugriff auf APIs
- kurzlebig (typisch: Minuten)
- Refresh Token
- langlebiger
- dient zur Erneuerung von Access Tokens
- hochsensitiv
- langlebiger
2.3 Zwei strikt getrennte Session-Ebenen
(A) IdP-Session- existiert im System-Browser / ASWebAuthenticationSession / Custom Tabs
- ermöglicht SSO
- nicht direkt durch App kontrolliert
- basiert auf lokal gespeicherten Tokens
- vollständig in Kontrolle der App
- Mobile App (Public Client)
- Dimensionen des Designs (orthogonal!)Alle sinnvollen Architekturen entstehen durch Kombination dieser Dimensionen:
3.1 Dimension 1: Session-Persistenz (App-seitig)
Variante 1: Keine Persistenz- Tokens nur im RAM
- nach App-Neustart verloren
- Refresh Token im Secure Storage:
- iOS: Keychain
- Android: Keystore
- iOS: Keychain
- automatische Token-Erneuerung
3.2 Dimension 2: Session-Lifetime-Modell
Gilt für Refresh Token / Session:
Absolute Lifetime- harte Obergrenze (z. B. 30 Tage)
- Ablauf nach Inaktivität (z. B. 15 min)
- Verlängerung bei Nutzung
- typischerweise kombiniert mit:
- Rotation
- Max Lifetime
- Rotation
3.3 Dimension 3: Token-Erneuerung
Ohne Refresh Token- Access Token läuft ab → neuer Login erforderlich
- Silent Refresh möglich
- jeder Refresh → neuer Refresh Token
- alter Token wird ungültig
3.4 Dimension 4: Zugriffsschutz auf App-Ebene
Unabhängig von IdP:Keine zusätzliche Sperre
Lokale Re-Authentifizierung
- Biometrie (Face ID / Fingerprint)
- Geräte-PIN
- bei App-Start
- bei Resume
- bei sensiblen Aktionen (Step-up)
3.5 Dimension 5: Token-Sicherheitsniveau
Bearer Tokens- Besitz reicht aus
(z. B. DPoP)- Token an kryptografischen Schlüssel gebunden
- Schutz gegen Token-Diebstahl
- Schlüssel im Secure Enclave / TEE
- stärkste Bindung an Gerät
3.6 Dimension 6: IdP-Session-Nutzung (SSO-Verhalten)
SSO aktiv- erneuter Login ohne User-Interaktion möglich
- z. B. prompt=login
- Tokens nur im RAM
- Referenz-ArchitekturvariantenJetzt sinnvoll geschnittene, reale Kombinationen:Variante A: Ephemere Session (High Security) ×
Konfiguration- keine Persistenz
- kein Refresh Token
- kurzer Access Token
- App-Session endet beim Schliessen
- IdP-Session kann Login beschleunigen
- minimales Risiko bei Geräteverlust
- keine Token-Speicherung
- sehr schlechte UX
- häufige Redirects
- hochsensitive Spezialanwendungen
Variante B: Persistente Session (Standard)×
Konfiguration- Refresh Token im Secure Storage
- Bearer Tokens
- Absolute Lifetime
- «Stay logged in»
- Silent Refresh
- sehr gute UX
- Standardimplementierung
- Risiko bei Token-Exfiltration
- Revocation kritisch
Variante C: Persistente Session mit Sliding + Rotation (Best Practice)×
Konfiguration- Refresh Token + Rotation
- Sliding Session + Absolute Cap
- Secure Storage
- aktive Nutzung verlängert Session
- kompromittierte Tokens werden schnell invalidiert
- sehr gute Balance UX / Sicherheit
- heute weit verbreitet
- höhere Komplexität
- Server muss Zustand verwalten
Variante D: Persistenz + lokale Re-Authentifizierung×
Konfiguration- wie Variante B oder C
- zusätzlich
- Biometrie / PIN vor Zugriff
- zwei Schutzebenen:
- Besitz (Token)
- Nutzerpräsenz
- deutlich erhöhte Sicherheit bei guter UX
- schützt gegen «shoulder surfing» / unlocked device
- UX-Friktion
- Fallback-Logik nötig
- Banking
- eGovernment
Variante E: Sender-Constrained Session (High Security Modern)×
Konfiguration- DPoP oder ähnliche Mechanismen
- Schlüssel im Secure Enclave / Keystore
- meist kombiniert mit Variante C oder D
- Token allein nicht ausreichend
- Bindung an Gerät
- sehr hoher Schutz gegen Token-Diebstahl
- state-of-the-art
- komplex
- Interoperabilität / Debugging anspruchsvoll
- keine Persistenz
- Varianten Vergleich
Variante UX Sicherheit Komplexität Bemerkung A Ephemer ❌ ✅✅ ✅ selten sinnvoll B Persistenz ✅ ⚠️ ⚠️ Basis C Sliding + Rotation ✅ ✅ ⚠️⚠️ Best Practice D + Re-Auth ⚠️/✅ ✅✅ ⚠️⚠️ für sensitive Daten E Sender-Constrained ✅ 🚀 ❌ High-End - Kritische Detailthemen (oft unterschätzt) 6.1 Logout-Semantik
- Local Logout → Tokens löschen
- Global Logout → IdP-Session beenden (Browser!)
- Revocation → Refresh Token serverseitig invalidieren
6.2 Geräteverlust
Fragen:- sind Tokens geschützt?
- ist Biometrie aktiv?
- gibt es Remote Revocation?
6.3 Offline-Verhalten- Access Token gültig → Offline möglich?
- Refresh → benötigt Netzwerk
6.4 Multi-Device- pro Gerät eigene Refresh Tokens?
- zentrale Invalidierung?
6.5 Step-up Authentication- bei kritischen Aktionen erneute Authentifizierung
- unabhängig von Session
- Local Logout → Tokens löschen
- Empfehlungen
- Standard-Anwendungen → Variante C
- Sensitive Anwendungen (z. B. eIAM / Behörden) → Variante D + optional E
- Maximale Sicherheit → C + D + E kombiniert
- Standard-Anwendungen → Variante C
- FazitDie wesentliche Erkenntnis ist:Es gibt nicht „das eine Login-Pattern“, sondern ein Baukastensystem aus orthogonalen Entscheidungen.
Saubere Architektur bedeutet:- Dimensionen nicht vermischen
- Kombination bewusst wählen
- Risiken explizit adressieren
- Dimensionen nicht vermischen
Empfehlung: Authentifizierungs- und Session-Architektur für eine hochsensitive Mobile-App
- ZielbildDie Anwendung soll:
- hohe Sicherheitsanforderungen erfüllen (Missbrauch bei Geräteverlust verhindern)
- gleichzeitig im Alltag effizient nutzbar bleiben
- unter unterschiedlichen Einsatzbedingungen funktionieren (wechselnde Nutzung, evtl. eingeschränkte Konnektivität)
- hohe Sicherheitsanforderungen erfüllen (Missbrauch bei Geräteverlust verhindern)
- Empfohlene Architektur (Kombination)2.1 Session-Strategie
→ Persistente Session mit Sliding Lifetime und Rotation
Umsetzung- Verwendung von Refresh Tokens
- Speicherung im plattformseitig geschützten Secure Storage
- Refresh Token Rotation bei jeder Erneuerung
- Kombination aus:
- Idle Timeout (z. B. Stundenbereich)
- Absolute Lifetime (z. B. Tagebereich)
- Idle Timeout (z. B. Stundenbereich)
- Vermeidet häufige Logins im Einsatz
- Begrenzung des Schadens bei Token-Kompromittierung
- Standard für moderne, sichere Systeme
2.2 Zugriffsschutz auf App-Ebene
→ Verpflichtende lokale Re-Authentifizierung
Umsetzung- Zugriff auf Session nur nach:
- Biometrie (primär)
- Geräte-PIN (Fallback)
- Biometrie (primär)
- Durchsetzung:
- beim App-Start
- nach definierter Inaktivität (z. B. wenige Minuten)
- bei sensitiven Aktionen
- beim App-Start
- Schutz bei:
- entsperrten, unbeaufsichtigten Geräten
- gemeinsam genutzten Geräten
- entsperrten, unbeaufsichtigten Geräten
- Signifikante Erhöhung der Sicherheit ohne vollständigen Re-Login
2.3 Token-Sicherheitsniveau
→ Sender-constrained Tokens (empfohlen)
Umsetzung- Bindung der Tokens an einen gerätespezifischen Schlüssel
- Schlüsselablage im:
- Secure Enclave (iOS)
- Trusted Execution Environment (Android)
- Secure Enclave (iOS)
- Verhindert Nutzung abgegriffener Tokens auf anderen Geräten
- Reduziert Risiko bei Malware oder Speicherzugriff
2.4 IdP-Integration
→ Systembrowser-basierter Login (OIDC Best Practice)
Umsetzung- Verwendung von:
- ASWebAuthenticationSession (iOS)
- Custom Tabs (Android)
- ASWebAuthenticationSession (iOS)
- Nutzung vorhandener IdP-Session (SSO)
- Vermeidung von Credential-Handling in der App
- Nutzung bestehender Authentifizierungsstärke (z. B. MFA)
2.5 Logout- und Revocation-Strategie
Umsetzung- Lokaler Logout
- vollständige Löschung aller Tokens
- vollständige Löschung aller Tokens
- Serverseitige Revocation
- Invalidierung von Refresh Tokens
- Invalidierung von Refresh Tokens
- Optional:
- Global Logout über IdP
- Global Logout über IdP
- Kontrollierter Sitzungsabbruch bei:
- Geräteverlust
- Rollenwechsel
- Sicherheitsvorfällen
- Geräteverlust
2.6 Offline-Verhalten
Empfehlung- Zugriff auf nicht-sensitive, bereits geladene Daten auch offline erlauben
- Keine Token-Erneuerung ohne Netzwerk
- Sensible Aktionen nur online zulassen
- Verwendung von Refresh Tokens
- Sicherheitsniveau (Einordnung)Die empfohlene Kombination entspricht:
- hohem Schutz gegen Geräteverlust
- hohem Schutz gegen Token-Diebstahl
- kontrollierter Session-Lebensdauer
- guter operativer Nutzbarkeit
- hohem Schutz gegen Geräteverlust
- Bewusst verworfene AlternativenKein vollständiger Re-Login bei jeder Nutzung
- zu hohe Friktion
- operativ nicht praktikabel
- unzureichender Schutz bei physischem Zugriff
- erhöhtes Risiko bei Token-Exfiltration
- zu hohe Friktion
- Ergänzende Massnahmen (optional, je nach Schutzbedarf)
- Step-up Authentication bei kritischen Aktionen
- Gerätebindung mit Attestation
- Remote Session Kill
- Erkennung von Root/Jailbreak (mit Vorsicht einsetzen)
- Step-up Authentication bei kritischen Aktionen
- FazitEmpfohlen wird eine mehrschichtige Sicherheitsarchitektur:Persistente, rotierende Session
- lokale Re-Authentifizierung
- gerätegebundene Token
Diese Kombination erreicht eine robuste Balance zwischen Sicherheit und Nutzbarkeit und ist für Anwendungen mit erhöhtem Schutzbedarf geeignet. - lokale Re-Authentifizierung