# Uwierzytelnianie

URL: https://developertoolkit.ai/pl/codex/quick-start/authentication/
Description: Wybierz logowanie ChatGPT lub klucz API w Codex, przechowuj poświadczenia, zaloguj się przez SSH i w CI, a wynik sprawdź poleceniami login status i doctor.

Codex uwierzytelnia się logowaniem ChatGPT, które korzysta z limitu Codex w planie ChatGPT i jest wymagane dla Codex cloud, albo kluczem API OpenAI, rozliczanym za tokeny i dobrym do pracy lokalnej oraz w CI. Codex CLI domyślnie zapisuje poświadczenia w `~/.codex/auth.json`, a `codex login status` i `codex doctor` potwierdzają, która metoda jest aktywna.

Zainstalowałeś Codex, uruchomiłeś `codex`, a ekran logowania proponuje ChatGPT, kod urządzenia i klucz API. Na laptopie wybór zajmuje sekundę. Na serwerze buildów bez przeglądarki, w kontenerze Dockera albo w jobie GitHub Actions zły wybór wychodzi dopiero później: krok CI pisze „Not logged in”, choć agent działa, albo `codex cloud` odmawia startu.

Ta strona jest dla **dewelopera**, który konfiguruje Codex na laptopie, zdalnej maszynie lub runnerze CI, oraz dla **tech leada**, który chce, żeby każda maszyna w zespole była zalogowana w ten sam, sprawdzalny sposób. Każde polecenie i komunikat poniżej sprawdziliśmy na Codex CLI 0.157.1 w dniu 2026-09-26. Najpierw zainstaluj Codex według [przewodnika po instalacji](/pl/codex/quick-start/installation/).

## Co daje sprawdzone logowanie w Codex

- Decyzję: logowanie ChatGPT czy klucz API, podjętą na podstawie rozliczeń i funkcji, które każda metoda odblokowuje.
- Poświadczenia przechowywane tam, gdzie wymaga tego twoja polityka bezpieczeństwa: w pliku, w systemowym keyringu albo tylko w pamięci.
- Działające logowanie na maszynach bez przeglądarki: w sesjach SSH, kontenerach i runnerach CI.
- Sprawdzenie dwoma poleceniami, które pokazuje, jaka metoda jest aktywna, więc nikt nie musi zgadywać.
- Regułę dla całego zespołu, która przypina metodę logowania i workspace ChatGPT.

## Którą metodę logowania w Codex wybrać?

Wybieraj według tego, kto płaci i jakich funkcji potrzebujesz. Ekran logowania w wersji 0.157.1 proponuje **Sign in with ChatGPT**, **Sign in with Device Code**, **Provide your own API key** oraz Amazon Bedrock dla organizacji, które kierują Codex przez AWS.

| Sytuacja | Użyj | Dlaczego |
| --- | --- | --- |
| Masz plan ChatGPT Plus, Pro, Business, Edu lub Enterprise | Logowanie ChatGPT | Użycie Codex idzie z limitu planu, a zadania w chmurze, `/usage` i zdalne sterowanie działają |
| Maszyna bez przeglądarki, a chcesz korzystać z planu ChatGPT | Kod urządzenia | To samo konto co przy logowaniu ChatGPT; logowanie kończysz na dowolnym innym urządzeniu |
| Job CI lub skrypt wywołujący `codex exec` | Klucz API w `CODEX_API_KEY` | Rozliczenie za użycie na koncie OpenAI Platform, bez osobistej sesji na współdzielonym runnerze |
| Chcesz oddzielić koszty Codex od planu ChatGPT | Klucz API | Jeden rachunek na organizację API i jej polityki |
| Firma korzysta z modeli przez AWS | Amazon Bedrock | Zobacz [przewodnik po zarządzaniu w firmie](/pl/codex/team/enterprise-governance/) |

Cennik OpenAI (odczyt 2026-10-12) wymienia też plany Free i Go, dla których podaje tylko „GPT-6 Luna at Standard speed in the desktop app, subject to rollout”; tabela planów na stronie [kredyty, limity użycia i optymalizacja kosztów Codeksa](/pl/codex/operate/cost-management/) wymienia każdy plan i to, co obejmuje. Dla klucza API strona pisze „No cloud-based features”. Od 0.161.0 (2026-10-07) wykrywanie modeli dla kluczy API jest domyślnie włączone (`api_key_model_discovery` jest stabilne i włączone w 0.162.1), więc pipeline logujący się kluczem API może zachowywać się inaczej niż starsza przypięta wersja; po aktualizacji uruchom jego test dymny ponownie.

