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()'un varsayılan olarak etkinleştirdiği kontrolleri açıklar.
Bir belge oturumu ne tutar
Her başarılı OpenDocumentAsync çağrısı IMemoryCache içinde bir oturum oluşturur:
- yüklenmiş format görüntüleyicisi (belge motoru örneği, ayrıştırılmış belgeyi tutar),
- sayfa başına durum — widget içinde kullanıcının uyguladığı döndürme, çevirme ve açıklama verileri,
- isteğe bağlı arama indeksi, ilk aramada tembelce oluşturulur (veya web‑farm senaryolarında önceden oluşturulmuş bir
.srhdosyasından yüklenir), - oturum filigranı,
DocOptions.Watermark'tan.
Ömür
Oturumlar kaydırmalı pencere üzerinden sona erer: DocOptions.TimeOut dakika (varsayılan 60), tokenı sunan her istek tarafından sıfırlanır. Bir oturum, süresi dolduğunda ya da CloseDocument(token) ile atıldığında, atılma geri çağrısı belge motorunu serbest bırakır ve ilişkili belleği hemen temizler.
// A short-lived session for a one-shot preview
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });Süresi dolmuş bir tokenla yapılan istek, Document session not found. Please re-open document. metnini içeren bir hata resmi alır — istemcinin yeni bir token almak için belgeyi 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 yazar. 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 yüzden Hızlı Başlangıç, Doconut dalından önce AddSession() + app.UseSession() kullanılmasını şart koşar. İki pratik sonuç:
- İstemci, sayfa istekleriyle birlikte ASP.NET oturum çerezini göndermelidir. Çerezleri kaldıran çapraz kaynak yapılandırmaları (veya çerez deposu olmayan bir API istemcisi) kontrolü geçemez — bu bir özellik, hata değildir.
options.UnsafeMode = truebağlamayı tamamen devre dışı bırakır. Kontrollü senaryolar için (ör. sunucu‑sunucu render) mevcuttur; üretimdefalsebırakın.
Token bağlama yalnızca bu global UnsafeMode anahtarıyla 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ı küresel olarak devre dışı bırakır.
Erişim izinleri ve kimliği doğrulanmış kullanıcılar
UnsafeMode false olduğunda, UseDoconut() otomatik olarak sayfa ara katmanından önce DocumentAccessMiddleware 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:
- token için bir izin mevcutsa,
- izin süresi dolmamışsa (izin ömrü belgenin
TimeOutdeğerine eşittir), - istek yapan ASP.NET oturum kimliği, belgeyi açan oturum kimliğiyle eşleşiyorsa,
- eğer belgeyi açan kimliği doğrulanmışsa, isteği yapan kullanıcının
NameIdentifiertalebi de eşleşiyorsa.
Başarısızlıklar 403 döndürür — sayfa/küçük resim isteklerinde PNG hata resmi, diğer durumlarda düz metin olarak. Mesaj ve token sorgu anahtarı DocumentSecurityOptions'tan gelir (TokenQueryKey, varsayılan "token"; UnauthorizedMessage, varsayılan "You Are Not Authorized To View This Page."). Bu seçenekleri uygulamayı oluşturmadan önce ASP.NET Core DI üzerinden yapılandırın. Oturum durumu mevcut değilse ara katman HTTP 500 ile kapanır: 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.";
});Ana sayfa ara katmanı, belgeyi sunmadan önce secure-{token} oturum işaretini doğrular. UnsafeMode = true olduğunda, 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 her iki güvenlik katmanında da hemen etkisiz hale gelir.
Üretim için kontrol listesi
UnsafeMode = false(varsayılan) tutun — bu global anahtar tokenları oturumlara bağlar.AddSession()kaydedin ve Doconut ara katmanından önceapp.UseSession()çağırın.- Oturum çerez politikası, widget isteklerinin çerezi taşımasına izin verdiğinden emin olun (
SameSite, HTTPS). - Kullanıcı belgeyi terk ettiğinde
CloseDocumentkullanın — hem bellek hem de güvenlik fayda sağlar. - Tokenları asla kaydetmeyin veya paylaşmayın; onları kısa ömürlü kimlik bilgileri olarak değerlendirin.
Bu sayfa yardımcı oldu mu?