---
title: "Konfigurácia — Passkeys for Laravel | Roundly"
description: "Každý konfiguračný kľúč s env premennou a predvolenou hodnotou — relying party, originy, algoritmy, challenge, atestácia a používateľ."
url: https://roundly-consulting.com/sk/open-source/navody/passkeys-for-laravel/konfiguracia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Passkeys for Laravel](https://roundly-consulting.com/sk/open-source/navody/passkeys-for-laravel.md)

# Konfigurácia

config/passkeys.php popisuje každú možnosť. Pri štarte aplikácie sa načíta do typovaného objektu PasskeyConfig a zvaliduje, takže chybná konfigurácia zlyhá hneď vtedy, nie až pri prvej registrácii. Bezpečnostne kritické sú rp.id a origins — nedajú sa bezpečne predvoliť a bez nich sa ceremónia nespustí. Publikovaný súbor bez blokových komentárov:

```php
use RoundlyConsulting\Crypto\Cose\CoseAlgorithm;
use RoundlyConsulting\Passkeys\Enums\AttestationConveyance;
use RoundlyConsulting\Passkeys\Enums\AttestationTrust;
use RoundlyConsulting\Passkeys\Enums\ResidentKey;
use RoundlyConsulting\Passkeys\Enums\SignCountPolicy;
use RoundlyConsulting\Passkeys\Enums\UserVerification;
use RoundlyConsulting\Passkeys\Models\Passkey;

return [
    'rp' => [
        'id' => env('PASSKEYS_RP_ID'),
        'name' => env('PASSKEYS_RP_NAME', env('APP_NAME', 'Laravel')),
    ],

    'origins' => array_values(array_filter(
        array_map('trim', explode(',', (string) env('PASSKEYS_ORIGINS', ''))),
    )),
    'allow_cross_origin' => env('PASSKEYS_ALLOW_CROSS_ORIGIN', false),

    'algorithms' => [
        CoseAlgorithm::ES256->value,   // -7
        CoseAlgorithm::RS256->value,   // -257
        // CoseAlgorithm::EdDSA->value, // -8 (requires ext-sodium)
    ],

    'timeout_ms' => env('PASSKEYS_TIMEOUT_MS', 60_000),
    'attestation' => env('PASSKEYS_ATTESTATION', AttestationConveyance::None->value),
    'user_verification' => UserVerification::Required->value,
    'resident_key' => env('PASSKEYS_RESIDENT_KEY', ResidentKey::Required->value),

    'challenge' => [
        'store' => env('PASSKEYS_CHALLENGE_STORE'),
        'ttl' => env('PASSKEYS_CHALLENGE_TTL', 60),
        'bytes' => 32,
    ],

    'sign_count_policy' => SignCountPolicy::Flag->value,

    'attestation_trust' => env('PASSKEYS_ATTESTATION_TRUST', AttestationTrust::Ignore->value),
    'reject_unknown_fmt' => env('PASSKEYS_REJECT_UNKNOWN_FMT', false),
    'attestation_anchors' => [
        'defaults' => env('PASSKEYS_ATTESTATION_DEFAULT_ANCHORS', true),
        'paths' => [
            // 'packed' => [storage_path('webauthn/vendor-fido-ca.pem')],
        ],
    ],
    'attestation_clock_skew' => env('PASSKEYS_ATTESTATION_CLOCK_SKEW', 60),
    'aaguids' => [
        'allowed' => array_values(array_filter(
            array_map('trim', explode(',', (string) env('PASSKEYS_AAGUIDS_ALLOWED', ''))),
        )),
    ],

    'user' => [
        'handle_column' => env('PASSKEYS_USER_HANDLE_COLUMN', 'passkey_user_handle'),
        'handle_bytes' => 32,
        'name_attribute' => 'email',
        'display_name_attribute' => 'name',
    ],

    'model' => Passkey::class,
    'table' => 'passkeys',
    'key_type' => env('PASSKEYS_KEY_TYPE', 'bigint'),
];
```

## Všetky kľúče