Klucz API nie odblokowuje wszystkiego. W Codex CLI 0.157.1 te funkcje odrzucają uwierzytelnianie kluczem i wymagają logowania ChatGPT:

- `codex cloud` („Not signed in. Please run 'codex login' to sign in with ChatGPT”).
- Zdalne sterowanie („remote control requires ChatGPT authentication; API key auth is not supported”).
- Zdalny katalog pluginów i pluginy udostępnione.
- `/usage` i odczyty limitów w interfejsie terminalowym.

Dostępny model zależy od planu lub organizacji API, a nie od ekranu logowania. [Hub modeli](/pl/ecosystem/models/) pokazuje, na czym Codex działa domyślnie i ile kosztuje każdy model.

## Zaloguj się do Codex i udowodnij, że działa

**Logowanie ChatGPT**

Uruchom w terminalu na maszynie z przeglądarką:

```bash
codex login
```

Codex uruchamia lokalny serwer callbacku na `127.0.0.1:1455`, otwiera przeglądarkę i po zalogowaniu zapisuje zwrócone tokeny. Uruchomienie `codex` bez poświadczeń pokazuje ten sam wybór w interfejsie terminalowym.

**Klucz API**

Przekaż klucz ze zmiennej środowiskowej przez potok, żeby nie trafił do historii powłoki ani do linii poleceń:

```bash
printenv OPENAI_API_KEY | codex login --with-api-key
```

Utwórz klucz na koncie OpenAI Platform i trzymaj go w menedżerze haseł lub magazynie sekretów. Codex zapisuje klucz we własnym magazynie poświadczeń, więc zmienna środowiskowa jest potrzebna tylko raz.

Aplikacja desktopowa i rozszerzenie IDE mają logowanie na własnych ekranach. CLI i rozszerzenie IDE czytają poświadczenia z tego samego katalogu `CODEX_HOME` (domyślnie `~/.codex`), więc jedno logowanie obsługuje oba, dopóki `CODEX_HOME` jest ten sam.

Teraz sprawdź wynik, zamiast go zakładać:

1. Zapytaj Codex, jaką metodę ma zapisaną. Kod wyjścia to `0` po zalogowaniu i `1` bez logowania, więc skrypty mogą na nim polegać:

   ```bash
   codex login status
   ```

   Oczekuj `Logged in using ChatGPT` albo `Logged in using an API key - ` z kluczem zamaskowanym w środku. Komunikat trafia na stderr, więc przy przechwytywaniu dodaj `2>&1`.

2. Uruchom diagnostykę. Wiersz `auth` podaje źródło poświadczeń, także klucze ze zmiennych środowiskowych, których `codex login status` nie widzi:

   ```bash
   codex doctor --summary
   ```

3. Do zgłoszenia onboardingowego lub sprawy w supporcie zapisz raport z zamaskowanymi sekretami i go dołącz:

   ```bash
   codex doctor --json > codex-doctor.json
   ```

4. Jeśli wybrałeś logowanie ChatGPT i potrzebujesz zadań w chmurze, potwierdź je z terminala. `codex cloud list` wypisuje zadania w chmurze bez otwierania TUI, a lista zadań, nawet pusta, dowodzi, że chmura akceptuje twoje konto:

   ```bash
   codex cloud list
   ```

Tech lead zatwierdza plik `codex doctor --json`, a nie zrzut ekranu z logowania: zawiera wiersz `auth` i wersję, a raport maskuje sekrety.

**Prompt do skopiowania: audyt higieny poświadczeń Codex w repozytorium**

```text
Do not modify any files and do not print any secret values.
1. Search this repository, including CI workflow files, Dockerfiles,
   scripts, and .env* files, for OpenAI or Codex credentials: strings
   starting with "sk-", and assignments to OPENAI_API_KEY or CODEX_API_KEY
   that use a literal value instead of a secret reference.
2. Check that .gitignore ignores .env files and any auth.json.
3. List every place a CI job passes a key to Codex and say whether it
   comes from the platform's secret store.
Output a table: file, line, finding, risk (high/medium/low), fix.
Mask any value you find to its first 4 characters.
```

