Autentificarea lui oauth2 în aplicație prin conectarea la Google

Autentificați OAuth2 în aplicație prin Google Sign-In. Acces permanent la API-ul Google +24

  • 03.04.17 10:28 •
  • marypodolyak •
  • # 325518
  • Habrahabr •
  • Din nisip •
  • 3 •
  • 4500

- la fel ca Forbes, doar mai bine.







Această metodă va fi discutată în lecție, precum și modul de obținere a jetoanelor necesare pentru a lucra cu API-ul Google.

În lecție va exista o traducere parțială a documentelor oficiale. Dar mai întâi un pic de fundal din practica mea și de a lucra mai întâi cu OAuth2, poate că cineva se va afla într-o situație similară.

Mi-a luat cererea de a primi o chat live de pe YouTube. Apoi am învățat că pentru a trimite cereri de difuzare (și numai după chat) este necesar să se efectueze autentificarea utilizatorilor OAuth2. Am început să mă uit. Informațiile pe această temă sunt foarte mici, sunt împrăștiate, nu sunt potrivite pentru cazul meu și bineînțeles totul era în limba engleză. Practic, informațiile au fost pentru a lucra cu cele mai populare API-uri: Drive, Cloud, Google Plus. În documentația oficială API YouTube există un cod gata, luați-l, dar pentru Android nu se potrivește. După ce am petrecut o perioadă considerabilă de timp, prin încercare și eroare, am ajuns la o soluție de lucru. Primul lucru pe care am vrut să fac după este de a aduna informații „într-o grămadă“ și sortare, prin care și spodviglo pentru a scrie acest tutorial.


Acesta nu este altceva decât o solicitare de postare, ca răspuns la care a apărut o pagină care conține authCode, iar codul se găsea în antetul paginii. Totul, ca recomandare pentru API, și acțiunile de ascundere a acestui cod de la utilizatorul lăsat la dezvoltator.

1. Obțineți acreditări

În Managerul API, creați un nou proiect (sau selectați unul existent):

Autentificarea lui oauth2 în aplicație prin conectarea la Google


Completați câmpurile cu numele aplicației și a pachetului. Apoi, selectați un conectare serviciu (Google Sign-In), aici trebuie să introduceți o cheie de aplicație SHA1, să-l simplu: Android Studio Gradle găsi fila, deschide fila Sarcini-android-signingReport. Facem clic de două ori și informațiile despre chei apar în jurnale. Vom găsi cheia SHA1, copiați-o.

Autentificarea lui oauth2 în aplicație prin conectarea la Google


Faceți clic pe butonul "Generați fișierul de configurare" și după "Descărcați google-services.json". Salvăm acest fișier json în directorul de proiect "app".

Important! Dacă doriți să publicați aplicația pe Google Play, va trebui să înlocuiți cheia de depanare SHA1 cu cheia de eliberare, respectiv să înlocuiți fișierul de configurare.

Mergem la managerul API, vedem că au fost generate cheile și identificatorii clienților OAuth. Avem nevoie doar de datele clientului web (client ID și client secret).







Autentificarea lui oauth2 în aplicație prin conectarea la Google

În fila "OAuth Access Request Window", puteți schimba numele e-mailului și al produsului - acesta este ceea ce va fi scris atunci când se solicită permisiunea "Solicitare aplicație ****: ..."

2. Configurarea clientului de conectare

Pentru a accesa Google Api Client, adăugați aplicația de gradare în dependențe:


Și plugin-ul (la sfârșitul fișierului):


În proiectul de șir de fișiere, în funcție de:


Aici cele mai interesante linii sunt:

requestServerAuthCode (getString (R.string.server_client_id)) - solicitați authCode, trecând parametrul la identificatorul clientului (toate pe deplin), care a fost obținut mai sus.

