İçeriğe geç
getnextpdf.com

Enterprise sürüm

Licensing — Derinlemesine başvuru

Bu sayfa, NextPDF Enterprise lisanslama yüzeyi için derinlemesine başvurudur — diğer her Enterprise yeteneğini çözümleyen modül. Hak durumu modelini (EntitlementEvaluator, EntitlementStatus, EntitlementResult), zorlanan yetenek kapılamasını (FeatureGate, CapabilityCode, CapabilityRegistry), iki zamanlayıcılı kanal zorlama makinesini (ChannelEnforcementPolicy, OnlineCheckScheduler) ve imzalı çevrimiçi istemciyi (LicenseClient) kapsar. Sıradan hak değerlendirmesi hiçbir ağa ihtiyaç duymaz. Çevrimiçi istemci; açık etkinleştirme, sinyal, devre dışı bırakma, çevrimiçi doğrulama ve yenileme yoklaması işlemleri için vardır. İç mekanizma ayrıntısı, kaynak deposunun iç belgelerinde kalır ve bu kılavuzun kapsamı dışındadır.

Bu yetenek NextPDF Enterprise (nextpdf/enterprise) ile sunulur ve bir Enterprise katmanı lisans zarfıyla etkinleşir. Bu hakka sahip olmayan bir dağıtım, yeteneğin sınıflarını yüklemez. Sürümleri karşılaştırın ve bir lisans edinin.

Lisanslama, temel bir Enterprise yüzeyidir. Enterprise paketi Core paketinin yanına kurulduğunda her zaman mevcuttur, çünkü diğer her şeyi çözümleyen yüzeydir. NextPDF Pro’nun ayrı bir hak yüzeyi yoktur; durum modeli, zorlama makinesi ve çevrimiçi istemci yalnızca nextpdf/enterprise içinde sunulur. NextPDF Core (Apache-2.0) hiçbir hak modeline sahip değildir — lisanssız Apache-2.0 davranışına ihtiyaç duyan bir ana makine, Enterprise işlem hattı yerine Core motorunu doğrudan kullanır.

Tüm türler NextPDF\Enterprise\Licensing altında yer alır. Zorlama makinesi Channel alt ad alanında, çalışma zamanı bileşimi Runtime içinde ve imzalı durum türleri Online içinde bulunur.