| Kľúč | Env | Predvolené | Účel |
| --- | --- | --- | --- |
| `rp.id` | `PASSKEYS_RP_ID` | host z app.url | ID relying party — registrovateľná doménová prípona každého originu (napr. example.com). |
| `rp.name` | `PASSKEYS_RP_NAME` | APP\_NAME | Čitateľný názov RP, ktorý zobrazí autentifikátor. |
| `origins` | `PASSKEYS_ORIGINS` | \[\] | Allowlist presných hodnôt clientData.origin oddelených čiarkou (medzery okolo položiek sa orežú); aspoň jedna je povinná. |
| `allow_cross_origin` | `PASSKEYS_ALLOW_CROSS_ORIGIN` | false | Akceptovať cross-origin ceremóniu (iframe). |
| `algorithms` | — | ES256, RS256 | Ponúkané a akceptované COSE algoritmy v poradí preferencie. |
| `timeout_ms` | `PASSKEYS_TIMEOUT_MS` | 60000 | Časový limit ceremónie posielaný prehliadaču, aspoň 1. |
| `attestation` | `PASSKEYS_ATTESTATION` | none | Preferencia atestácie: none, indirect alebo direct. |
| `user_verification` | — | required | Požiadavka na overenie používateľa: required, preferred alebo discouraged. |
| `resident_key` | `PASSKEYS_RESIDENT_KEY` | required | Politika objaviteľných kľúčov; required zachová prihlásenie bez mena. |
| `challenge.store` | `PASSKEYS_CHALLENGE_STORE` | predvolený store | Názov cache store-u pre challenge. |
| `challenge.ttl` | `PASSKEYS_CHALLENGE_TTL` | 60 | Minimálna platnosť challenge v sekundách, aspoň 1; challenge vždy platí aspoň tak dlho ako časový limit jej ceremónie. |
| `challenge.bytes` | — | 32 | Dĺžka náhodnej challenge v bajtoch, aspoň 16. |
| `sign_count_policy` | — | flag | Pokles počítadla: reject vyhodí výnimku, flag spustí udalosť a pokračuje. |
| `attestation_trust` | `PASSKEYS_ATTESTATION_TRUST` | ignore | Rebríček dôvery atestácie: ignore, self alebo basic. |
| `reject_unknown_fmt` | `PASSKEYS_REJECT_UNKNOWN_FMT` | false | Pri ignore odmietne formáty, ktoré balík nevie overiť, a vyhlásenia, ktoré neprejdú overením. |
| `attestation_anchors.defaults` | `PASSKEYS_ATTESTATION_DEFAULT_ANCHORS` | true | Dôverovať pribaleným koreňom Apple WebAuthn a Google hardware attestation. |
| `attestation_anchors.paths` | — | \[\] | format => \[absolútne cesty k PEM\] — vaše vlastné kotvy dôvery. |
| `attestation_clock_skew` | `PASSKEYS_ATTESTATION_CLOCK_SKEW` | 60 | Tolerancia v sekundách (0–3600) na oboch hraniciach platnosti certifikátu. |
| `aaguids.allowed` | `PASSKEYS_AAGUIDS_ALLOWED` | \[\] | Allowlist AAGUID oddelených čiarkou (medzery okolo položiek sa orežú); prázdny povolí každý model autentifikátora. |
| `user.handle_column` | `PASSKEYS_USER_HANDLE_COLUMN` | passkey\_user\_handle | Stĺpec v hostiteľskej tabuľke s nepriehľadným identifikátorom používateľa. |
| `user.handle_bytes` | — | 32 | Počet náhodných bajtov generovaného identifikátora, 16–64. |
| `user.name_attribute` | — | email | Atribút modelu použitý ako názov účtu. |
| `user.display_name_attribute` | — | name | Atribút modelu použitý ako zobrazované meno. |
| `model` | — | Passkey::class | Model kľúča; nasmerujte ho na podtriedu Passkey, ak chcete pridať správanie. Čokoľvek iné vyhodí InvalidConfigurationException. |
| `table` | — | passkeys | Tabuľka kľúčov — nastavte ju pred migráciou (migrácia ju číta). |
| `key_type` | `PASSKEYS_KEY_TYPE` | bigint | Typ kľúča vlastníka v morph stĺpci: bigint, uuid alebo ulid (na veľkosti písmen nezáleží; nenastavená alebo prázdna hodnota znamená bigint, čokoľvek iné vyhodí InvalidConfigurationException) — nastavte pred migráciou. |

## Prostredie (env)

Bežné nastavenia idú cez env, takže väčšina aplikácií konfiguráciu vôbec nepublikuje:

