REST API - autentifikace
Pro autorizace do API probíhá ve dvou krocích. Nejprve je potřeba, pomocí přístupového klíče, získat přístupový token a poté ho použít pro autorizaci v dalších požadavcích.
Přístupový klíč je dvojice privátního a veřejného klíče. Vygenerujete je například pomocí nástroje openssll
:
openssl ecparam -name prime256v1 -genkey -noout -out private.pem
openssl ec -in private.pem -pubout > public.pem
Tím vzniknou dva soubory private.pem
a public.pem
. První obsahuje privátní klíč, který je potřeba uchovávat v bezpečí.
Druhý obsahuje veřejný klíč, který je potřeba přidat do nastavení uživatele v TOPlist Profi:
K získání přístupového tokenu je potřeba poslat požadavek na adresu https://profi.toplist.cz/api/v1/login
Autentifikace probíhá pomocí HTTP hlavičky Authorization
. Hlavička musí obsahovat JWT podepsaný privátním klíčem.
Příklad volání v Pythonu:
import jwt
import requests
import time
privateKey = open('private.pem').read()
jwtPayload = jwt.encode({
'sub': 'user@example.com',
'aud': 'batch',
'iss': '0123456-789a-bcde-f012-3456789abcd',
'nbf': int(time.time()),
'exp': int(time.time()) + 5*60,
'jti': '1234567890'
}, privateKey, algorithm='ES256')
token = requests.post(f"https://media.toplist.cz/api/v1/login",
headers={
'Accept':'application/json',
'Authorization': jwtPayload
}
).json()['token']
Význam claimů JWT:
sub
- email uživatele, pro kterého je token vytvořenaud
- v tomto případě vždy hodnota ‘batch’iss
- identifikátor Provozovatele, který je uveden v nastavení serverunbf
- čas, kdy token začne platitexp
- čas, kdy token přestane platit (maximálně 1 hodina)jti
- unikátní identifikátor tokenuVygenerovaný token je potřeba přidat do hlavičky Authorization
pro každý další požadavek jako Bearer token. Tj.:
Authorization: Bearer <token>