BoxLatviaIzstrādātājiem
Pieprasīt piekļuvi
Pamācības

Autentifikācija

Katrs pieprasījums tiek autentificēts ar piekļuves datiem, ko izsniedza BoxLatvia. Vienkāršākajai integrācijai izmantojiet HTTP Basic vai OAuth 2.0, ja to sagaida jūsu rīki. Abi nodrošina vienādu piekļuvi.

#HTTP Basic

Katrā pieprasījumā nosūtiet client ID kā lietotājvārdu un noslēpumu kā paroli. Gandrīz katra HTTP bibliotēka to izdara jūsu vietā.

curl "$API/v1/me" \
  -u "$CLIENT_ID:$CLIENT_SECRET"

Vienmēr izmantojiet HTTPS. API nekad nepieņem piekļuves datus, kas sūtīti pa parasto HTTP.

#OAuth 2.0 client credentials

Apmainiet savus piekļuves datus pret īslaicīgu bearer token un sūtiet to. Tokeni derīgi 15 minūtes: kad API atbild ar 401, pieprasiet jaunu. Saglabājiet tokenu un atjaunojiet to minūti pirms beigām, nevis pieprasiet jaunu katram izsaukumam.

#Iegūt piekļuves token

POST/v1/oauth/tokentiesības nav vajadzīgas

OAuth 2.0 client credentials: apmainiet savu client id un noslēpumu pret bearer token, kas derīgs 15 minūtes.

Nosūtiet piekļuves datus kā HTTP Basic (kā piemērā) vai kā client_id un client_secret formas saturā. Kļūdas atbilst OAuth standartam (invalid_client, invalid_scope, …), nevis parastajam kļūdu formātam.

Pieprasījuma saturs (application/x-www-form-urlencoded)

NosaukumsTipsApraksts
grant_type obligātsstringVienmēr client_credentials.
scopestringAr atstarpēm atdalītas tiesības, kādas vēlaties tokenam. Noklusējums: viss, ko atļauj jūsu piekļuves dati. Vairāk pieprasīt nevar.

Piemēri

Token pieprasīšana
curl -X POST "$API/v1/oauth/token" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d grant_type=client_credentials \
  -d "scope=boxes:read boxes:write"
200 OK
{
  "access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2FwaS5ib3hsYXR2aWEubHYi…",
  "token_type": "Bearer",
  "expires_in": 900,
  "scope": "boxes:read boxes:write"
}
Nepareizi piekļuves dati
curl -X POST "$API/v1/oauth/token" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d grant_type=client_credentials
401 Unauthorized
{
  "error": "invalid_client",
  "error_description": "Invalid client credentials."
}

Kļūdas

StatussKad
400invalid_request, unsupported_grant_type vai invalid_scope.
401invalid_client: id vai noslēpums ir nepareizs, vai piekļuve ir atsaukta vai beigusies.
429Pārāk daudz neveiksmīgu mēģinājumu no jūsu adreses.

#Token lietošana

curl "$API/v1/me" \
  -H "Authorization: Bearer $TOKEN"

Tokenam ir tikai tās tiesības, ko pieprasījāt. Piekļuves datu atsaukšana vai to tiesību sašaurināšana stājas spēkā jau nākamajā pieprasījumā, arī jau izsniegtiem tokeniem. Parakstīšanas atslēgas ir publicētas /v1/.well-known/jwks.json.

#Tiesības (scopes)

Tiesības nosaka, ko piekļuves datu komplekts drīkst darīt. Pieprasiet tikai to, kas integrācijai nepieciešams.

TiesībasAtļauj
reference:readLasīt atsauces sarakstus (ērtības, rajoni, cenas mērvienības, izmēri).
supplier:readLasīt jūsu piegādātāja profilu un GET /v1/me.
supplier:writeMainīt profila kontaktinformācijas un adreses laukus.
locations:readIegūt lokāciju sarakstu un lokācijas, kā arī to attēlus.
locations:writeIzveidot, mainīt un dzēst lokācijas.
boxes:readIegūt telpu sarakstu un telpas, kā arī to attēlus.
boxes:writeIzveidot, mainīt un dzēst telpas; iesniegt un atsaukt tās.
images:writeAugšupielādēt un dzēst telpu un lokāciju attēlus.

Izsaukums bez vajadzīgajām tiesībām tiek atbildēts ar 403, un trūkstošās tiesības ir norādītas required_scope.

Trūkstošas tiesības
curl -X POST "$API/v1/boxes" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Box",
  "location_id": "9d80d5f4-d17a-4f3e-99f6-4ab43b132bc3"
}'
403 Forbidden
{
  "type": "https://api.boxlatvia.lv/problems/insufficient-scope",
  "title": "Forbidden",
  "status": 403,
  "detail": "This operation needs the scope boxes:write.",
  "request_id": "d504c7e6-8458-456a-884d-0b4ba02be2d3",
  "required_scope": "boxes:write"
}

#Piekļuves datu ierobežojumi

#Neveiksmīgi pieteikšanās mēģinājumi

Pēc 10 neveiksmīgām autentifikācijām 5 minūšu laikā no vienas IP adreses turpmākie izsaukumi no šīs adreses tiek atbildēti ar 429 un galveni Retry-After (sekundēs), līdz laika logs paiet. Neatkārtojiet 401 ciklā.

Bloķēts
curl "$API/v1/me" \
  -u "$CLIENT_ID:$CLIENT_SECRET"
429 Too Many RequestsRetry-After: 300
{
  "type": "https://api.boxlatvia.lv/problems/too-many-requests",
  "title": "Too many requests",
  "status": 429,
  "detail": "Too many failed authentication attempts. Try again later.",
  "request_id": "88b1f62d-3509-4d1f-b542-ff67a35787ae"
}

#Noslēpuma drošība