Oturumlar ve Güvenlik

Belge oturumları ve erişim kontrolü

Bir Doconut token'ı güçlüdür: onu sunan herkes, açılış oturumuna bağlanmamış olsaydı belgenin her sayfasını isteyebilir. Bu sayfa bir oturumun ne tuttuğunu, ne kadar süre yaşadığını ve UseDoconut() tarafından varsayılan olarak etkinleştirilen kontrolleri açıklar.

Bir belge oturumu ne tutar

Her başarılı OpenDocumentAsync, IMemoryCache içinde bir oturum oluşturur:

  • yüklenmiş format görüntüleyicisi (ayrıştırılmış belgeyi tutan belge motoru örneği),
  • sayfa başına durum — döndürme, çevirme ve kullanıcının widget içinde uyguladığı açıklama verileri,
  • isteğe bağlı arama dizini, ilk aramada tembelce oluşturulur (veya web-farm senaryolarında önceden oluşturulmuş .srh dosyasından yüklenir),
  • oturum filigranı DocOptions.Watermark'den.

Ömür

Oturumlar kaydırmalı pencere üzerinde sona erer: DocOptions.TimeOut dakika (varsayılan 60), token sunan her istekle sıfırlanır. Bir oturum — süresi dolduğunda ya da CloseDocument(token) tarafından — atıldığında, atma geri çağrısı belge motorunu serbest bırakır ve ilişkili belleği hemen temizler.

csharp
// Tek seferlik önizleme için kısa ömürlü bir oturum
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Süresi dolmuş bir token ile yapılan istek, Document session not found. Please re-open document. okuyan bir hata resmi alır — istemcinin yeni bir token almak için yeniden açması gerekir.

Yerleşik token bağlama

UnsafeMode = false (varsayılan) ile, OpenDocumentAsync yeni token'ı, onu açan HTTP isteğinin ASP.NET oturumuna bağlar, bu oturuma bir secure-{token} işareti yazarak. Doconut ara katmanı daha sonra başka bir tarayıcı oturumuna sayfa sunmayı reddeder:

  • Çalınmış bir token sunan farklı tarayıcı/oturum → hata resmi You Are Not Authorized To View This Page.
  • Oturum ara katmanı kaydedilmemiş → HTTP 500 Session middleware not configured. Call UseSession() before UseDoconut().

Bu, Quick Start'ın Doconut dalından önce AddSession() + app.UseSession() zorunlu kılmasıdır. İki pratik sonuç:

  • İstemcinin sayfa istekleriyle ASP.NET oturum çerezi göndermesi gerekir. Çerezleri temizleyen çapraz köken yapılandırmaları (veya çerez deposu olmayan bir API istemcisi) kontrolü başarısız kılar — bu bir özellik, hata değildir.
  • options.UnsafeMode = true bağlamayı tamamen devre dışı bırakır. Kontrollü senaryolar için vardır (ör. sunucu‑sunucu render); üretimde false bırakın.

Token bağlama yalnızca bu global UnsafeMode anahtar tarafından kontrol edilir — varsayılan olarak açıktır (UnsafeMode = false) ve her oturuma uygulanır. Belge başına bir çıkış seçeneği yoktur; UnsafeMode = true ayarı bağlamayı global olarak devre dışı bırakır.

Erişim izinleri ve kimliği doğrulanmış kullanıcılar

UnsafeMode false olduğunda, UseDoconut() DocumentAccessMiddleware'yi sayfa ara katmanından önce otomatik olarak ekler. İkinci kez kaydetmeyin. Bir istek token taşıdığında, belgenin açıldığı sırada kaydedilen erişim iznini arar ve yalnızca aşağıdakiler sağlandığında yetkilendirir:

  1. token için bir izin mevcut,
  2. süresi dolmamış (izin ömrü = belgenin TimeOut),
  3. istekte bulunan ASP.NET oturum kimliği, belgeyi açan oturum kimliğiyle eşleşiyor,
  4. açan kullanıcı kimliği doğrulanmışsa, istekte bulunan kullanıcının NameIdentifier talebi de eşleşiyor.

Başarısızlıklar 403 döndürür — sayfa/küçük resim isteklerinde PNG hata resmi olarak, aksi takdirde düz metin olarak. Mesaj ve token sorgu anahtarı DocumentSecurityOptions'den gelir (TokenQueryKey, varsayılan "token"; UnauthorizedMessage, varsayılan "You Are Not Authorized To View This Page."). Bu seçenekleri uygulamayı derlemeden önce ASP.NET Core DI aracılığıyla yapılandırın. Oturum durumu mevcut değilse ara katman HTTP 500 ile kapalı hataya düşer: ASP.NET Session is required for Doconut document security.

csharp
builder.Services.Configure<Doconut.Security.DocumentSecurityOptions>(options =>
{
    options.TokenQueryKey = "token";
    options.UnauthorizedMessage = "You Are Not Authorized To View This Page.";
});

Ana sayfa ara katmanı, belgeyi sunmadan önce secure-{token} oturum işaretini doğrular. UnsafeMode = true ile, UseDoconut() erişim ara katmanını atlar ve temel işaret kontrolü de devre dışı bırakılır.

İptal

CloseDocument(token) sadece belleği serbest bırakmaz — aynı zamanda secure-{token} işaretini kaldırır ve erişim iznini iptal eder, böylece kapatılan bir token iki güvenlik katmanında da hemen etkisiz hale gelir.

Üretim için kontrol listesi

  • UnsafeMode = false (varsayılan) tutun — bu global anahtar token'ları oturumlara bağlar.
  • AddDistributedMemoryCache()'yi (MVC ve Razor Pages uygulamaları zaten sahiptir) ve AddSession()'yi kaydedin ve Doconut ara katman dalından önce app.UseSession()'yi çağırın.
  • Oturum çerezi politikanızın widget isteklerinin çerezi taşımasına izin verdiğinden emin olun (SameSite, HTTPS).
  • Kullanıcı belgeyi terk ettiğinde CloseDocument kullanın — bellek ve güvenlik her ikisi de fayda sağlar.
  • Token'ları asla kaydetmeyin veya paylaşmayın; onları kısa ömürlü kimlik bilgileri olarak ele alın.

Bu sayfa yardımcı oldu mu?