Żądania - uwierzytelnianie

W tym rozdziale omówimy typy uwierzytelniania dostępne w module Żądania.

Omówimy następujące kwestie -

  • Praca z uwierzytelnianiem w żądaniach HTTP
  • Uwierzytelnianie podstawowe
  • Uwierzytelnianie Digest
  • Uwierzytelnianie OAuth2

Praca z uwierzytelnianiem w żądaniach HTTP

Uwierzytelnianie HTTP odbywa się po stronie serwera i pyta o pewne informacje uwierzytelniające, takie jak nazwa użytkownika i hasło, gdy klient żąda adresu URL. Jest to dodatkowe zabezpieczenie żądania i odpowiedzi wymienianej między klientem a serwerem.

Po stronie klienta te dodatkowe informacje uwierzytelniające, tj. Nazwa użytkownika i hasło, mogą być przesłane w nagłówkach, które później po stronie serwera zostaną sprawdzone. Odpowiedź zostanie dostarczona po stronie serwera tylko wtedy, gdy uwierzytelnienie jest prawidłowe.

Biblioteka żądań ma najczęściej używane uwierzytelnianie w request.auth , którymi są uwierzytelnianie podstawowe ( HTTPBasicAuth ) i uwierzytelnianie szyfrowane ( HTTPDigestAuth ).

Uwierzytelnianie podstawowe

To najprostsza forma uwierzytelnienia serwera. Do pracy z uwierzytelnianiem podstawowym będziemy używać klasy HTTPBasicAuth dostępnej z biblioteką requestów.

Przykład

Oto działający przykład, jak go używać.

import requests
from requests.auth import HTTPBasicAuth
response_data = 
requests.get('httpbin.org/basic-auth/admin/admin123', 
auth = HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

Wzywamy adres URL, https://httpbin.org/basic-auth/admin/admin123z użytkownikiem jako admin i hasłem jako admin123 .

Tak więc ten adres URL nie będzie działał bez uwierzytelnienia, tj. Użytkownika i hasła. Po podaniu uwierzytelnienia przy użyciu parametru autoryzacji tylko serwer zwróci odpowiedź.

Wynik

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

Uwierzytelnianie Digest

To kolejna forma uwierzytelniania dostępna przy żądaniach. Zamierzamy wykorzystać klasę HTTPDigestAuth z żądań.

Przykład

import requests
from requests.auth import HTTPDigestAuth
response_data = 
requests.get('https://httpbin.org/digest-auth/auth/admin/admin123', 
auth = HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

Wynik

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

Uwierzytelnianie OAuth2

Aby korzystać z uwierzytelniania OAuth2, potrzebujemy biblioteki „request_oauth2”. Aby zainstalować „request_oauth2”, wykonaj następujące czynności -

pip install requests_oauth2

Wyświetlacz w terminalu podczas instalacji będzie wyglądał tak, jak pokazano poniżej -

E:\prequests>pip install requests_oauth2
Collecting requests_oauth2
Downloading https://files.pythonhosted.org/packages/52/dc/01c3c75e6e7341a2c7a9
71d111d7105df230ddb74b5d4e10a3dabb61750c/requests-oauth2-0.3.0.tar.gz
Requirement already satisfied: requests in c:\users\xyz\appdata\local\programs
\python\python37\lib\site-packages (from requests_oauth2) (2.22.0)
Requirement already satisfied: six in c:\users\xyz\appdata\local\programs\pyth
on\python37\lib\site-packages (from requests_oauth2) (1.12.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xyz\appdata\local\programs\python\python37\lib\site-packages (from requests
->requests_oauth2) (1.25.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\xyz\appdata\loca
l\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (2
019.3.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xyz\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests->requests_oauth2)
(3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xyz\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests->requests_oauth2) (2.8)
Building wheels for collected packages: requests-oauth2
Building wheel for requests-oauth2 (setup.py) ... done
Stored in directory: C:\Users\xyz\AppData\Local\pip\Cache\wheels\90\ef\b4\43
3743cbbc488463491da7df510d41c4e5aa28213caeedd586
Successfully built requests-oauth2

Zakończyliśmy instalowanie „request-oauth2”. Aby korzystać z API Google, Twittera potrzebujemy jego zgody i to samo odbywa się przy użyciu uwierzytelniania OAuth2.

Do uwierzytelnienia OAuth2 będziemy potrzebować identyfikatora klienta i tajnego klucza. Szczegóły, jak to zdobyć, są wymienione nahttps://developers.google.com/identity/protocols/OAuth2.

Później zaloguj się do konsoli Google API, która jest dostępna pod adresem https://console.developers.google.com/i uzyskaj identyfikator klienta i tajny klucz.

Przykład

Oto przykład użycia „request-oauth2”.

import requests
from requests_oauth2.services import GoogleClient
google_auth = GoogleClient(
   client_id="xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
   redirect_uri="http://localhost/auth/success.html",
)
a = google_auth.authorize_url(
   scope=["profile", "email"],
   response_type="code",
)
res = requests.get(a)
print(res.url)

Nie będziemy mogli przekierować na podany adres URL, ponieważ wymaga on zalogowania się na konto Gmail, ale tutaj zobaczysz z przykładu, że google_auth działa i podany jest autoryzowany adres URL.

Wynik

E:\prequests>python oauthRequest.py
https://accounts.google.com/o/oauth2/auth?redirect_uri=
http%3A%2F%2Flocalhost%2Fauth%2Fsuccess.html&
client_id=xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&
scope=profile+email&response_type=code