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 (ayrıştırılmış belgeyi tutan belge motoru örneği),
  • sayfa başına durum — döndürme, çevirme ve widget içinde kullanıcının eklediği açıklama verileri,
  • isteğe bağlı arama indeksi, ilk aramada tembelce oluşturulur (veya web‑farm senaryolarında önceden oluşturulmuş .srh dosyasından yüklenir),
  • oturum filigranı DocOptions.Watermark'tan.

Ömür

Oturumlar kaydırmalı bir pencere üzerinden 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) ile atıldığında, atılma geri çağrısı belge motorunu serbest bırakır ve ilişkili belleği hemen boşaltır.

csharp
// A short-lived session for a one-shot preview
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Süresi dolmuş bir token ile yapılan istek, Belge oturumu bulunamadı. Lütfen belgeyi yeniden açın. metnini içeren bir hata resmi alır — istemcinin yeni bir token elde etmek 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 Bu Sayfayı Görüntüleme Yetkiniz Yok.
  • Oturum ara katmanı kaydedilmemiş → HTTP 500 Oturum ara katmanı yapılandırılmadı. UseSession()'ı UseDoconut()'dan önce çağırın.

Bu yüzden Quick Start, Doconut dalından önce AddSession() + app.UseSession() kullanılmasını ısrarla önerir. İki pratik sonuç:

  • İstemcinin sayfa istekleriyle ASP.NET oturum çerezini göndermesi gerekir. Çerezleri kaldıran çapraz‑origin yapılandırmaları (veya çerez deposu olmayan bir API istemcisi) kontrolü geçemez — 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 renderleme); üretimde false bı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ı global 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:

  1. token için bir izin mevcut,
  2. süresi dolmamış (izin ömrü belgenin TimeOut değerine eşittir),
  3. isteği yapan ASP.NET oturum kimliği, belgeyi açan oturum kimliğiyle eşleşiyor,
  4. eğer belgeyi açan kimliği doğrulanmışsa, isteği yapan 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, diğer durumlarda düz metin olarak. Mesaj ve token sorgu anahtarı DocumentSecurityOptions'tan gelir (TokenQueryKey, varsayılan "token"; UnauthorizedMessage, varsayılan "Bu Sayfayı Görüntüleme Yetkiniz Yok."). Bu seçenekleri uygulamayı oluşturmadan önce ASP.NET Core DI aracılığıyla yapılandırın. Oturum durumu mevcut değilse ara katman HTTP 500 ile kapanır: ASP.NET Oturumu Doconut belge güvenliği için gereklidir.

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 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 geçersiz olur.

Üretim için Kontrol Listesi

  • UnsafeMode = false (varsayılan) tutun — bu global anahtar token'ları oturumlara bağlar.
  • AddSession() kaydedin ve Doconut ara katman dalından önce app.UseSession() çağırın.
  • Oturum çerez 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 — hem bellek hem de güvenlik fayda sağlar.
  • Token'ları asla kaydetmeyin veya paylaşmayın; onları kısa ömürlü kimlik bilgileri gibi ele alın.

Bu sayfa yardımcı oldu mu?