## Gdzie Codex przechowuje poświadczenia?

Decyduje klucz `cli_auth_credentials_store` w `~/.codex/config.toml`. Domyślna wartość to `file`.

```toml
# ~/.codex/config.toml
cli_auth_credentials_store = "auto"
```

| Wartość | Gdzie trafiają poświadczenia | Kiedy jej użyć |
| --- | --- | --- |
| `file` (domyślnie) | `$CODEX_HOME/auth.json` | Poświadczenie ma przetrwać restart na maszynie bez keyringu |
| `keyring` | macOS Keychain, Windows Credential Manager lub Linux Secret Service | Laptop ma odblokowany keyring i nie chcesz pliku z tokenami na dysku. Codex zgłasza błąd, gdy keyring jest niedostępny |
| `auto` | Keyring, jeśli jest dostępny, w przeciwnym razie `auth.json` | Większość laptopów: keyring tam, gdzie działa, plik tam, gdzie nie |
| `ephemeral` | Pamięć, tylko dla bieżącego procesu | Maszyny współdzielone lub krótkotrwałe, na których nic nie może trafić na dysk |

`auth.json` zawiera aktywne tokeny albo twój klucz API. Nigdy go nie commituj, nie wklejaj do zgłoszeń i nie wbudowuj w obraz kontenera. Nigdy nie wpisuj surowego klucza do `config.toml`.

## Zaloguj się do Codex przez SSH, w kontenerze lub na serwerze bez interfejsu graficznego

Logowanie w przeglądarce wymaga, żeby przeglądarka dotarła do serwera callbacku Codex na `localhost:1455`. Na zdalnej maszynie to niemożliwe, więc użyj jednej z tych metod.

**Kod urządzenia (pierwszy wybór)**

Uruchom na zdalnej maszynie:

```bash
codex login --device-auth
```

Codex wypisuje URL i jednorazowy kod. Otwórz URL na dowolnym urządzeniu, zaloguj się i wpisz kod. Kod wygasa po 15 minutach. Jeśli Codex zgłasza, że logowanie kodem urządzenia nie jest włączone, użyj przekierowania portów SSH.

**Przekierowanie portów SSH**

Przekieruj port callbacku, a potem zaloguj się w tej sesji:

```bash
# On your laptop
ssh -L 1455:localhost:1455 -L 1457:localhost:1457 user@remote

# In that SSH session, on the remote machine
codex login
```

Otwórz wypisany URL w przeglądarce na laptopie. Port `1457` to zapasowy port, którego Codex używa, gdy `1455` jest zajęty, więc przekierowanie obu obsługuje także ten przypadek.

**Kopia poświadczeń (ostateczność)**

Zaloguj się na laptopie, a potem skopiuj plik szyfrowanym kanałem:

```bash
ssh user@remote 'mkdir -p ~/.codex && chmod 700 ~/.codex'
scp ~/.codex/auth.json user@remote:~/.codex/auth.json
ssh user@remote 'chmod 600 ~/.codex/auth.json && codex login status'
```

To działa tylko z magazynem `file`, a zdalna maszyna trzyma od teraz twoją osobistą sesję. Rób tak wyłącznie na maszynach, do których dostęp masz tylko ty, i po skończonej pracy uruchom tam `codex logout`.

## Uwierzytelnij Codex w CI bez osobistej sesji

Runner CI nigdy nie powinien trzymać sesji ChatGPT dewelopera. Przekaż `codex exec` klucz API przez zmienną środowiskową `CODEX_API_KEY`, pobraną z magazynu sekretów platformy CI, i nie zapisuj niczego na dysku. [Przewodnik po CI/CD z Codex](/pl/codex/ship/ci-cd/) omawia akcję GitHub `openai/codex-action`; poniżej jest wzorzec na poziomie powłoki, na którym ona bazuje.

```yaml
# .github/workflows/codex-check.yml
name: codex-check
on: pull_request
permissions:
  contents: read
jobs:
  codex:
    # Skip pull requests from forks: they get no secrets
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
        with:
          fetch-depth: 0
          persist-credentials: false
      - run: npm install -g @openai/codex@0.157.1
      - name: Check Codex sees a credential
        env:
          CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
        run: |
          codex doctor --summary --no-color > doctor.txt || true
          grep -E '✓ auth' doctor.txt
      - name: Read-only review
        env:
          CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
        run: |
          codex -c cli_auth_credentials_store=ephemeral \
            -c default_permissions=":read-only" \
            exec --ephemeral \
            "Summarize the risk in this pull request's diff against origin/main. Do not modify files."
```