```bash
PASSKEYS_RP_ID=example.com
PASSKEYS_RP_NAME="Example"
PASSKEYS_ORIGINS=https://example.com,https://www.example.com
PASSKEYS_TIMEOUT_MS=60000
PASSKEYS_CHALLENGE_TTL=60
PASSKEYS_ATTESTATION=none
PASSKEYS_ATTESTATION_TRUST=ignore
```

## Prepínače áno/nie

Tri prepínače — allow\_cross\_origin, reject\_unknown\_fmt a attestation\_anchors.defaults — prijímajú bežné zápisy v env: true/false, 1/0, on/off a yes/no. Nenastavená hodnota — chýbajúca, null alebo prázdna ('', čo dáva KEY= v .env) — znamená predvolenú hodnotu z tabuľky; čokoľvek iné (preklep ako disabled) vyhodí InvalidConfiguration s názvom kľúča, namiesto toho, aby sa potichu prečítalo ako predvolená hodnota:

```bash
PASSKEYS_ALLOW_CROSS_ORIGIN=off
PASSKEYS_REJECT_UNKNOWN_FMT=yes
PASSKEYS_ATTESTATION_DEFAULT_ANCHORS=0
```

## Striktné hodnoty

Rovnako striktné sú aj všetky ostatné kľúče. Nenastavená hodnota (chýbajúca, null alebo prázdna) znamená predvolenú; prítomná hodnota nesprávneho tvaru vyhodí InvalidConfiguration s názvom kľúča:

- Celé čísla — timeout\_ms ≥ 1, challenge.ttl ≥ 1, challenge.bytes ≥ 16, user.handle\_bytes 16–64, attestation\_clock\_skew 0–3600 — prijímajú int alebo kanonický celočíselný reťazec, takže „five“, „1.5“ či „1e3“ vyhodí výnimku, namiesto toho, aby sa zmenilo na 0 alebo orezalo do rozsahu.
- Enum kľúče — attestation, attestation\_trust, user\_verification, resident\_key a sign\_count\_policy — prijímajú prípad enumu alebo jeho presnú hodnotu; preklep vyhodí výnimku a nikdy sa neprečíta ako predvolená hodnota.
- origins, aaguids.allowed, algorithms a attestation\_anchors.paths musia byť zoznamy platných položiek; hodnota, ktorá nie je zoznamom, či chybná položka vyhodí výnimku, namiesto toho, aby sa vynechala. Prázdny zoznam algorithms vyhodí výnimku tiež — pre predvolené hodnoty kľúč nenastavujte alebo ho nechajte prázdny. Položky origins, aaguids.allowed a attestation\_anchors.paths sa orežú od medzier, takže „https://a.test, https://b.test“ v env zodpovedá obom originom.
- Reťazcové kľúče — rp.name, stĺpec a atribúty v user.\* a table — musia byť reťazce a prázdny sa považuje za nenastavený, takže platí jeho predvolená hodnota (rp.name → APP\_NAME); rp.id a challenge.store musia byť reťazcami, ak sú nastavené (prázdna hodnota znamená nenastavené, takže rp.id sa odvodí z app.url a challenge použijú predvolený store).

## Včasná validácia

- Ceremónia bez rp.id alebo bez originov vyhodí InvalidConfiguration (missingRpId / emptyOrigins).
- S predvolenou konfiguráciou aplikácia vždy naštartuje — na ceremóniu čakajú len rp.id a origins. Nasledujúce kontroly prebehnú pri štarte aplikácie.
- COSE algoritmus mimo ES256, RS256 a EdDSA vyhodí InvalidConfiguration už pri štarte.
- attestation\_trust prísnejší ako ignore pri attestation none zlyhá pri štarte — inak by sa každá registrácia odmietla z dôvodu, ktorý nikto nevidí.
- attestation\_clock\_skew mimo 0–3600 zlyhá pri štarte; nečitateľná cesta ku kotve dôvery alebo súbor bez PEM vyhodí výnimku pri prvom použití.
- challenge.bytes pod 16 alebo user.handle\_bytes mimo 16–64 vyhodí InvalidConfiguration pri štarte, namiesto toho, aby sa hodnota orezala.

## Kontrola nastavenia

Balík pridáva vlastnú sekciu do php artisan about. Ukáže bezpečnostné nastavenie — stupeň dôvery, preferenciu atestácie, požiadavky na overenie, počty, TTL a prítomnosť hodnôt (SET/MISSING) — no nikdy samotné RP ID, originy, cesty ku kotvám ani AAGUID:

```bash
php artisan about
```

## 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 kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/passkeys-for-laravel.md)
