write:listings.
Înainte să începi
Înregistrează la Gridbeds URL-ul tău de redirecționare: pagina HTTPS publică la care browserul gazdei trimite token-ul. Înregistrează-l o dată pentru fiecare mediu, pentru că sandbox-ul și producția au fiecare propria evidență a canalului tău: site-ul tău de staging pe sandbox, site-ul live în producție.GET /channel îl dă pe cel din mediul cheii în owner_connect.redirect_url. Este null până îl înregistrezi, iar până atunci gazdele nu pot porni o conexiune cu canalul tău.
Pașii
1
Gazda pornește
Gazda pornește conectarea contului ei cu canalul tău din Gridbeds.
2
Browserul ei îți trimite token-ul
Gridbeds îi răspunde gazdei cu un formular HTML pe care browserul îl trimite imediat la URL-ul tău de redirecționare: un POST de formular (
application/x-www-form-urlencoded) al cărui singur câmp este token. Token-ul nu apare niciodată într-un URL, într-un jurnal de server, în istoricul browserului sau într-un Referer.3
Îl verifici și îl păstrezi pe server
Verifică token-ul ca mai jos și păstrează-l pe serverul tău, apoi răspunde cu un
303 către una dintre paginile tale. POST-ul vine de pe alt site, așa că browserul nu trimite odată cu el cookie-urile tale marcate SameSite=Lax sau Strict; pe pagina ta sesiunea gazdei este din nou disponibilă. Pentru un token invalid, expirat sau refolosit, arată o pagină care spune că legătura nu a reușit: gazda poate porni din nou din Gridbeds.4
Gazda se autentifică și confirmă
Lasă gazda să se autentifice sau să își facă un cont la tine (gazda își tastează acolo propria adresă de e-mail, dacă ai nevoie de una), apoi cere-i gazdei autentificate să confirme legătura pe pagina ta, arătând
display_name-ul proprietarului.5
Legi și confirmi
Leagă
sub-ul token-ului, un id de proprietar pe care îl ai din GET /owners, de acel cont și trimite token-ul la PUT /owners/{owner_id}/connection. connected_at al proprietarului este setat (owner.updated), iar gazda vede contul conectat în Gridbeds.Token-ul
Token-ul este un JWS în serializare compactă (RFC 7515; un JWT, RFC 7519), semnat cu ES256.
Verifică tot înainte să te bazezi pe vreo afirmație din el:
- Semnătura, cu cheia numită de
kidînGET /owner-connect/keys: un JWKS (RFC 7517) de chei publice EC P-256 pentru ES256, public, fără cheie de acces și limitat pe adresa clientului. Păstrează-l în cache cât spuneCache-Control-ul lui și cere-l din nou când un token numește unkidpe care nu îl ai. O cheie de semnare nouă este publicată cu cel puțin 24 de ore înainte să semneze, iar una retrasă rămâne publicată 24 de ore după ce nu mai semnează. algexactES256șitypexactowner-connect+jwt, refuzândnoneși orice altă valoare (RFC 8725).issșiaudca mai sus. Un token emis într-un mediu se verifică doar cuiss-ul și cheile acelui mediu.expîn viitor șiiatnu în viitor, cu o abatere a ceasului de cel mult 60 de secunde.subun proprietar care îți este distribuit.
Două termene
explimitează drumul prin browser. Este la cel mult 300 de secunde dupăiat, iar pagina ta de redirecționare acceptă token-ul doar înainte de el.- Confirmarea poate veni mai târziu, pentru că gazda poate fi nevoită să își facă întâi un cont.
PUT /owners/{owner_id}/connectionacceptă un token neconfirmat până la 3600 de secunde dupăiat-ul lui, și doar de la canalul numit înaud, cu cheia proprie a acelui canal. Între timp păstrează token-ul verificat pe server, niciodată într-o pagină sau într-un URL.
Refolosirea
Un token este de unică folosință. Păstrează fiecarejti acceptat până la exp-ul lui și refuză unul pe care l-ai mai văzut. Gridbeds leagă un token de singura conexiune pe care o confirmă: confirmarea lui din nou pentru același proprietar răspunde cu aceeași conexiune, iar orice altă folosire este refuzată.
Confirmă și șterge o conexiune
sub-ul token-ului trebuie să fie acest proprietar, aud-ul canalul tău, iar iat-ul de cel mult 3600 de secunde în urmă. Răspunsul este conexiunea, {owner_id, connected_at}. Un refuz este 400 invalid_parameters cu errors[].pointer /token și errors[].code token_invalid, token_expired, token_owner_mismatch sau token_used.
Când gazda deconectează contul la tine, trimite DELETE /owners/{owner_id}/connection: connected_at al proprietarului devine null (owner.updated), iar ștergerea unei conexiuni care nu există răspunde tot cu 204. connected_at devine null și când gazda se deconectează din Gridbeds, ceea ce ajunge la tine ca owner.updated.