OAuth i prijava putem Sportyja

MCP i AI klijenti

Dinamička registracija klijenata te što samoregistrirani klijent može, a što ne može.

Agent koji se spaja na Sporty nema na raspolaganju čovjeka koji bi najprije ispunio obrazac za registraciju, pa Sporty podržava dinamičku registraciju klijenata prema RFC 7591. Klijent se registrira sam, a zatim prolazi uobičajeni tok authorization code.

Dinamička registracija nije uključena u svakom okruženju. Ako je isključena, dobivate 403 access_denied, a put do pristupa tada je klijent kojeg registrira administrator kluba.

Registracija

curl -X POST https://api.sporty.plus/oauth2/register \
  -H 'Content-Type: application/json' \
  -d '{
    "client_name": "My Agent",
    "redirect_uris": ["http://127.0.0.1:8976/callback"],
    "client_uri": "https://myagent.example",
    "contacts": ["you@example.com"]
  }'
{
  "client_id": "01a09ad5-1469-7260-8157-bba3655a2fdf",
  "client_id_issued_at": 1789304059,
  "client_name": "My Agent",
  "redirect_uris": ["http://127.0.0.1:8976/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "token_endpoint_auth_method": "none",
  "scope": "openid profile email me.read me.reservations.read"
}

Nema client_secret: samoregistrirani klijent je javan i štiti ga PKCE. Loopback redirect URI-ji dopušteni su upravo za ovaj slučaj, a port se pri usporedbi zanemaruje.

Discovery za običnog OAuth klijenta nalazi se na https://api.sporty.plus/.well-known/oauth-authorization-server, a resurs kojem pristupate opisan je na /.well-known/oauth-protected-resource.

Na što je samoregistrirani klijent ograničen

Sve je ovo namjerno i ništa od toga ne pregovara se za pojedinog klijenta:

  • Javan i samo s PKCE-om. Ne postoji tajni ključ koji bi mogao procuriti.
  • Samo authorization_code i refresh_token. Nikad client_credentials — agent nikad ne djeluje bez prisutnog člana.
  • Samo openid, profile, email i me.*. Nikad ne može tražiti podatke kluba. Integraciju kojoj treba club.* registrira administrator kluba. Svi opsezi me.*su dostupni (na /me):
    • članov profil;
    • njegove rezervacije te rezerviranje ili otkazivanje terena u njegovo ime;
    • rezultati njegovih mečeva;
    • njegovi klubovi i članstva.

    Agent koji rezervira za člana trebao bi mu prikazati cijenu. Kad je needs_payment true, trebao bi mu reći da plaća u aplikaciji Sporty.
  • Privola se nikad ne preskače, čak ni za člana koji ju je već prije dao.
  • Kratkotrajni tokeni — petnaest minuta, uz osvježavanje tijekom jednog dana.
  • Ograničen broj registracija, nekoliko na sat po adresi.

Čeka pregled

Samoregistrirani klijent čeka pregled, a takav klijent radi samo za račun koji ga je registrirao.

Upravo zato otvorena registracija nije razlog za brigu, nego je sigurna: cijeli tok možete odmah izraditi i testirati, a dok vašu aplikaciju ne pogledamo, ona ne može doći ni do čijeg drugog računa. Član je na zaslonu za privolu također obaviješten da aplikacija još nije pregledana.

Kad želite da bude dostupna i drugim ljudima, javite nam se. Pregled je razgovor o tome što vaš agent radi i koji su mu opsezi doista potrebni, a ne obrazac.