Yêu cầu - Xác thực

Chương này sẽ thảo luận về các loại xác thực có sẵn trong mô-đun Yêu cầu.

Chúng ta sẽ thảo luận về những điều sau -

  • Làm việc xác thực trong các yêu cầu HTTP
  • Xác thực cơ bản
  • Xác thực thông báo
  • Xác thực OAuth2

Làm việc xác thực trong các yêu cầu HTTP

Xác thực HTTP ở phía máy chủ yêu cầu một số thông tin xác thực như tên người dùng, mật khẩu khi máy khách yêu cầu URL. Đây là bảo mật bổ sung cho yêu cầu và phản hồi được trao đổi giữa máy khách và máy chủ.

Từ phía máy khách, những thông tin xác thực bổ sung này, tức là tên người dùng và mật khẩu có thể được gửi trong tiêu đề, sau này ở phía máy chủ sẽ được xác thực. Phản hồi sẽ chỉ được gửi từ phía máy chủ khi xác thực hợp lệ.

Thư viện yêu cầu có xác thực được sử dụng phổ biến nhất trong request.auth , đó là Xác thực cơ bản ( HTTPBasicAuth ) và Xác thực thông báo ( HTTPDigestAuth ).

Xác thực cơ bản

Đây là hình thức cung cấp xác thực đơn giản nhất cho máy chủ. Để làm việc với xác thực cơ bản, chúng tôi sẽ sử dụng lớp HTTPBasicAuth có sẵn với thư viện yêu cầu.

Thí dụ

Đây là một ví dụ làm việc về cách sử dụng nó.

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)

Chúng tôi đang gọi url, https://httpbin.org/basic-auth/admin/admin123với người dùng là quản trị viên và mật khẩu là admin123 .

Vì vậy, URL này sẽ không hoạt động nếu không có xác thực, tức là người dùng và mật khẩu. Sau khi bạn cung cấp xác thực bằng cách sử dụng thông số xác thực, thì chỉ máy chủ mới đưa ra phản hồi.

Đầu ra

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

Xác thực thông báo

Đây là một hình thức xác thực khác có sẵn với các yêu cầu. Chúng tôi sẽ sử dụng lớp HTTPDigestAuth từ các yêu cầu.

Thí dụ

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)

Đầu ra

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

Xác thực OAuth2

Để sử dụng Xác thực OAuth2, chúng tôi cần thư viện “request_oauth2”. Để cài đặt “request_oauth2”, hãy làm như sau:

pip install requests_oauth2

Màn hình hiển thị trong thiết bị đầu cuối của bạn trong khi cài đặt sẽ như hình dưới đây -

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

Chúng tôi đã cài đặt xong “request-oauth2”. Để sử dụng API của Google, Twitter, chúng tôi cần sự đồng ý của nó và điều này cũng được thực hiện bằng xác thực OAuth2.

Để xác thực OAuth2, chúng tôi sẽ cần ID ứng dụng khách và Khóa bí mật. Chi tiết về cách lấy nó, được đề cập trênhttps://developers.google.com/identity/protocols/OAuth2.

Sau đó, đăng nhập vào Bảng điều khiển API của Google có sẵn tại https://console.developers.google.com/và lấy id khách hàng và khóa bí mật.

Thí dụ

Đây là một ví dụ về cách sử dụng "yêu cầu-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)

Chúng tôi sẽ không thể chuyển hướng đến URL đã cho, vì nó cần đăng nhập vào tài khoản Gmail, nhưng ở đây, bạn sẽ thấy từ ví dụ, rằng google_auth hoạt động và URL được ủy quyền được cung cấp.

Đầu ra

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