# Hitelesítés

> A Haszno API különböző hitelesítési mechanizmusokat használ a végponttól és a telepítés típusától függően. Ez az oldal mindegyiket elmagyarázza, és leírja, mi érhető el ma.

## Mechanizmusok áttekintése

| Mechanizmus | Fejléc / forrás | Használható a haszno.com-on? | Mire való |
|---|---|---|---|
| Nincs | — | Igen | Nyilvános demó GET-kérések (szintetikus adatok) |
| HTTP Basic | `Authorization: Basic <base64(demo:jelszó)>` | Igen, csapattól kapott jelszóval | Teljes hozzáférés a megosztott demótelepítéshez |
| API Bearer-token | `Authorization: Bearer haszno_<token>` | Csak a `GET /api/auth/me` végponton (lásd alább) | A token felhasználójának, boltjának és jogosultsági körének ellenőrzése |
| `x-api-key` | `x-api-key: <kulcs>` vagy `?api_key=<kulcs>` | Nem | Csak saját telepítéseken |
| Munkamenet-cookie | Cookie `haszno_session` | Igen | A [fiók- és munkamenet-végpontok](protected-endpoints.md#auth-account); a `/api/auth/register` vagy a `/api/auth/login` hozza létre |

> [!WARNING]
> A Bearer-token még nem általános API-hitelesítési adat. Ma egyetlen végpont ellenőrzi: a `GET /api/auth/me`, a `haszno.com`-on és a saját telepítéseken egyaránt. A teljes képért lásd az [API Bearer-tokenek](#api-bearer-tokens) részt.

## Nyilvános demó — nincs szükség hitelesítési adatokra

Egyes GET-végpontok szintetikus demóadatot adnak vissza bármilyen hitelesítési adat nélkül. Ha teljesen kihagyod az `Authorization` fejlécet, a válasz hitelesítés nélkül kerül kiszolgálásra. Ha küldesz `Authorization` fejlécet, a kérés a HTTP Basic falon megy át: érvénytelen adatokkal `401`-et kapsz, érvényes Basic fejléccel pedig a telepítés megosztott adatait kapod a szintetikus adatok helyett.

A `https://haszno.com`-on hitelesítési adatok nélkül elérhető végpontok **Nyilvános** **Csak olvasás**:

| Útvonal | Visszaad |
|---|---|
| `GET /api/categories` | Kategória-taxonómia (14 kategória) |
| `GET /api/products` | Terméklista árazással és piaci adatokkal |
| `GET /api/products/supplier-counts` | Termékszámok beszállítónként |
| `GET /api/suppliers` | Beszállítólista |
| `GET /api/stats` | Irányítópult összesítő számok |
| `GET /api/settings` | Árazási szabályok (demó alapértékek) |
| `GET /api/impact` | Haszon-mérő részletezés |
| `GET /api/orders` | Rendeléslista (a demón mindig `[]`) |
| `GET /api/proposals` | Árjavaslatok (a demón mindig `[]`) |
| `GET /api/import-list` | Import-lista tételek |
| `GET /api/peers/invites` | Peer meghívókódok (a demón mindig `[]`) |
| `GET /api/peers/links` | Peer linkek (a demón mindig `[]`) |
| `GET /api/health` | Élőképesség-ellenőrzés |
| `GET /api/geo` | Látogató országkódja |
| `GET /api/blog` és `GET /api/blog/:slug` | Közzétett piaci elemzők (valós adatok) |
| `GET /llms.txt` | LLM-olvasható oldal-összefoglaló |

A `/api/settings` és `/api/impact` válaszokban szerepel a `"demo": true` mező. A többi demóvégpont (kategóriák, termékek, beszállítók, statisztikák, rendelések, javaslatok, peerek, import-lista) ezt a jelzőt nem tartalmazza.

## HTTP Basic hitelesítés — védett demóhozzáférés

A `https://haszno.com` hosztolt demójának van egy külső hitelesítési fala, amely a fenti nyilvános listán nem szereplő végpontokat védi, kivéve néhányat, amelynek saját védelme van, például a [fiók- és munkamenet-végpontokat](protected-endpoints.md#auth-account). Ez a fal HTTP Basic hitelesítést használ.

Hitelesítési adatok **Védett**:

```http
username: demo
password: <keresd meg a Haszno csapatát>
```

Ez egy **megosztott hitelesítési adat** a demótelepítéshez. Nem boltonkénti, és nem éles API. A jelszóért vedd fel a kapcsolatot a Haszno csapatával.

Küldd el a hitelesítési adatot szabványos `Authorization: Basic` fejlécként:

```bash
curl --fail-with-body \
  --user 'demo:<jelszó>' \
  'https://haszno.com/api/rules'
```

Vagy a CLI és az MCP-szerver által is olvasott `HASZNO_BASIC` környezeti változóval:

```bash
export HASZNO_BASIC='demo:<jelszó>'
haszno rules list --json
```

HTTP Basic hozzáféréssel meghívhatod az összes hitelesítést igénylő végpontot, beleértve az írási műveleteket is (rendelésbeküldés, szabálykezelés, feed-import, beállítások frissítése).

## API Bearer-tokenek

Az API Bearer-tokeneket agentek, CLI és MCP-szerver általi hozzáféréshez tervezték. A tervezett hosszú távú mechanizmus a boltonkénti programozott hozzáférésre.

### Token formátuma

A tokeneket `haszno_<43 karakter>` alakban adják ki, ahol a 43 karakter base64url (`A–Z`, `a–z`, `0–9`, `-`, `_`). A `haszno_`-val kezdődő teljes sztring a tokenérték, amelyet el kell küldeni.

```http
Authorization: Bearer haszno_<a-te-tokened>
```

### Token létrehozása

1. Regisztrálj a `https://haszno.com` oldalon (a `POST /api/auth/register` végponton) vagy lépj be (`POST /api/auth/login`). Mindkettő munkamenet-cookie-t ad vissza.
2. A munkamenet-cookie-val hívd meg a `POST /api/auth/tokens` végpontot `{"name": "…", "scope": "read"}` JSON-törzzsel (a `scope` értéke `read` vagy `write`, alapértelmezés: `read`) egy token kiadásához.
3. Másold ki a válasz `token` mezőjét — csak egyszer jelenik meg, és csak hashként tárolódik.

Az aktív tokeneket listázhatod (`GET /api/auth/tokens`) és visszavonhatod (`DELETE /api/auth/tokens/:id`) ugyanazzal a munkamenet-cookie-val. Tokenekkel nem kezelhetsz tokeneket: ez a három végpont csak a munkamenet-cookie-t fogadja el.

### Mire használhatók ma a Bearer-tokenek

> [!WARNING]
> Ma a `GET /api/auth/me` az egyetlen végpont, amely Bearer-tokent ellenőriz. A token felhasználóját, boltját és `tokenScope` értékét adja vissza. Más útvonal egyelőre nem fogad el Bearer-tokent hitelesítési adatként.

| Telepítés | Bearer-token eredménye |
|---|---|
| `haszno.com` (hosztolt demó) | A `GET /api/auth/me` visszaadja a token felhasználóját és boltját. Minden más védett útvonal `401`-et ad a HTTP Basic falról. |
| Saját telepítés beállított `HASZNO_API_KEY`-jel | A `GET /api/auth/me` működik. Minden más útvonalhoz továbbra is `x-api-key` kell; csak tokennel `401`-et kapsz. |
| Saját telepítés bármilyen kulcsvédelem nélkül | Minden útvonal nyitott; a tokenre nincs szükség. |

Tervezett: boltonkénti Bearer-tokenek a `haszno.com`-on, amint a multi-tenancy kikerül a fejlesztői előzetesből.

## x-api-key — csak saját telepítésen

Saját Haszno-példányon beállíthatod a `HASZNO_API_KEY` környezeti változót. Az összes kérés, amely ezt az értéket az `x-api-key` fejlécben vagy `?api_key=` lekérdezési paraméterként tartalmazza, munkamenet nélkül is elfogadásra kerül.

Ez a mechanizmus **nem aktív a `haszno.com`-on**. A hosztolt telepítésen nincs beállítva a környezeti változó.

## A hitelesítési adatok biztonságos tárolása

- Tárolj hitelesítési adatokat környezeti változókban, ne forráskódban vagy verziókezelt konfigurációs fájlokban.
- A demójelszóhoz használd a `HASZNO_BASIC`-ot, az API-kulcshoz a `HASZNO_API_KEY`-t. A CLI és az MCP-szerver ezeket automatikusan olvassa.
- Futtasd a `haszno login` parancsot a hitelesítési adatok mentéséhez (`~/.config/haszno/config.json`, `chmod 600` jogosultsággal létrehozva). Mind a CLI, mind az MCP-szerver olvas ebből a fájlból.
- Soha ne adj meg hitelesítési adatot parancssori argumentumként megosztott shell-környezetben — megjelenik a `ps` kimenetében és a shell-előzményekben.
- Listázd az aktív tokeneket a `GET /api/auth/tokens` végponttal; vond vissza a feleslegeseket a `DELETE /api/auth/tokens/:id` végponttal.

## Hibaválaszok

| Státusz | Jelentés |
|---|---|
| `401` | Az `Authorization` fejléc jelen van, de a hitelesítési adatok hiányoznak, rosszul formázottak vagy érvénytelenek. A fiókvégpontok akkor is `401`-et adnak, ha munkamenetet várnak, de nincs érvényes. Javítsd ki a hitelesítési adatot, és próbáld újra. |
| `403` | A kérést a CSRF-middleware utasította el. Ez állapotmódosító kéréseknél fordul elő, amelyek váratlan `Origin`-ből érkeznek. API- vagy CLI-kliensek számára, amelyek nem használnak cookie-munkamenetet, ez nem releváns. |

A hibaüzenetek törzse mindig a `{ "error": "Magyar hibaüzenet" }` alakot követi. A teljes hibareferenciáért lásd a [Hibák és sebességkorlátok](errors.md) oldalt.

> [!NOTE]
> Az API hibaüzenetei jelenleg magyarul kerülnek visszaadásra, tekintet nélkül az `Accept-Language` fejlécre vagy a dokumentáció nyelvi beállítására. Ez az általános elérhetőség előtt megváltozik.
