Nhiều dịch vụ web yêu cầu xác thực và có nhiều loại khác nhau. Dưới đây, chúng tôi phác thảo các hình thức xác thực khác nhau có sẵn trong Yêu cầu, từ đơn giản đến phức tạp
Xác thực cơ bản
Nhiều dịch vụ web yêu cầu xác thực chấp nhận HTTP Basic Auth. Đây là loại đơn giản nhất và Yêu cầu hỗ trợ nó ngay lập tức
Yêu cầu với HTTP Basic Auth rất đơn giản
>>> from requests.auth import HTTPBasicAuth >>> basic = HTTPBasicAuth['user', 'pass'] >>> requests.get['//httpbin.org/basic-auth/user/pass', auth=basic]
Trên thực tế, Xác thực cơ bản HTTP phổ biến đến mức Yêu cầu cung cấp một cách viết tắt tiện dụng để sử dụng nó
>>> requests.get['//httpbin.org/basic-auth/user/pass', auth=['user', 'pass']]
Cung cấp thông tin đăng nhập trong một bộ dữ liệu như thế này hoàn toàn giống với ví dụ về HTTPBasicAuth
ở trên
xác thực netrc
Nếu không có phương thức xác thực nào được đưa ra với đối số auth
, Yêu cầu sẽ cố lấy thông tin đăng nhập xác thực cho tên máy chủ của URL từ tệp netrc của người dùng. Tệp netrc ghi đè các tiêu đề xác thực HTTP thô được đặt bằng headers=
Nếu thông tin đăng nhập cho tên máy chủ được tìm thấy, yêu cầu sẽ được gửi với HTTP Basic Auth
Xác thực thông báo
Một hình thức Xác thực HTTP rất phổ biến khác là Xác thực thông báo và Yêu cầu cũng hỗ trợ điều này ngay lập tức
>>> from requests.auth import HTTPDigestAuth >>> url = '//httpbin.org/digest-auth/auth/user/pass' >>> requests.get[url, auth=HTTPDigestAuth['user', 'pass']]
Xác thực OAuth 1
Một hình thức xác thực phổ biến cho một số API web là OAuth. Thư viện requests-oauthlib
cho phép người dùng Yêu cầu dễ dàng thực hiện các yêu cầu được xác thực OAuth 1
>>> import requests >>> from requests_oauthlib import OAuth1 >>> url = '//api.twitter.com/1.1/account/verify_credentials.json' >>> auth = OAuth1['YOUR_APP_KEY', 'YOUR_APP_SECRET', .. 'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET'] >>> requests.get[url, auth=auth]
Để biết thêm thông tin về cách hoạt động của luồng OAuth, vui lòng xem trang web chính thức của OAuth. Để biết các ví dụ và tài liệu về request-oauthlib, vui lòng xem kho lưu trữ request_oauthlib trên GitHub
Xác thực kết nối OAuth 2 và OpenID
Thư viện requests-oauthlib
cũng xử lý OAuth 2, cơ chế xác thực làm nền tảng cho OpenID Connect. Xem tài liệu về yêu cầu-oauthlib OAuth2 để biết chi tiết về các luồng quản lý thông tin xác thực OAuth 2 khác nhau
Xác thực khác
Yêu cầu được thiết kế để cho phép các hình thức xác thực khác được cắm dễ dàng và nhanh chóng. Các thành viên của cộng đồng nguồn mở thường xuyên viết các trình xử lý xác thực cho các hình thức xác thực phức tạp hơn hoặc ít được sử dụng hơn. Một số thứ tốt nhất đã được tập hợp lại dưới tổ chức Yêu cầu, bao gồm
Kerberos
NTLM
Nếu bạn muốn sử dụng bất kỳ hình thức xác thực nào trong số này, hãy truy cập thẳng vào trang GitHub của họ và làm theo hướng dẫn
Các hình thức xác thực mới
Nếu bạn không thể tìm thấy cách triển khai tốt hình thức xác thực mà mình muốn, bạn có thể tự triển khai hình thức đó. Yêu cầu giúp dễ dàng thêm các hình thức xác thực của riêng bạn
Để làm như vậy, hãy phân lớp và triển khai phương thức
>>> requests.get['//httpbin.org/basic-auth/user/pass', auth=['user', 'pass']]0
>>> import requests >>> class MyAuth[requests.auth.AuthBase]: .. def __call__[self, r]: .. # Implement my authentication .. return r ... >>> url = '//httpbin.org/get' >>> requests.get[url, auth=MyAuth[]]
Khi một trình xử lý xác thực được đính kèm với một yêu cầu, nó sẽ được gọi trong quá trình thiết lập yêu cầu. Do đó, phương thức
>>> requests.get['//httpbin.org/basic-auth/user/pass', auth=['user', 'pass']]1 phải làm bất cứ điều gì được yêu cầu để xác thực hoạt động. Một số hình thức xác thực sẽ bổ sung thêm móc để cung cấp thêm chức năng