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ürdüğü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 indeksi, ilk aramada tembelce oluşturulur (veya web-farm senaryolarında önceden oluşturulmuş
.srhdosyasından yüklenir), - oturum filigranı
DocOptions.Watermarktarafından.
Ömür
Oturumlar kaydırmalı pencere üzerinden süresi dolar: 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 kapatır ve ilişkili belleği hemen serbest bırakır.
// 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ının nedenidir. İki pratik sonuç:
- İstemci, sayfa istekleriyle birlikte ASP.NET oturum çerezini göndermelidir. Çerezleri temizleyen çapraz kaynak yapılandırmaları (veya çerez kavanozu olmayan bir API istemcisi) kontrolü başarısız kılar — bu bir özellik, hata değildir.
options.UnsafeMode = truebağlamayı tamamen devre dışı bırakır. Kontrollü senaryolar için vardır (ör. sunucu‑sunucu render); ü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() 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:
- token için bir izin mevcut,
- süresi dolmamış (izin ömrü = belgenin
TimeOut), - istek yapan ASP.NET oturum kimliği, belgeyi açan oturum kimliğiyle eşleşiyor,
- açan kimliği doğrulanmışsa, istek yapan kullanıcının
NameIdentifiertalebi de eşleşir.
Başarısızlıklar 403 döndürür — sayfa/küçük resim istekleri için PNG hata resmi, diğer durumlarda 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ı oluşturmadan önce ASP.NET Core DI aracılığıyla yapılandırın. Oturum durumu kullanılamazsa ara katman HTTP 500 ile kapalı hataya düşer: 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.";
});Temel sayfa ara katmanı, belgeyi sunmadan önce secure-{token} oturum işaretçisini doğrular. UnsafeMode = true ile, UseDoconut() erişim ara katmanını atlar ve temel işaretçi kontrolü de devre dışı bırakılır.
İptal
CloseDocument(token) sadece belleği serbest bırakmaz — aynı zamanda secure-{token} işaretçisini kaldırır ve erişim iznini iptal eder, böylece kapatılmış 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ğlayan şeydir.AddDistributedMemoryCache()(MVC ve Razor Pages uygulamaları zaten sahip) veAddSession()kaydedin ve Doconut ara katmanı dalı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 — 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?