Handsal

Autoryzacja dla maszyn.

Własny serwer OAuth 2.0. Usługa prosi, Handsal podpisuje token dla jednego odbiorcy i token wygasa. Agent czeka, gdy musi zgodzić się człowiek.

Token tenanta acme.
iss
https://auth.example.com/t/acme
aud
https://api.acme.example/orders
scope
orders:read
exp
3600 sekund
sub
app_k7mn2p4qr5s6tvwx2abc
alg
ES256
kid
k_2026-11-07_c4e1

Po co to jest.

  • billing / orders

    Usługa woła inną.

    Rozliczenia potrzebują orders:read i niczego więcej. Token nazywa API zamówień. Token wystawiony dla magazynu jest odrzucany.

  • agent / refunds

    Agent czeka na człowieka.

    Agent potwierdza się kluczem prywatnym, więc sekret nie leży w prompcie. Odczyt może przejść od razu. Zwrot czeka na człowieka, a token żyje pięć minut.

  • acme / globex

    Każdy zespół ma swój issuer.

    Jeden serwer, wielu tenantów. Każdy ma własne klucze, aplikacje i audience. Token jednego tenanta nie przechodzi u drugiego.

Do czego token ma prawo.

  • Jeden odbiorca

    Parametr resource jest wymagany. Token jest wydawany dla jednego API i tylko tych zakresów, które ta aplikacja dostała na tym API.

  • Klucze zostają u tenanta

    Podpis jest ES256. Klucz prywatny jest zaszyfrowany w spoczynku. Serwer zasobów sprawdza podpis w JWKS tego tenanta albo pyta o introspekcję.

  • Możesz go unieważnić

    Unieważniasz jeden token albo wszystkie tokeny aplikacji lub tenanta. Introspekcja widzi to od razu. Serwer, który sprawdza tylko podpis, czeka do wygaśnięcia, więc czas życia zostaje krótki. Domyślnie jest to godzina.

Jak przebiega wywołanie.

Kto woła
  1. Załóż tenanta.

    Jego issuer to publiczny adres, potem /t/, potem slug.

  2. Nazwij API i wywołującego.

    Zasób ma audience i zakresy. Aplikacja dostaje client id i sekret. Sekret widać raz.

  3. Usługa prosi o token.

    Handsal sprawdza grant, podpisuje aktywnym kluczem tenanta i zwraca token bearer.

  1. Zarejestruj agenta.

    Daj mu klucz prywatny, żeby wspólny sekret nie wpadł do promptu. Tokeny domyślnie żyją pięć minut.

  2. Ustaw limity.

    Ile zakresów może nieść jeden token, ile tokenów na godzinę i z jakich sieci wolno prosić.

  3. Agent prosi i nazywa zadanie.

    Zakres, który wymaga człowieka, czeka. Handsal podpisuje po zgodzie, raz. Token mówi, że woła agent.

Jeden kontener. PostgreSQL obok.

Migracje ruszają przy starcie procesu. Panel administratora jest pod tym samym adresem. TLS kończysz w proxy i ustawiasz publiczny adres na https.

docker compose -f docker-compose.prod.yml up -d

Serwer nasłuchuje na porcie 3000.