Sitzungen & Sicherheit
Dokumentensitzungen und Zugriffskontrolle
Ein Doconut-Token ist mächtig: Wer ihn vorlegt, könnte jede Seite des Dokuments anfordern, wenn er nicht an die eröffnende Sitzung gebunden wäre. Diese Seite erklärt, was eine Sitzung enthält, wie lange sie lebt und welche Prüfungen UseDoconut() standardmäßig aktiviert.
Was eine Dokumentensitzung enthält
- den geladenen Format-Viewer (die Dokument-Engine-Instanz, die das geparste Dokument hält),
- Seitenbezogenen Zustand — Drehungen, Spiegelungen und Annotationsdaten, die der Benutzer im Widget anwendet,
- den optionalen Suchindex, der beim ersten Suchen lazy erstellt wird (oder aus einer vorgefertigten
.srh-Datei in Web-Farm-Szenarien geladen wird), - das Sitzungs-Wasserzeichen aus
DocOptions.Watermark.
Lebensdauer
Sitzungen verfallen nach einem gleitenden Zeitfenster: DocOptions.TimeOut Minuten (Standard 60), das bei jeder Anfrage, die das Token vorlegt, zurückgesetzt wird. Wird eine Sitzung verworfen — durch Ablauf oder durch CloseDocument(token) —, ruft ihr Eviktions-Callback die Dokument-Engine ab und gibt den zugehörigen Speicher sofort frei.
// A short-lived session for a one-shot preview
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Eine Anfrage mit einem abgelaufenen Token erhält ein Fehlermotiv mit dem Text Document session not found. Please re-open document. — der Client muss das Dokument erneut öffnen, um ein frisches Token zu erhalten.
Eingebaute Token-Bindung
Mit UnsafeMode = false (Standard) bindet OpenDocumentAsync das neue Token an die ASP.NET-Sitzung der HTTP-Anfrage, die es geöffnet hat, indem ein secure-{token}-Marker in dieser Sitzung geschrieben wird. Die Doconut-Middleware verweigert dann das Bereitstellen von Seiten an jede andere Browsersitzung:
- Andere Browser/Sitzung, die ein gestohlenes Token vorlegen → Fehlermotiv
You Are Not Authorized To View This Page. - Sitzungs-Middleware nicht registriert → HTTP 500
Session middleware not configured. Call UseSession() before UseDoconut().
Deshalb besteht der Quick Start darauf, AddSession() + app.UseSession() vor dem Doconut-Zweig auszuführen. Zwei praktische Konsequenzen:
- Der Client muss das ASP.NET-Sitzungs-Cookie mit Seitenanfragen senden. Cross-Origin-Setups, die Cookies entfernen (oder ein API-Client ohne Cookie-Store), lassen die Prüfung fehlschlagen — das ist ein funktionierendes Feature, kein Fehler.
options.UnsafeMode = truedeaktiviert die Bindung vollständig. Sie existiert für kontrollierte Szenarien (z. B. Server-zu-Server-Rendering); in der Produktion sollte siefalsebleiben.
Die Token-Bindung wird ausschließlich durch diesen globalen UnsafeMode-Schalter gesteuert — er ist standardmäßig aktiviert (UnsafeMode = false) und gilt für jede Sitzung. Es gibt keinen per Dokumenten-Opt-out; das Setzen von UnsafeMode = true deaktiviert die Bindung global.
Zugriffsrechte und authentifizierte Benutzer
Wenn UnsafeMode false ist, fügt UseDoconut() automatisch DocumentAccessMiddleware vor der Seiten-Middleware ein. Registrieren Sie sie nicht ein zweites Mal. Trägt eine Anfrage ein Token, sucht sie das beim Öffnen des Dokuments aufgezeichnete Zugriffsrecht und autorisiert nur, wenn alle folgenden Bedingungen erfüllt sind:
- Ein Recht existiert für das Token,
- Es ist nicht abgelaufen (Lebensdauer des Rechts = das
TimeOutdes Dokuments), - Die anfragende ASP.NET-Sitzungs-ID stimmt mit derjenigen überein, die das Dokument geöffnet hat,
- Wenn der Öffner authentifiziert war, stimmt auch der
NameIdentifier-Anspruch des anfragenden Benutzers überein.
Fehler führen zu 403 — als PNG-Fehlermotiv für Seiten-/Thumbnail-Anfragen, sonst als Klartext. Die Meldung und der Token‑Abfrage‑Schlüssel stammen aus DocumentSecurityOptions (TokenQueryKey, Standard "token"; UnauthorizedMessage, Standard "You Are Not Authorized To View This Page."). Konfigurieren Sie diese Optionen über ASP.NET Core DI, bevor die Anwendung gebaut wird. Ist der Sitzungszustand nicht verfügbar, schlägt die Middleware mit HTTP 500 fehl: ASP.NET Session is required for Doconut document security.
builder.Services.Configure<Doconut.Security.DocumentSecurityOptions>(options =>
{
options.TokenQueryKey = "token";
options.UnauthorizedMessage = "You Are Not Authorized To View This Page.";
});Die Kern‑Seiten‑Middleware überprüft dann den secure-{token}‑Sitzungsmarker, bevor sie das Dokument bereitstellt. Bei UnsafeMode = true überspringt UseDoconut() die Zugriffs‑Middleware und die Kern‑Marker‑Prüfung wird ebenfalls deaktiviert.
Widerruf
CloseDocument(token) gibt nicht nur Speicher frei — es entfernt auch den secure-{token}‑Marker und widerruft das Zugriffsrecht, sodass ein geschlossenes Token sofort auf beiden Sicherheitsebenen ungültig ist.
Checkliste für die Produktion
- Behalten Sie
UnsafeMode = false(Standard) bei — dieser globale Schalter bindet Tokens an Sitzungen. - Registrieren Sie
AddSession()und rufen Sieapp.UseSession()vor dem Doconut‑Middleware‑Zweig auf. - Stellen Sie sicher, dass Ihre Sitzungs‑Cookie‑Richtlinie die Anfragen des Widgets das Cookie mitführen lässt (
SameSite, HTTPS). - Verwenden Sie
CloseDocument, wenn der Benutzer das Dokument verlässt — Speicher und Sicherheit profitieren beide. - Loggen oder teilen Sie Tokens niemals; behandeln Sie sie als kurzlebige Anmeldeinformationen.
War diese Seite hilfreich?