---
title: "GitHub App a OAuth tokeny — Git for Laravel | Roundly"
description: "Samoobnovujúce sa inštalačné tokeny GitHub App a OAuth prístupové tokeny — vydávané, kešované a obnovované automaticky, s eventom pri rotácii."
url: https://roundly-consulting.com/sk/open-source/navody/git-for-laravel/github-app-a-oauth
language: sk
---

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

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

# GitHub App a OAuth tokeny

Statické tokeny Token nikdy neexpirujú, inštalačné tokeny GitHub App a OAuth prístupové tokeny áno. GithubAppToken a OauthToken prístupový token transparentne vydajú, kešujú a obnovujú — využijú to čítania, zápisy aj dávky a tajomstvá sa pri serializácii vždy maskujú. JWT aplikácie je skutočný RS256 JWS podpísaný cez crypto-for-laravel — bez JWT knižnice tretej strany.

## Inštalačné tokeny GitHub App

Aplikáciu nastavte raz v .env:

```bash
GITHUB_APP_ID=123456
GITHUB_APP_INSTALLATION_ID=7654321
GITHUB_APP_PRIVATE_KEY=/path/to/app-private-key.pem
GITHUB_APP_SLUG=acme-bot
```

Keď sú nastavené všetky tri hodnoty — id aplikácie, id inštalácie a privátny kľúč —, Git::github() vytvorí GithubAppToken automaticky; ak niektorá chýba, použije statický token, prípadne žiadne údaje. Git::credentials(ProviderName::Github) vráti tie isté údaje — ich ->accessToken() prečíta živý inštalačný token a pri prázdnej cache ho vydá. Prípadne ho vytvorte explicitne:

```php
use RoundlyConsulting\Git\Dto\Credentials\{GithubAppToken, OauthToken};
use RoundlyConsulting\Git\Enums\ProviderName;

$github = Git::github(GithubAppToken::for(
    appId: config('git.providers.github.app.id'),
    installationId: config('git.providers.github.app.installation_id'),
    privateKey: config('git.providers.github.app.private_key'), // PEM string or file path
));
$github->repositories(); // installation token minted, cached to expiry, reused
```

Id aplikácie aj inštalácie musia byť číselné — čokoľvek iné vyhodí InvalidCredentialsException skôr, než by sa dostalo do kľúča cache. Používajte zdieľaný cache store (nie driver array), aby vydané tokeny prežili medzi požiadavkami. GithubAppToken vytvorený bez apiBaseUrl vydáva token na nastavenej git.providers.github.url, takže ručne vytvorené údaje fungujú aj na GitHub Enterprise Server.

## OAuth prístupové tokeny

```php
// The OAuth client (client_id, client_secret, token_url) is static per provider, so
// forProvider() takes it from git.providers.github.oauth.* and asks only for the
// per-user half.
$github = Git::github(OauthToken::forProvider(
    ProviderName::Github,
    accessToken: $access, refreshToken: $refresh, expiresAt: $expiresAt,
));

// Pass all five to OauthToken::for() to bypass config entirely.
$gitlab = Git::gitlab(OauthToken::for(
    accessToken: $access,
    refreshToken: $refresh,
    clientId: 'your-client-id',
    clientSecret: 'your-client-secret',
    tokenUrl: 'https://gitlab.com/oauth/token',
    expiresAt: $expiresAt,
));
```

Ak client\_id, client\_secret alebo token\_url nie je nastavené, forProvider() vyhodí InvalidCredentialsException s názvom chýbajúceho kľúča.

Obnova, na ktorú token endpoint odpovie 400 invalid\_grant — refresh token expiroval, bol zrušený alebo už použitý —, vyhodí InvalidCredentialsException::refreshTokenRejected(): používateľ musí účet prepojiť znova, opakovanie nepomôže. Odpoveď platformy je v getPrevious(); každé iné 400 zostáva RequestException.

## Uloženie rotovaného refresh tokenu

Ak OAuth údaje ukladáte, počúvajte OauthTokenRefreshed. Platformy, ktoré refresh tokeny rotujú, zneplatnia starý v momente, keď vydajú nový. Nový token ide do cache tokenov, ktorej záznam expiruje spolu s prístupovým tokenom — po uplynutí tej hodiny zostane jediná kópia tá, ktorú ste si uložili, a tá je už neplatná:

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Git\Events\OauthTokenRefreshed;

Event::listen(OauthTokenRefreshed::class, function (OauthTokenRefreshed $event) {
    if ($event->rotated()) {
        $connection->update([
            'refresh_token' => $event->refreshToken,
            'access_token' => $event->accessToken,
            'expires_at' => $event->expiresAt,
        ]);
    }
});
```

Event sa spustí pri každej obnove, s rotáciou aj bez nej; rotated() je príznak, že uloženú hodnotu treba zmeniť. Event nelogujte celý — zámerne nesie živé tokeny.

## Súbežné obnovy

Súbežné workery obnovujú token len raz: na cache store, ktorý podporuje zámky (Redis, databáza, súbor, array, …), beží obnova pod zámkom a worker, ktorý na ňu čakal, použije token, ktorý držiteľ zámku práve obnovil, namiesto toho, aby znova poslal už spotrebovaný refresh token — platforma s rotáciou tak porazenému v súbehu nikdy neodpovie invalid\_grant a event sa spustí raz.

## 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/git-for-laravel.md)