SimgeParametrelerVarsayılan davranışDöndürürFırlatır veya şununla başarısız olurNotlar
EntitlementEvaluator::evaluate()?LicenseKey $license, ?DateTimeImmutable $now = nullDoğrulanmış bir lisansı (veya null’u) tam hak kararına eşlerEntitlementResultYokNull bir lisans, kapalı arızalayan lisanssız sonucu verir
EntitlementEvaluator::evaluateEnforced()?LicenseKey $license, EnforcementOutcome $outcomeÖnceden hesaplanmış bir zorlama sonucunu bir hak sonucuna dönüştürürEntitlementResultYokEtkin sürüm sonuçtan gelir; her zorlama düşürmesi Core’a iner
EntitlementEvaluator::resolveBrandingMode(), ::resolveBrandingStrategy()?LicenseKey $license, ?DateTimeImmutable $now = nullOluşturulan çıktı için markalama kararını çözümlerBrandingMode / BrandingStrategyYokTek markalama yetkisi; yalnızca değerlendirme kanalı filigran uygular
EntitlementResultSalt okunur değer nesnesiDurumu, sürümü, kanalı, markalama modunu, çalışma zamanı/güncelleme/destek bayraklarını ve isteğe bağlı bir uyarıyı taşırYokYardımcılar: isFullyActive(), isExpired(), isDowngradedToCore(), shouldApplyEvaluationBranding()
EntitlementStatusDize destekli enumActive, GracePeriod, DowngradedToCore, EvaluationExpired, NoLicenseYokPerpetualFallback korunur ancak kullanımdan kaldırılmıştır; yalnızca 6.0 öncesi tüketicilerin hâlâ derlenmesi için tutulur
FeatureGate::hasCapability()CapabilityCode $capabilityYeteneği, zorlanan etkin sürüme ve paket durumuna karşı denetlerboolYokHerhangi bir çözümleyici hatasında core’a kapalı arızalar
FeatureGate::requireCapability()CapabilityCode $capabilitySessizce geçer veya yapılandırılmış üst satış bağlamıyla fırlatırvoidSpectrumAuthenticationException SPEC-LIC-001 (lisanslı değil) veya SPEC-LIC-002 (paket süresi doldu)Bağlam required_capability, required_pack, current_packs, upgrade_info_url taşır
FeatureGate::isFeatureEnabled(), ::requireFeature()string $featureEski özellik tanımlayıcı denetimibool / voidSpectrumAuthenticationException SPEC-AUTH-007 (require yolu)Eski uyumluluk; yetenek denetimlerini tercih edin
FeatureGate erişimcileriYokLisans iç gözlemiDeğişirYokcurrentEdition(), isLicenseValid(), isInGracePeriod(), getActivePacks(), trialPolicy()
CapabilityCodeDize destekli enumKanonik yetenek tanımlayıcıları (core.*, pro.*, enterprise.*, pack.*)YokisPack(), packName(), minimumEdition(), forEdition()
CapabilityRegistryLicenseKey, yol desenleriSevkten önce yoldan yeteneğe çözümleme ve paket aramasıDeğişirYokregisterDefaultRoutes() belgelenen hizmet yollarını kapsar
LicenseKeySalt okunur değer nesnesiAyrıştırılmış, doğrulanmış lisans talepleriYokisExpired(), isInGracePeriod(), isFullyExpired(), hasFeature(), hasCapability(), activePackNames(); maxSlots yalnızca sözleşmeseldir
LicenseValidator::buildVerifiedLicenseKey()array $dataZaten doğrulanmış bir yükten türü belirtilmiş bir LicenseKey oluştururLicenseKeyŞema ihlalinde SpectrumAuthenticationException SPEC-AUTH-001Şema 2.0, 1.0 ve eski yükleri destekler
PackDefinition / PackRegistrySalt okunur değer nesneleriBağımsız süre sonu ve ek süreye sahip eklenti paketi durumuDeğişirYokisActive(), isFullyExpired(), activePacks(), activeCapabilities()
TrialPolicybool $enabled, int $maxPagesPerSecond = 2, filigran alanlarıDeneme verim tavanı politikasıYokfromLicenseKey(), disabled(), isThrottled(); markalama yetkisi değerlendiricide kalır
ChannelEnforcementPolicy::enforce()LicenseKey $license, LocalState $state, int $systemNow, bool $revoked = falseİki zamanlayıcılı makineyi artı iptal ve deneme yeniden etiketlemeyi çalıştırırEnforcementOutcomeYokİptal, her zamanlayıcıyı ve deneme durumunu geçersiz kılar
OnlineCheckScheduler::evaluate(), ::recordSuccessfulOnlineCheck()Lisans, yerel durum, zaman damgalarıİki zamanlayıcılı değerlendirme; doğrulanmış sunucu zamanından kira yenilemeEnforcementOutcome / LocalStateYokONLINE_GRACE_SECONDS, kira sonrası 48 saatlik canlılık ek süresi verir
EnforcementDecision / EnforcementReason / EnforcementOutcomeEnumlar + salt okunur değer nesnesiActive, Grace, DowngradedToCore artı kesin nedenYokHer neden, belirlenimci olarak bir karara eşlenir
Runtime\EntitlementResolver::currentEntitlement()YokArabirim: çalışma zamanının sunduğu zorlanan hakEntitlementResultUygulamaya bağlıEnforcedEntitlementResolver; önbelleği, durumu, politikayı ve değerlendiriciyi birleştirir, Core’a kapalı arızalar
LicenseStateCache::get(), ::getOrThrow()bool $forceRefresh = falseKapıyı destekleyen doğrulanmış lisans önbelleği?LicenseKeygetOrThrow(): SpectrumAuthenticationException SPEC-AUTH-008; geçersiz bağlantıda LicenseConfigurationExceptioninvalidate(), isCacheValid()
LicenseClient::activate(), ::heartbeat(), ::deactivate(), ::verifyOnline()string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = nullBir imzalı durum alışverişi; yanıt, sabitlenmiş köke karşı doğrulanır ve gönderilen nonce’a bağlanırStatusResponseLicenseClientException (taşıma, 200 olmayan, hatalı sağlanan nonce); SpectrumAuthenticationException (sahte, kurcalanmış, eski, yanlış nonce, yanlış lisans, yanlış tür yanıt)Yalnızca tuzlanmış parmak izi karması gönderilir, asla ham parmak izi gönderilmez
LicenseClient::checkRenewal()string $licenseId, string $customerIdYenileme kullanılabilirliği yoklaması; 404, normal “mevcut yok” yanıtıdırYenileme dizisi (available, download_url, expires_at)LicenseClientException (erişilemez, 200/404 olmayan veya politikaca reddedilen bir download_url)İmzasız gövdenin URL’si, kaçamadan önce SSRF taramasından geçirilir
LicenseClient::__construct()İmza bloğuna bakınYapımda taşımayı, URL şemasını ve sabitleme kümesini doğrularLicenseConfigurationException (politika zorlamayan taşıma, izin verilmeyen şema, sabitleme olmadan düz HTTP, hatalı biçimli sabitleme kümesi)getPinSet(), döndürme araçları için etkin sabitleme kümesini açığa çıkarır
Online\StatusResponseSalt okunur değer nesnesiDoğrulanmış imzalı durumYokisLive(), revoked / expired / released durumlarında false olur; leaseExpiresAt, koltuk sayıları ve bir hak anlık görüntüsü taşır
LicenseChannelMode / OnlineMode / OnlinePolicyEnumlar + salt okunur değer nesnesiKanal ve çevrimiçi politika talepleriYoksigned_source’a karşı ioncube; intervalDays ve leaseDays ile çevrimiçi mod required / optional / disabled
LicenseEditionDize destekli enumCore, Pro, EnterpriseYoksatisfies(), katman hiyerarşisini uygular
public function __construct(private ?EvaluationBrandingConfig $evaluationBrandingConfig = null)
public function evaluate(?LicenseKey $license, ?DateTimeImmutable $now = null): EntitlementResult
public function evaluateEnforced(?LicenseKey $license, EnforcementOutcome $outcome): EntitlementResult
public function resolveBrandingMode(?LicenseKey $license, ?DateTimeImmutable $now = null): BrandingMode
public function resolveBrandingStrategy(?LicenseKey $license, ?DateTimeImmutable $now = null): BrandingStrategy
public function __construct(private readonly LicenseStateCache $licenseCache, private readonly EntitlementResolver $entitlementResolver, private readonly string $upgradeInfoUrl = self::DEFAULT_UPGRADE_URL)
public function isFeatureEnabled(string $feature): bool
public function requireFeature(string $feature): void
public function currentEdition(): ?string
public function isLicenseValid(): bool
public function isInGracePeriod(): bool
public function hasCapability(CapabilityCode $capability): bool
public function requireCapability(CapabilityCode $capability): void
public function getActivePacks(): array
public function trialPolicy(): TrialPolicy
public function __construct(private readonly ClientInterface $httpClient, private readonly RequestFactoryInterface $requestFactory, private readonly StreamFactoryInterface $streamFactory, private readonly StatusX5cValidator $statusValidator, private readonly string $baseUrl = self::DEFAULT_BASE_URL, #[SensitiveParameter] private readonly ?string $apiKey = null, array $pinnedPublicKeys = [], array $backupPins = [], private readonly OutboundHttpPolicy $policy = new OutboundHttpPolicy(allowedSchemes: ['https'], connectTimeoutSeconds: 10, readTimeoutSeconds: 30, maxResponseBytes: 10_485_760, followRedirects: false, allowPrivateTargets: false, retryAttempts: 0, retryBaseBackoffMs: 250))
public function activate(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponse
public function heartbeat(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponse
public function deactivate(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponse
public function verifyOnline(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponse
public function getPinSet(): ?PinSet
public function checkRenewal(string $licenseId, string $customerId): array

Hak değerlendirmesi, her biri sabit bir çalışma zamanı sonucu olan beş güncel durumdan birini üretir:

DurumÇalışma zamanıEtkin yeteneklerGüncellemeler / destekMarkalama
Activeizinlihak edilen sürüm + etkin paketlerevet (ücretli); hayır (değerlendirme)yok (ücretli); filigran (değerlendirme)
GracePeriodizinlihak edilen sürüm + etkin paketlerevetyok (ücretli)
DowngradedToCoreizinliyalnızca Corehayıryok (ücretli); filigran (deneme)
EvaluationExpiredkısıtlıyokhayırfiligran
NoLicensedevre dışı (kapalı arızalama)yokhayırfiligran
  • Ücretli süre sonu, kurulu çalışma zamanını asla devre dışı bırakmaz. runtimeAllowed, her ücretli durum için true kalır. Ek süre penceresinden sonra etkin sürüm Core’a düşer: Core yetenekleri süresiz olarak çalışmayı sürdürür, tüm Pro/Enterprise/paket yetenekleri kapanır ve güncellemeler ile destek geri çekilir. Kullanımdan kaldırılan EntitlementStatus::PerpetualFallback durumu, 6.0 öncesi süre sonu politikasını adlandırır ve yalnızca derleme uyumluluğu için vardır.
  • Her durum Core yürütmesiyle bitmez. Ek süre, tarihli bir yenileme uyarısıyla tam hak edilen sürümü korur. Değerlendirme süre sonu, çalışma zamanını kısıtlar ve filigranı korur. Lisanssız durum, Enterprise yollarını kapalı arızalayarak devre dışı bırakır ve herhangi bir eski çıktıyı görünür biçimde filigranlar; böylece asla ücretli yürütme gibi geçemez.
  • Sabit çözümleme sırası. Süresi tamamen dolmuş bir lisans hiçbir yeteneği çözümlemez. Paket yetenekleri, paketin kendi etkin durumuna ve bağımsız süre sonuna ertelenir. Sürüm yetenekleri, kesin hiyerarşi Enterprise ⊇ Pro ⊇ Core üzerinde zorlanan etkin sürüme karşı çözümlenir. Kapılamada ham LicenseKey::$edition asla başvurulmaz.
  • İki zamanlayıcı; en kısıtlayıcı olanı kazanır. Hak zamanlayıcısı (her iki kanal) Active, Grace ve ek süre sonrası Core düşürmesini yönetir. Çevrimiçi canlılık zamanlayıcısı yalnızca çevrimiçi modu required olan ioncube kanalına uygulanır: kira, artı 48 saatlik canlılık ek süresi, canlı olmalıdır. Kira sonrası çevrimdışı iken premium, Core katmanında duraklar; daha sonraki doğrulanmış bir çevrimiçi denetim kirayı yeniden kurar ve premium devam eder. signed_source kanalının — ve required olmayan herhangi bir çevrimiçi modun — canlılık zamanlayıcısı yoktur ve çevrimdışı ve hava boşluğu yeteneğini korur.
  • Geri alma karşıtı, belirlenimcidir. Zorlama, monoton bir tabana karşı değerlendirir: etkin zaman, sistem saati ile son doğrulanmış zamanın en büyüğüdür; böylece geriye dönük bir saat değişikliği ek süre tanımaz. Sapma toleransını ve kalan ek süreyi aşan bir geri alma, Core düşürmesini zorlar.
  • Kiralar yalnızca güvenilir zamanda ilerler. Başarılı bir çevrimiçi denetim, yerel saati değil, doğrulanmış, imzalı sunucu zamanını kaydeder; böylece yerel bir ileri saat sıçraması kirayı şişiremez.
  • Markalamanın tek yetkisi vardır. Yalnızca değerlendirme kanalı filigranı tetikler. Ücretli bir lisans, düşürülmüş olanlar dâhil her durumda hiçbir markalamaya çözümlenmez.
  • Deneme, aynı zamanlayıcılar üzerinde bir politika katmanıdır. Verim sınırlanır (varsayılan saniyede 2 sayfa), değerlendirme filigranı uygulanır ve süre sonu ek süre olmadan kesindir. Yalnızca raporlanan neden değişir; karar ve etkin sürüm ücretli makineyi izler.
  • Çevrimiçi sözleşme uçtan uca imzalanır. Her istek bir CSPRNG istemci nonce’ı taşır. Her yanıt, application/nextpdf-status+jwt medya türünde kompakt bir EdDSA JWS’idir; derlemeye gömülü sabitlenmiş bir köke bir x5c zinciri üzerinden doğrulanır ve gönderilen nonce’a, kurulu lisans kimliğine ve çağrılan uç noktaya bağlanır. Eski imzasız zarf taşıması emekliye ayrılmıştır; tam olarak bir güven yolu kalır. Yapılandırılmış SPKI sabitlemeleri X-NextPDF-Pinned-Public-Key başlığı olarak taşınır ve bir sabitleme kümesi bir yedek sabitleme içermelidir.
  • Çalışma zamanı koltuk zorlaması yok. maxSlots yalnızca sözleşmeseldir — sıradan işlem için telemetri ve zorunlu eve telefon yok.
  • Süresi tamamen dolmuş bir lisanstaki bir yetenek denetimi, herhangi bir paket veya sürüm mantığı çalışmadan önce “unavailable” durumuna kısa devre yapar.
  • Bir eklenti paketinin süresi, temel lisans etkinken dolabilir. Ret bu durumda lisanslı değil (SPEC-LIC-001) değil, paket süresi doldu (SPEC-LIC-002) olarak okunur ve o an etkin paketleri listeler.
  • Mevcut ancak okunamayan veya ayrıştırılamayan yerel bir zorlama durumu dosyası bir kurcalama sinyalidir. Makine, EnforcementReason::CorruptState ile Core düşürmesine kapalı arızalar. Meşru biçimde bulunmayan bir dosya bozuk değildir ve normal biçimde ilerler.
  • Monoton tabanın altında, sapma toleransını (varsayılan 120 saniye) ve kalan ek süreyi aşan bir saat geri alması, Core düşürmesini belirlenimci olarak zorlar.
  • Süresi geçmiş bir canlılık kirası, aksi hâlde Active olan bir ioncube lisansını düşürür; hak süre sonu, kira durumundan bağımsız olarak düşürür.
  • evaluate(null) kapalı arızalar: çalışma zamanına izin verilmez, filigran uygulanır ve uyarı fiyatlandırma URL’sini adlandırır. Lisanssız Core davranışına ihtiyaç duyan ana makineler, Core motorunu doğrudan oluşturmalıdır.
  • Süresi dolmuş bir değerlendirme lisansının ek süresi ve geri dönüşü yoktur; çalışma zamanı kısıtlanır ve filigran kalır.
  • checkRenewal(), HTTP 404’ü normal “mevcut yok” yanıtı olarak ele alır. 200 olmayan herhangi başka bir yanıt LicenseClientException fırlatır ve giden politikayı ihlal eden bir download_url, yöntemden kaçamadan önce kapalı arızalar.
  • Sahte, kurcalanmış, eski, yanlış nonce veya yanlış lisans içeren bir durum yanıtı asla bir StatusResponse vermez; doğrulama SpectrumAuthenticationException fırlatır. İmzalı ancak revoked, expired veya released olan bir durum doğrulanır ve bir düşürme sinyali olarak ortaya çıkar (isLive() false olur).
  • Farklı bir alışveriş için üretilmiş bir durum yanıtı reddedilir: doğrulanmış response_type, çağrılan uç noktayla eşleşmelidir.
  • FeatureGate, herhangi bir çözümleyici hatasında kapalı arızalar: etkin sürüm core’a düşer ve hiçbir premium yetenek verilmez.
  • EnforcedEntitlementResolver uçtan uca kapalı arızalar: zincirindeki herhangi bir istisna, lisanssız (Core) sonucu ve bir PSR-3 hata günlüğü verir, asla bir premium hak vermez.

Lisanslama katmanı kendi başına hiçbir kriptografik politika eklemez. Lisans ve durum imzaları, ana makine kripto sağlayıcısı tarafından gerçekleştirilen Ed25519 doğrulamalarıdır. FIPS kısıtlı bir derlemede, sağlayıcının onaylamadığı bir algoritma, kriptografik sınırda açık bir hatayla başarısız olur; hiçbir şey sessizce düşürülmez. Bunlar NextPDF kodu hakkında yetenek talepleridir: NextPDF doğrulanmış bir kriptografik modül değildir, hiçbir sertifikasyona sahip değildir ve hiçbir sertifikasyon vermez.

TalepStandartMadde
Lisans dosyaları ve durum yanıtları, kompakt serileştirme JWS’idir, kapalı arızalayarak doğrulanır.RFC 7515§3.1
Lisans ve durum imzaları Ed25519’dur.RFC 8032§5.1
İmzalı bir yanıttaki x5c zinciri, derlemeye gömülü sabitlenmiş bir güven köküne kadar doğrulanır.RFC 5280§6.1
Yapılandırılmış bir SPKI sabitleme kümesi, henüz dağıtılmamış bir anahtar için bir yedek sabitleme içermelidir.RFC 7469§4.3
Doğrulanmış talepler (iss, aud, exp, nbf, iat) kayıtlı talep adlarıdır.RFC 7519§4.1

Tüm maddeler başka sözcüklerle ifade edilmiştir; hiçbir normatif metin yeniden üretilmemiştir. NextPDF hiçbir sertifikasyon talebinde bulunmaz. Destek uygunluğa eşit değildir ve uygunluk sertifikasyona eşit değildir. Modül, davranışını bir yetenek olarak alıntılanan maddelerle hizalar; bir lisans veya durum zarfının kabulü, harici bir otoritece değil, NextPDF’in kendi sabitlenmiş kök doğrulayıcısınca kararlaştırılır.

  • LicenseClient’i politika zorlayan bir taşımayla (kanonik olarak SecurityAwareHttpClient) oluşturun. Ham bir PSR-18 istemcisi yapımda reddedilir; böylece lisans trafiği asla SSRF karşıtı, yönlendirme yok, bayt sınırı ve zaman aşımı denetimleri olmadan gönderilemez.
  • Çağıranın sağladığı bir istemci nonce’ı, en az 16 baytlık entropiye çözülmelidir. Kaynak bu sınırı RFC 8555 §6.5’e dayandırır; o madde alıntılanan derlemin dışındadır, bu nedenle sınır burada yalnızca ürün kaynağından belirtilir.
  • Özellikleri FeatureGate üzerinden kapılayın; asla ham LicenseKey::$edition üzerinde dallanmayın. Kapı yalnızca zorlanan etkin sürüme başvurur ve core’a kapalı arızalar.
  • Yeni kodda kullanımdan kaldırılan EntitlementStatus::PerpetualFallback üzerinde switch yapmayın. Bunun yerine isDowngradedToCore() denetleyin veya DowngradedToCore eşleyin.
  • Bir yetenek reddini bir düzeltme yükü olarak değerlendirin. Genel bir hataya indirgemek yerine yapılandırılmış bağlamını ve yükseltme URL’sini çağırana iletin.
  • Bu modül kriptografik işlevsellikle ilgilidir; kendi incelemenizde güvenlik açısından hassas olarak değerlendirin. Kapasite ve koltuk koşulları, çalışma zamanı zorlamasıyla değil, lisans sözleşmesiyle yönetilir. Bu başvuru bir hukuki görüş değildir; kendi uyumluluk ve hukuk danışmanlarınıza başvurun.

Bu sayfa yalnızca dışarıdan gözlemlenebilen davranışı ve desteklenen genel API yüzeyini belgeler. İç ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, runbook dosya adları ve bilet önekleri kapsam dışıdır.