Konfigurácia
Publikovaný config/sentinel.php dokumentuje každý kľúč a bežné nastavenia sa riadia cez env, takže ho publikujete len zriedka. Materiál kľúča predvoleného kruhu napríklad pochádza celý z prostredia:
SENTINEL_KEY_ID=default-20261002-k3f9qa
SENTINEL_ALGORITHM=hmac-sha256
SENTINEL_KEY="base64:…"
SENTINEL_PUBLIC_KEY="base64:…" # asymmetric keys; alone = verify-only
SENTINEL_PREVIOUS_KEYS="default-20250901-a1b2c3|hmac-sha256|base64:…" # verify-only, comma-separatedVšetky kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
context | '' | SENTINEL_CONTEXT | Doménový oddeľovač aplikácie viazaný do každého MAC (UTF-8, ≤ 255 bajtov). Nastavte ho raz: zmena zneplatní všetky pečate (znovu ich zapečatíte s --acknowledge) a natrvalo aj všetky skoršie záznamy denníka a kontrolné body — nový kontext znamená nový denník. |
key_type | bigint | SENTINEL_KEY_TYPE | Typ id zapečatených modelov v morph stĺpcoch: bigint, uuid alebo ulid (nastavte pred migráciou; iná hodnota migráciu zastaví výnimkou). |
actor_key_type | bigint | SENTINEL_ACTOR_KEY_TYPE | Typ id aktérov, vlastníkov kľúčov a subjektov nonce — rovnaké hodnoty aj pravidlo. |
models | [] | — | Modely, ktoré sentinel:verify bez argumentov skenuje ako prvé; každá trieda s pečaťami sa nájde po nich. |
database.connection | null | SENTINEL_DB_CONNECTION | Pripojenie tabuliek sentinel_keys, sentinel_idempotency_keys a sentinel_nonces. |
keys.default_ring | default | SENTINEL_DEFAULT_RING | Kruh pre pečate, ktoré žiadny neuvádzajú. Nikdy nie kruh, ktorý používajú podpisy HTTP správ (odmietne sa). |
keys.revoked | '' | SENTINEL_REVOKED_KEYS | Odvolané kľúče v tvare ring:kid,… — majú prednosť pred každým driverom a prežijú aj obnovený riadok kľúča. |
keys.rings.default.driver | config | SENTINEL_KEY_DRIVER | config, database, chain alebo vlastný driver. |
keys.rings.default.algorithms | všetkých šesť | — | Allowlist algoritmov kruhu. |
keys.rings.default.key_id | null | SENTINEL_KEY_ID | Driver config: id aktuálneho kľúča. |
keys.rings.default.algorithm | hmac-sha256 | SENTINEL_ALGORITHM | Driver config: algoritmus aktuálneho kľúča. |
keys.rings.default.key | null | SENTINEL_KEY | Driver config: tajomstvo alebo súkromný kľúč v tvare base64:. |
keys.rings.default.public_key | null | SENTINEL_PUBLIC_KEY | Driver config: verejný kľúč base64: (uzly len na overovanie). |
keys.rings.default.previous | '' | SENTINEL_PREVIOUS_KEYS | Driver config: kľúče len na overovanie, kid|algorithm|base64:… oddelené čiarkou. |
keys.rings.default.drivers | ['config', 'database'] | — | Poradie driverov pre chain. |
keys.rings.http.driver | database | SENTINEL_HTTP_KEY_DRIVER | Driver kruhu pre RFC 9421. |
keys.rings.http.algorithms | štyri algoritmy RFC 9421 | — | Allowlist kruhu http. |
keys.rings.http.key_id / algorithm / key / public_key / previous / drivers | ako vyššie | SENTINEL_HTTP_KEY_ID, SENTINEL_HTTP_ALGORITHM, SENTINEL_HTTP_KEY, SENTINEL_HTTP_PUBLIC_KEY, SENTINEL_HTTP_KEYS | Keď kruh http používa driver config. |
sealing.auto | true | SENTINEL_AUTO_SEAL | Pečatiť pri Eloquent zápisoch (na uzloch len na overovanie vypnite). |
sealing.on_tampered_write | refuse | SENTINEL_ON_TAMPERED_WRITE | Čo urobí Eloquent zápis s modelom, ktorý nie je neporušený: refuse, reseal alebo skip. |
sealing.allow_suspension | false | SENTINEL_ALLOW_SUSPENSION | Povoliť Sentinel::withoutSealing(). Predvolene vypnuté, kým ho výslovne nezapnete: nenastavená hodnota (chýbajúca, null alebo prázdna SENTINEL_ALLOW_SUSPENSION=) ho odmietne. |
sealing.field_tags | true | SENTINEL_FIELD_TAGS | Kľúčované značky polí, ktoré pomenujú zmenené atribúty (kľúče HMAC). |
sealing.reason_max_length | 1000 | — | Dĺžka dôvodu potvrdenia, odpečatenia a baseline (1–10000). |
sealing.transaction_attempts | 3 | — | Opakovania vlastných transakcií Sentinelu, 1–10 (nikdy nie save() aplikácie). |
verification.check_ledger | true | SENTINEL_VERIFY_LEDGER | Porovnávať pečate s denníkom (odhalí znovu podstrčené pečate). |
verification.outdated_is_intact | true | SENTINEL_OUTDATED_IS_INTACT | Zmenená definícia nad neporušenými dátami sa počíta ako neporušená. |
verification.log_channel | null | SENTINEL_LOG_CHANNEL | Kam sa logujú zistenia (null alebo prázdna hodnota = predvolený kanál; hodnota, ktorá nie je reťazcom, vyhodí výnimku). |
verification.retrieve_reaction | throw | SENTINEL_RETRIEVE_REACTION | Predvolená reakcia overenia pri načítaní: throw alebo report (obe zistenie nahlásia; throw navyše model nenačíta). |
verification.retrieve_checks_ledger | false | SENTINEL_RETRIEVE_CHECKS_LEDGER | Kontrola denníka pri načítaní (o jeden dopyt na model viac). |
acknowledgement.ability | null | SENTINEL_ACKNOWLEDGE_ABILITY | Gate ability overená pred potvrdením zmeny (null alebo prázdna hodnota = žiadna; hodnota, ktorá nie je reťazcom, vyhodí výnimku). |
ledger.enabled | true | SENTINEL_LEDGER | Zapisovať záznamy denníka (vypnutím stratíte detekciu podstrčenia a návratu). |
ledger.ring | default | SENTINEL_LEDGER_RING | Kruh, ktorého aktuálny kľúč podpisuje kontrolné body; nenakonfigurovaný kruh alebo kruh podpisov HTTP sa odmietne. |
ledger.connections | [null] | — | Pripojenia s pečaťami a denníkom; každý sken, počet a kontrola pokryje každé z nich — raz. |
ledger.batch_size | 1000 | — | Záznamov na jednu transakciu kontrolného bodu (1–100000). |
ledger.backlog_warning_seconds | 600 | — | Vek záznamov bez kontrolného bodu, od ktorého sa hlási backlog (60–86400). |
ledger.anchors | '' | SENTINEL_ANCHORS | Zoznam kotiev cache, filesystem, log alebo vlastných, oddelený čiarkou. |
ledger.anchor_drivers.cache.store | null | SENTINEL_ANCHOR_CACHE_STORE | Cache store kotvy cache (nie databáza aplikácie); null alebo prázdna hodnota = predvolený store. |
ledger.anchor_drivers.cache.key | sentinel:ledger:anchor | — | Prefix kľúča v cache; prázdna hodnota = predvolená, hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
ledger.anchor_drivers.filesystem.disk | local | SENTINEL_ANCHOR_DISK | Disk kotvy filesystem (odporúča sa object lock); prázdna hodnota = predvolený disk, hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
ledger.anchor_drivers.filesystem.path | sentinel/anchors | SENTINEL_ANCHOR_PATH | Adresár na tomto disku; prázdna hodnota = predvolený, hodnota, ktorá nie je reťazcom, vyhodí výnimku. |
ledger.anchor_drivers.log.channel | null | SENTINEL_ANCHOR_LOG_CHANNEL | Log kanál kotvy log, ktorá sa len zapisuje (null alebo prázdna hodnota = predvolený kanál; hodnota, ktorá nie je reťazcom, vyhodí výnimku). |
middleware.verified_status | 409 | — | Status sentinel.verified pri neúspešnej kontrole (400–599). |
middleware.verified_reaction | abort | SENTINEL_VERIFIED_REACTION | abort, alebo len nahlásiť a pokračovať. |
idempotency.store | database | SENTINEL_IDEMPOTENCY_STORE | database, cache alebo naviazaný vlastný store. |
idempotency.cache_store | null | SENTINEL_IDEMPOTENCY_CACHE_STORE | Cache store so zámkami pre store cache. |
idempotency.header | Idempotency-Key | — | Hlavička požiadavky. |
idempotency.replay_header | Idempotent-Replayed | — | Hlavička na prehraných odpovediach. |
idempotency.methods | ['POST', 'PATCH'] | — | Metódy, na ktoré sa middleware uplatní. |
idempotency.ttl | 86400 | SENTINEL_IDEMPOTENCY_TTL | Sekundy platnosti kľúča od jeho prvého výskytu (60–2592000). |
idempotency.lock_seconds | 60 | — | Lease rozpracovanej požiadavky (1–3600). |
idempotency.min_length / max_length | 16 / 255 | — | Povolená dĺžka kľúča. |
idempotency.accept_unquoted | true | SENTINEL_IDEMPOTENCY_ACCEPT_UNQUOTED | Prijímať kľúče bez úvodzoviek. |
idempotency.store_client_errors | true | — | Ukladať a prehrávať odpovede 4xx. |
idempotency.store_server_errors | false | — | Ukladať odpovede 5xx (predvolene sa kľúč uvoľní). |
idempotency.transactional | false | SENTINEL_IDEMPOTENCY_TRANSACTIONAL | Handler a záznam v jednej transakcii. Vyžaduje idempotency.store = database — inak sa odmietne. |
idempotency.encrypt | true | SENTINEL_IDEMPOTENCY_ENCRYPT | Šifrovať uložené odpovede. |
idempotency.max_response_bytes | 1048576 | — | Väčšie odpovede sa nedajú prehrať. |
idempotency.replayed_headers | content-type, content-language, location, etag, last-modified, cache-control | — | Uložené a prehrávané hlavičky (set-cookie nikdy). |
nonces.store | database | SENTINEL_NONCE_STORE | database, cache alebo naviazaný vlastný store. |
nonces.cache_store | null | SENTINEL_NONCE_CACHE_STORE | Cache store so zámkami. |
nonces.ttl | 900 | — | Sekundy platnosti nonce (1–2592000). |
nonces.length | 43 | — | Dĺžka nonce v znakoch base64url, 32–128 (43 ≈ 256 bitov). |
problems.type_base | null | SENTINEL_PROBLEM_TYPE_BASE | RFC 9457 type = base + #code (null: vynechá sa). |
signatures.default_profile | default | — | Profil sentinel.signed bez parametra. |
signatures.profiles.<name>.ring | http | — | Kruh, v ktorom sa hľadajú id kľúčov profilu; kruh, ktorý nie je názvom, vyhodí výnimku. |
signatures.profiles.<name>.label | null | — | Label podpisu na overenie (null: jediný, alebo ten s tagom profilu). |
signatures.profiles.<name>.tag | null | — | Povinný parameter tag. |
signatures.profiles.<name>.components | @method, @authority, @path | — | Komponenty, ktoré musia byť pokryté. |
signatures.profiles.<name>.require_query | true | — | Pokryť @query, keď má požiadavka query. |
signatures.profiles.<name>.require_content_digest | true | — | Pokryť content-digest, keď má požiadavka telo. |
signatures.profiles.<name>.require_nonce | true | — | Vyžadovať (a deduplikovať) nonce. |
signatures.profiles.<name>.max_age | 300 | — | Sekundy, počas ktorých sa podpis prijíma po created (1–86400). |
signatures.profiles.<name>.clock_skew | 30 | — | Povolený rozdiel hodín v sekundách (0–3600). |
signatures.profiles.<name>.algorithms | štyri algoritmy RFC 9421 | — | Povolené algoritmy (povinné); prázdny zoznam je chyba konfigurácie (fail closed). |
signatures.profiles.<name>.accept_signing_keys | false | — | Prijať kľúč, ktorým aplikácia sama podpisuje. Vypnuté: požiadavka podpísaná samotnou aplikáciou nikdy neprejde ako partnerova. |
signatures.outbound.ring | http | — | Kruh kľúčov pre Http::withSignature(); kruh, ktorý nie je názvom, vyhodí výnimku. |
signatures.outbound.label | sig1 | — | Label odchádzajúcich podpisov. |
signatures.outbound.components | @method, @authority, @path, @query, content-digest, content-type | — | Podpisované komponenty (chýbajúce sa vynechajú). |
signatures.outbound.digest | sha-256 | — | Algoritmus Content-Digest: sha-256 alebo sha-512. |
signatures.outbound.expires_in | null | — | Sekundy do parametra expires, 1–86400 (null alebo prázdna hodnota: žiadny). |
signatures.outbound.tag | null | — | Parameter tag. |
signatures.outbound.include_alg | false | — | Posielať parameter alg. |
signatures.advertise | true | SENTINEL_ADVERTISE_SIGNATURE | Hlavička Accept-Signature na odpovediach 401. |
schedule.enabled | true | SENTINEL_SCHEDULE | Zaregistrovať údržbové úlohy v plánovači (vypnuté: naplánujete si príkazy sami). |
schedule.checkpoint | everyMinute | SENTINEL_SCHEDULE_CHECKPOINT | sentinel:checkpoint (len so zapnutým denníkom) — okno, v ktorom návrat ostane nepovšimnutý. Prázdna hodnota sa považuje za nenastavenú → everyMinute. |
schedule.verify | daily | SENTINEL_SCHEDULE_VERIFY | sentinel:verify --allow-empty --ledger; malým tabuľkám vyhovuje hourly. |
schedule.prune | daily | SENTINEL_SCHEDULE_PRUNE | sentinel:prune. |
Frekvencie sú everyMinute, everyTwoMinutes, everyFiveMinutes, everyTenMinutes, everyFifteenMinutes, everyThirtyMinutes, hourly, everyTwoHours, everyThreeHours, everyFourHours, everySixHours, daily a weekly — alebo off na vypnutie úlohy (prázdna hodnota sa považuje za nenastavenú, takže úloha si ponechá predvolenú frekvenciu). Každá úloha beží bez prekrývania a na jednom serveri.
Názvy kruhov, profilov, kotiev a úložísk zodpovedajú [a-z][a-z0-9_-]{0,63}. Kruhy pridávate v keys.rings.<ring> (driver a algorithms sú povinné; pre kruh s driverom config vypíše sentinel:key:generate --ring=<ring> riadky SENTINEL_<RING>_* — načítajte ich v sekcii kruhu cez env()) a politiky prichádzajúcich podpisov v signatures.profiles.<name>.
Ako sa hodnoty čítajú
Každé nastavenie sa overí pri prvom použití a neplatné vyhodí InvalidSentinelConfigurationException s názvom kľúča — nikdy sa potichu nepoužije predvolená hodnota. Nenastavený kľúč — chýbajúci, null alebo prázdny ('' či len medzery, čo dá riadok SENTINEL_LEDGER= v .env) — dostane predvolenú hodnotu z tabuľky vyššie. Booleany prijímajú true/false, on/off, yes/no, 1/0 (bez ohľadu na veľkosť písmen); čokoľvek iné vyhodí výnimku, ktorej správa uvedie kľúč aj prijatú hodnotu — SENTINEL_ALLOW_SUSPENSION=disabled je chyba, nikdy nie „povolené“. Rovnako sa správa hodnota mimo rozsahu, neznámy prípad enumu, chybne zapísaný zoznam či názov, ktorý nie je reťazcom (log kanál, ability, store, disk kotvy, kruh podpisov); prázdny voliteľný názov sa považuje za nenastavený. Prázdna frekvencia schedule.* si ponechá predvolenú hodnotu — úlohu vypne len off (alebo null).
php artisan about ukáže sekciu Sentinel — kruhy, driver, prítomnosť podpisového kľúča, prepínače, kotvy, úložiská, zapečatené modely a plán, nikdy nie materiál kľúčov — a sentinel:check nahlási všetky neplatné nastavenia naraz.
Preklady
Balík obsahuje angličtinu a slovenčinu; publikujte ich tagom sentinel-translations, ak chcete texty upraviť alebo pridať jazyk:
| Kľúč | Používa |
|---|---|
sentinel::messages.tampered | Všeobecná správa pri zlyhaní sentinel.verified. |
sentinel::messages.problems.<code>.title / .detail | Odpovede problem details podľa RFC 9457 — kódy idempotency_key_missing, invalid_idempotency_key, idempotency_key_reused, idempotency_request_in_progress, idempotent_response_unavailable, nonce_rejected, signature_rejected. |
sentinel::validation.intact_seal | Pravidlo IntactSeal (:attribute). |
sentinel::statuses.<status> | Názvy stavov vo výstupe sentinel:verify, jeden pre každú hodnotu VerificationStatus. |
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.