Tok authorization code
Authorization code s PKCE-om tok je za svaku aplikaciju koja djeluje u ime osobe. Svaki primjer u nastavku stvarni je zahtjev.
1. Napravite PKCE verifier i challenge
PKCE je obavezan, i za povjerljive klijente, a prihvaća se samo S256 — plain se odbija.
VERIFIER=$(openssl rand -base64 60 | tr -d '\n=+/' | cut -c1-64)
CHALLENGE=$(printf '%s' "$VERIFIER" | openssl dgst -sha256 -binary | openssl base64 | tr '+/' '-_' | tr -d '=')
Sačuvajte verifier; trebat će vam u 4. koraku.
2. Pošaljite člana na Sporty
https://api.sporty.plus/oauth2/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://yourapp.example/callback
&scope=openid%20profile%20email%20club.courts.read
&state=RANDOM_PER_REQUEST
&code_challenge=CHALLENGE
&code_challenge_method=S256
| Parametar | Napomene |
|---|---|
state | Nasumičan, nepogodiv, zaseban za svaki zahtjev. Provjerite ga pri povratku — upravo to jamči da je povratni poziv vaš. |
nonce | Neobavezan. Ako ga pošaljete, vraća se u id_token. Koristite ga ako vam treba. |
club_id | Neobavezan. Ima smisla samo za klijenta s pristupom više klubova, da kaže o kojem je riječ. |
Član na my.sporty.plus vidi zaslon za privolu koji jednostavnim riječima navodi točno ono što
ste zatražili. Može odobriti i manje od toga; zatraženo se nikad ne proširuje.
3. Član se vraća na vaš redirect URI
https://yourapp.example/callback?code=...&state=...
Ako je odbio, ili je nešto bilo pogrešno:
https://yourapp.example/callback?error=access_denied&error_description=...&state=...
Prije bilo čega drugog usporedite state s onim što ste poslali.
4. Zamijenite kod za token
Unutar nekoliko minuta i samo jednom. Kod je jednokratan.
curl -X POST https://api.sporty.plus/oauth2/token \
-H 'Accept: application/json' \
-d grant_type=authorization_code \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_SECRET \
-d redirect_uri=https://yourapp.example/callback \
-d code_verifier="$VERIFIER" \
-d code=THE_CODE
Za javnog klijenta izostavite client_secret.
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJ0eXAiOiJKV1Qi...",
"refresh_token": "def5020089ab...",
"id_token": "eyJ0eXAiOiJKV1Qi..."
}
id_token je prisutan samo ako ste zatražili openid. Pogledajte
Prijava putem Sportyja.
5. Koristite ga
curl https://api.sporty.plus/api/partner/v1/clubs/me \
-H "Authorization: Bearer $ACCESS_TOKEN"
6. Osvježite ga
Pristupni tokeni traju sat vremena, a refresh tokeni trideset dana (dan za klijenta koji se registrirao sam).
curl -X POST https://api.sporty.plus/oauth2/token \
-H 'Accept: application/json' \
-d grant_type=refresh_token \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_SECRET \
-d refresh_token=THE_REFRESH_TOKEN
7. Opozovite ga kad završite
curl -X POST https://api.sporty.plus/oauth2/token/revoke \
-d client_id=YOUR_CLIENT_ID \
-d client_secret=YOUR_SECRET \
-d token=THE_ACCESS_TOKEN
Ovo uvijek odgovara 200, što god poslali — tako nalaže
RFC 7009, pa se krajnja točka ne može koristiti za
provjeru je li token valjan.
Član vas također može opozvati u bilo kojem trenutku, putem Autorizirane aplikacije u svojem profilu. Kad se to dogodi, svaki token koji imate odmah prestaje raditi, a člana biste trebali ponovno provesti kroz tok umjesto da pokušavate iznova.
Pogreške koje možete očekivati
| Pogreška | Što se dogodilo |
|---|---|
invalid_request | Obično nedostaje code_challenge ili je plain. Obavezan je PKCE sa S256. |
invalid_scope | Opseg koji ne postoji ili koji ova vrsta klijenta ne smije tražiti. |
invalid_grant | Kod je već iskorišten ili je istekao, ili se code_verifier ne podudara. |
access_denied | Član je odbio, ili je aplikacija suspendirana. |
insufficient_scope (403) | Token je valjan, ali ovaj mu opseg nije odobren. Zaglavlje WWW-Authenticate navodi što je potrebno. |
Na neregistrirani redirect_uri nikad se ne preusmjerava. Pogrešku ćete umjesto toga vidjeti
na Sportyju — i upravo je to svrha.