`on: pull_request` nie przekazuje sekretów repozytorium do pull requestów z forków i właśnie o to chodzi: kod z forka nigdy nie działa obok twojego klucza. Linia `if:` pomija pull requesty z forków w całości, więc job działa tylko dla gałęzi wypchniętych przez osoby, które już mają prawo zapisu. Nie zmieniaj wyzwalacza na `pull_request_target`, żeby dać forkom sekrety. Job ufa gałęziom osób z prawem zapisu; taka gałąź nadal może zmienić projektową konfigurację `.codex/` i `AGENTS.md`, więc krok agenta zostaw w trybie tylko do odczytu i wymagaj review przed scaleniem zmian w workflow lub w `.codex/`. `--ephemeral` trzyma sesję poza dyskiem runnera, a `cli_auth_credentials_store=ephemeral` trzyma poświadczenia tylko w pamięci. Krok z doctor ignoruje kod wyjścia, bo inne wiersze, na przykład osiągalność sieci, mogą na runnerze nie przejść, choć uwierzytelnianie działa. Klucz przekazany w ten sposób sprawdzaj przez `codex doctor`, a nie `codex login status`: `codex login status` zgłasza `Not logged in` dla kluczy ze zmiennych środowiskowych, a wiersz auth w doctor pokazuje `auth is provided by environment`. Wiersz auth potwierdza tylko, że klucz jest ustawiony, a nie że OpenAI go akceptuje; na unieważnionym lub błędnie wpisanym kluczu zawodzi dopiero krok exec. Krok agenta wybiera wbudowany profil uprawnień `:read-only` (beta), który OpenAI zaleca zamiast starszej flagi `--sandbox`; nie dodawaj obok niego `--sandbox`, bo oba systemy się nie łączą. Zobacz [konfigurację Codex](/pl/codex/quick-start/configuration/).

**Prompt do skopiowania: dodaj bezpieczny job CI z Codex do repozytorium**

```text
Add a GitHub Actions workflow at .github/workflows/codex-check.yml that
runs Codex in read-only mode on pull_request events. Requirements:
- top-level permissions: contents: read, and nothing else
- actions/checkout with persist-credentials: false
- the API key comes only from secrets.CODEX_API_KEY via the
  CODEX_API_KEY environment variable; never echo it
- a step that saves `codex doctor --summary` output (ignore its exit
  code) and fails unless the auth row shows a check mark
- `codex exec --ephemeral` with `-c default_permissions=":read-only"`
  (a permission profile, not --sandbox) for the agent step
- skip pull requests from forks with an if: condition on the job
- do not use pull_request_target
Then show me the diff and list each requirement with the line that
satisfies it.
```

Lista wymagań na końcu to twoje kryterium akceptacji: każde wymaganie wskazuje linię, więc sprawdzasz siedem linii, a nie cały plik.

## Wymuś jedną metodę logowania w całym zespole

Dla jednej maszyny lub wspólnej konfiguracji bazowej przypnij metodę i workspace w `config.toml`:

```toml
# ~/.codex/config.toml, or a config your team distributes
forced_login_method = "chatgpt"          # or "api"
forced_chatgpt_workspace_id = "00000000-0000-0000-0000-000000000000"
```

Jeśli zapisane poświadczenie nie pasuje, Codex wylogowuje użytkownika i podaje powód, na przykład „ChatGPT login is required, but an API key is currently being used. Logging out.”. Użytkownik może edytować własny `config.toml`, więc reguły dla całej organizacji administratorzy ustawiają przez `allowed_login_methods` i `allowed_chatgpt_workspaces` w zarządzanym pliku `requirements.toml`. Konfigurację zarządzaną opisuje [przewodnik po zarządzaniu w firmie](/pl/codex/team/enterprise-governance/).

**Prompt do skopiowania: zespołowy test logowania do Codex na onboarding**

