OAuth i prijava putem Sportyja

Prijava putem Sportyja

OpenID Connect — id_token, njegovi claimovi, /userinfo i provjera potpisa.

Ako vam treba samo znati tko je netko, trebate OpenID Connect, a to je tok authorization code s openid u opsegu.

Usmjerite bilo koju OIDC biblioteku na https://api.sporty.plus/.well-known/openid-configuration i ona će se sama konfigurirati. Provjeru je moguće napisati i ručno, ali to se rijetko isplati.

id_token

Vraća se uz pristupni token kad je odobren openid. To je RS256 JWT:

{
  "iss": "https://api.sporty.plus",
  "sub": "9f1c2e40-...",
  "aud": "your-client-id",
  "iat": 1789304059,
  "nbf": 1789304059,
  "exp": 1789307659,
  "auth_time": 1789304050,
  "nonce": "what-you-sent",
  "at_hash": "xQ7f...",
  "name": "Ada Lovelace",
  "given_name": "Ada",
  "family_name": "Lovelace",
  "locale": "hr",
  "email": "ada@example.com",
  "email_verified": true
}
ClaimNapomene
subTrajni id člana. Upravo njega pohranite. Nikad se ne mijenja; adresa e-pošte može se promijeniti.
audVaš client id. Provjerite ga.
noncePrisutan ako ste ga poslali. Provjerite ga.
at_hashVeže ovaj id_token uz pristupni token izdan zajedno s njim.
auth_timeKad je član dao odobrenje. Ne nužno i kad se prijavio — to ne bilježimo, pa na tome ne gradite ponašanje za max_age.
name, given_name, family_name, localeSamo uz profile.
email, email_verifiedSamo uz email.

Provjera

Dohvatite https://api.sporty.plus/oauth2/jwks, odaberite ključ čiji kid odgovara zaglavlju tokena, provjerite RS256, a zatim provjerite iss, aud i exp.

curl https://api.sporty.plus/oauth2/jwks

Spremite JWKS u predmemoriju — sat vremena je razumno — ali kad naiđete na kid koji ne poznajete, ponovno ga dohvatite umjesto da javite pogrešku.

/userinfo

id_token je snimka stanja. Za trenutne vrijednosti:

curl https://api.sporty.plus/oauth2/userinfo \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Isti claimovi, uvjetovani opsegom na isti način, uvijek uključujući sub.

Rotacija ključeva

Ključ za potpisivanje mijenjamo rijetko, a kad to učinimo:

  • novi javni ključ pojavljuje se u JWKS-u, uz stari, prije nego što se njime išta potpiše;
  • svaki postojeći pristupni token prestaje raditi. Ključ za potpisivanje dijele i pristupni tokeni, pa ih rotacija poništava. Vaši refresh tokeni to preživljavaju — iskoristite ih i budite spremni na ponovnu autorizaciju ako to ne uspije.

Ako ikad vidite da je token koji izgleda valjano iznenada odbijen, jednom ga osvježite prije nego što zaključite da je nešto pokvareno.