hades Posted September 5, 2015 Report Posted September 5, 2015 Oauth este un standard de autorizare ce permite generarea de access token-uri catre third party-uri de catre server. Clientul poate folosi apoi acest access token pentru a accesa resursele hostate pe server.Va puteti intalni cu protocolu' asta in special daca vreti sa lucrati cu API-urile retelelor sociale (Facebook, Twitter, Instagram, etc.); protocolul fiind folosit pentru a evita expunerea parolei in momentul autorizarii clientului.Bun, mai jos o sa-ncerc sa explic putin flow-ul necesar pentru a genera un astfel de token. Motivul principal al acestui tutorial, este faptul ca, am vazut tot mai multa lume interesata de modalitati de colectare a datelor de pe siteurile de socialiare (poze de pe twitter, instagram etc.)De dragul exemplificarii, o sa vorbesc despre generatea de access token pentru Facebook/Instagram:1. Avem nevoie de un App create pe facebook/instagram:App-ul ne pune la dispozitie un set de key: client_id si client_secret ce le vom folosi pentru construirea url-ului de autorizare:def generate_facebook_authorize_url(app_id, callback_url): scope = ','.join(FacebookScope.__ALL__) return FB_GRAPH_URL + 'oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}'.format( app_id, callback_url, scope )2. Scope. WTF is scope?Dupa cum se poate observa mai sus, in momentul generarii URL-ului de autorizare, trimitem ca si parametru SCOPE. Scope-ul defineste oarecum permisiunile ce le acordam tokenului; Altfel spus, prin scope instintam utilizatorul cu privire la actiunile ce ne va permite sa le facem prin intermediul tokenului lui.Pentru codul de mai sus, am facut o clasa FacebookScope care arata cam asa:class FacebookScope(object): USER_EMAIL = 'email' USER_PUBLISH = 'publish_actions' __ALL__ = [USER_EMAIL, USER_PUBLISH]3. Redirect URI. What and why?Redirect uri-ul trimis la pasul 1 este locul in care vom primi raspuns de la server dupa ce utilizatorul a terminat de 'aprobat' connectarea cu aplicatia noastra. Flow-ul general este acesta:post request authorize_url -> clientul autorizeaza aplicatia -> facebook returneza un code pe redirect_uriFolosind metoda aceasta, ne asiguram ca vom genera un long-lived access_token.4. Codul primis trebuie schimbat pentru token.Dupa cum spuneam, in momentul in care serverul ne intoarce un raspuns cu un cod, acesta trebuie schimbat pentru access_tokendef exchange_code_for_token(code, app_id, app_secret, callback_url): url = FB_GRAPH_URL + 'oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}'.\ format( app_id, callback_url, app_secret, code ) response = requests.get(url) return response.json().get('access_token')Tokenul generat astfel poate fi utilizat pentru interactionarea cu API-ul retelei sociale. Exemplul de mai sus face referire la Facebook Graph API insa logica folosita poate fi folosita pentru generarea oricarui OAuth2 access token.Intrebari si raspunsuri mai jos, daca sunteti curiosi de alte cele sau daca ceva nu e clar.P.S: Multe din aplicatiile virale de facebook care postau in locul vostru sau in locul prietenilor vostri foloseau procedeul de mai sus. Doar ca, daca nu acordati atentie asupra SCOPE-ului pentru care acordati acces unei aplicatii, puteti ajunge in situatii mai mult sau mai putin placute. 1 Quote