```text
Create scripts/check-codex-auth.sh for our onboarding checklist.
It must: print `codex --version`; run `codex login status 2>&1` and fail
with a clear message unless it exits 0 and the output starts with
"Logged in using ChatGPT"; read ~/.codex/config.toml without printing
secrets and warn if forced_login_method is not "chatgpt"; warn if
~/.codex/auth.json exists and is readable by group or others; and
finish with `codex doctor --summary`. Use POSIX sh, no dependencies.
Do not read or print the contents of auth.json. Run the script once
and show me its output.
```

## Gdy logowanie do Codex nie działa

**Przeglądarka nie wraca do terminala (WSL, SSH, kontenery).** Przeglądarka nie dociera do `localhost:1455` na maszynie z Codex. Przerwij i użyj `codex login --device-auth` albo opisanego wyżej przekierowania SSH.

**„Port … is already in use”.** Oba porty callbacku, 1455 i zapasowy 1457, są zajęte, zwykle przez stare procesy `codex login`. Codex próbował już anulować poprzednie logowanie. Zamknij terminale z trwającym logowaniem (albo zakończ proces trzymający port) i uruchom `codex login` ponownie.

**„device code login is not enabled for this Codex server”.** Logowanie kodem urządzenia jest wyłączone dla tego konta lub serwera. Użyj przekierowania portów SSH albo zapytaj administratora workspace'u, czy to ustawienie jest dla ciebie dostępne.

**„device auth timed out after 15 minutes”.** Uruchom ponownie `codex login --device-auth` i wpisz nowy kod od razu.

**„Your access token could not be refreshed”.** Sesja wygasła albo zalogowałeś się gdzie indziej na inne konto. Uruchom `codex logout`, a potem `codex login`.

**Codex wylogowuje cię przy starcie komunikatem „ChatGPT login is required, but an API key is currently being used”.** Reguła `forced_login_method` nie pasuje do twoich poświadczeń. Zaloguj się metodą, której wymaga reguła. Zmieniaj regułę tylko wtedy, gdy jest twoja.

**„API key login is disabled by this workspace”.** Administrator dopuszcza tylko logowanie ChatGPT. Uruchom `codex login` i wybierz ChatGPT.

**Magazyn `keyring` nie działa na linuksowym serwerze bez interfejsu graficznego.** Nie działa tam Secret Service, a `keyring` zgłasza błąd zamiast przejść na plik. Ustaw `cli_auth_credentials_store = "auto"` albo `"ephemeral"` na maszynach współdzielonych.

**W jednym terminalu zalogowany, w drugim „Not logged in”.** Obie powłoki mają różne `CODEX_HOME`. Uruchom `echo "$CODEX_HOME"` w obu i ustaw tę samą wartość albo usuń zmienną, żeby używać `~/.codex`.

**`codex login status` nie przechodzi w CI, choć job działa.** Klucz pochodzi z `CODEX_API_KEY`, którego `login status` nie raportuje. Sprawdzaj przez `codex doctor --summary`, jak w przykładzie CI.

**`codex cloud` pisze „Not signed in”, choć praca lokalna działa.** Używasz klucza API. Zadania w chmurze wymagają logowania ChatGPT: uruchom `codex login` i wybierz ChatGPT.

Błędy po zalogowaniu, takie jak limity czy odmowy sandboksa, opisuje [odzyskiwanie po błędach w Codex](/pl/codex/quick-start/error-recovery/).

## Co dalej po zalogowaniu do Codex

- [Skonfiguruj Codex](/pl/codex/quick-start/configuration/) — Ustaw model, politykę zatwierdzeń, profile uprawnień i profile w config.toml.
- [Pierwsze zadanie w Codex](/pl/codex/quick-start/first-task/) — Daj Codex zadanie o jasnym zakresie i sprawdź wynik testami, a nie czytaniem każdej linii.
- [Codex w trybie nieinteraktywnym](/pl/codex/automate/non-interactive/) — Skryptuj codex exec w zadaniach wsadowych i potokach.
- [Uwierzytelnianie w Claude Code](/pl/claude-code/quick-start/authentication/) — Zaloguj się do Claude Code subskrypcją lub kluczem API i przygotuj poświadczenia dla CI.
- [Środowiska chmurowe Codex](/pl/codex/automate/cloud-environments/) — Przygotuj środowiska, w których działają zadania w chmurze, gdy logowanie ChatGPT już działa.