requestScopes (nou domeniu ("***")) - solicităm zona de acces / zona de acces necesară pentru API-ul utilizat. Există câteva domenii deja definite în Scopes, dar dacă nu ați găsit-o, puteți să întrebați cum, în cazul meu. Utilizatorul va fi afișat ca acces la ceea ce vrea să obțină aplicația.


Aici totul este în conformitate cu standardul din documentație:

enableAutoManage (acest lucru, acest lucru) - parametrii sunt transmise ascultătorului de activare și conexiune (implementăm interfața GoogleApiClient.OnConnectionFailedListener).

addApi (Auth.GOOGLE_SIGN_IN_API, gso) - specificați că folosim aplicația Sign In api și obiectul opțiune creat anterior.


Se pare ca aceasta:

În butonul de activare este definit ca toate celelalte vizualizări, am suspendat ascultător pe el și faceți clic pe metoda:


În parametru trecem mApiClientul configurat. RC_AUTH_CODE orice număr, ca întotdeauna, pentru a urmări rezultatul activării.

Autentificarea lui oauth2 în aplicație prin conectarea la Google


3. Obținerea codului Auth


Ca rezultat, obținem codul de auth ca un șir obișnuit, arată cam așa:

acct.getEmail ()
acct.getDisplayName ()
acct.getPhotoUrl ()

Este posibil ca aceste date să fie necesare, de exemplu, pentru a le introduce în NavigationView.

4. Obținerea unui Token de acces și a unui jet de reîmprospătare


Să analizăm parametrii mai detaliați. În Request.Builder () Treceți urlul prin care obținem jetoanele:


În antet, specificați Content-Type:


Indicăm că aceasta este metoda POST, o transmitem corpului:


Cererea generatăBody trebuie să conțină parametri:

"grant_type", "authorization_code" - indică faptul că vom trimite codul auth
"client_id", getString (R.string.server_client_id) - parametrul este id-ul clientului, obținut în Managerul API
"client_secret", getString (R.string.client_secret) - secretul clientului primit în API Manager
"code", authCode - codul real primit.

Interogarea este asincronă, în răspuns primim json-ul obișnuit cu toate datele necesare pentru lucrare:

5. Actualizarea jetoanelor de acces

Interogarea este în principiu aceeași ca în clauza 4, cu excepția câtorva parametri:


Iată parametrii importanți:

"grant_type", "refresh_token" - în tipul indică faptul că trimitem un jeton de reîmprospătare
"refresh_token", mRefreshToken - și simbolul în sine

Răspunsul este json, care conține un nou semn de acces, cu care puteți accesa din nou API-ul:

De exemplu, arăt cum arată solicitarea API-ului și, de asemenea, cum efectuez actualizarea tokenului.
Pentru a interoga API-ul, folosesc Retrofit2 + RxAndroid. Acesta este modul în care cererea de a primi un chat live arată:


Este important să rețineți aici că tipul de jeton și jetonul de acces propriu-zis trebuie să fie transmis în antet utilizând cheia de autorizare. Așa este:


Apoi, face o cerere prin RxAndroid, iar din onerror de apel invers vin tot felul de greșeli, vine, de asemenea HttpException codul de eroare 401 neautorizat după ore. Aici am trata, verificați pentru a vedea dacă aceasta este aceeași eroare, apoi se aduce la tipul corespunzător, verificați dacă este sau nu un cod de 401 și execută o metodă de obținere a unui nou simbol, iar apoi repetați cererea.


De asemenea, pentru a verifica tokenul, există o solicitare GET:


Ca răspuns, vor exista date despre token dacă acesta este încă activ sau o eroare dacă durata sa de viață a expirat.

Din nou, implementarea actualizării jetonului Google este lăsată de dezvoltator.

Vă recomandăm să verificați cererile într-o aplicație / o extensie terță parte, de exemplu Postman, înainte de a începe lucrul pentru a vă asigura că parametrii și răspunsurile primite sunt corecte. Voi fi foarte fericit dacă cineva va găsi lecția utilă!

Referințe la documentația folosită:







Articole similare

Trimiteți-le prietenilor: