from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 là OAuth 2. x cho Python, có thể lấy, làm mới và thu hồi mã thông báo từ bất kỳ OAuth2 nào. Máy chủ ủy quyền tuân thủ x/OIDC. Nó nằm trên và mở rộng mô-đun máy khách HTTP yêu cầu nổi tiếng
Nó có thể hoạt động như một OAuth 2. 0 / 2. 1 khách hàng, để tự động nhận và gia hạn Mã thông báo truy cập, dựa trên Thông tin đăng nhập của khách hàng, Mã ủy quyền, Mã thông báo làm mới, Trao đổi mã thông báo, Ủy quyền thiết bị hoặc trợ cấp CIBA
Nó cũng hỗ trợ OpenID Connect 1. 0, PKCE, Xác nhận ứng dụng khách, Thu hồi mã thông báo và Xem xét nội quan, Chỉ báo tài nguyên, Yêu cầu ủy quyền được bảo đảm bởi JWT, Yêu cầu ủy quyền được đẩy, Nhận dạng nhà phát hành máy chủ ủy quyền cũng như sử dụng thông số tùy chỉnh cho bất kỳ điểm cuối nào và các tính năng quan trọng khác thường bị bỏ qua trong các phần mềm khác
Và nó cũng bao gồm một trình bao bọc xung quanh các yêu cầu. Phiên giúp sử dụng API kiểu REST cực kỳ dễ dàng, có hoặc không có OAuth 2. x
Xin lưu ý rằng mặc dù có tên, thư viện này không có mối quan hệ nào với thư viện oauth2client của Google
Tài liệu mô-đun đầy đủ có sẵn tại https. //guillp. github. io/requests_oauth2client/
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 có sẵn từ PyPi, vì vậy việc cài đặt nó dễ dàng như
pip install requests_oauth2client
Mọi thứ từ
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 đều có sẵn từ mô-đun gốc, vì vậy bạn có thể nhập nó như thế này
from requests_oauth2client import *
Lưu ý rằng điều này sẽ tự động nhập
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]8, vì vậy bạn không cần phải tự nhập nó
Gọi API bằng Mã thông báo truy cập
Nếu bạn đã quản lý để lấy mã thông báo truy cập, bạn chỉ cần sử dụng Trình xử lý xác thực BearerAuth cho các yêu cầu
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]
Trình xử lý xác thực này sẽ thêm tiêu đề
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]9 được định dạng đúng vào yêu cầu, với mã thông báo truy cập của bạn theo RFC6750
Sử dụng OAuth2Client
OAuth2Client cung cấp một số phương pháp triển khai giao tiếp đến các điểm cuối khác nhau được chuẩn hóa bởi OAuth 2. 0 và các phần mở rộng của nó. Các điểm cuối đó bao gồm Điểm cuối mã thông báo, Điểm cuối thu hồi, Introspection, UserInfo, BackChannel Authentication và Device Authorization. Bạn chỉ phải cung cấp những thứ đó nếu bạn có ý định sử dụng chúng
Để khởi tạo OAuth2Client, bạn chỉ cần URI điểm cuối mã thông báo và thông tin đăng nhập cho ứng dụng của bạn, thường là
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]0 và
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]1
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]0
Điểm cuối mã thông báo là điểm cuối duy nhất bắt buộc phải nhận mã thông báo. Thông tin đăng nhập được sử dụng để xác thực ứng dụng khách mỗi khi nó gửi yêu cầu đến Máy chủ ủy quyền của nó. Thông thường, đó là ID ứng dụng khách tĩnh và Bí mật, tương đương trực tiếp với tên người dùng và mật khẩu, nhưng dành cho ứng dụng thay vì dành cho người dùng. Phương thức xác thực mặc định được sử dụng bởi
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]2 là Client Secret Post, nhưng các phương thức tiêu chuẩn hóa khác như Client Secret Basic, Client Secret JWT hoặc Private Key JWT cũng được hỗ trợ. Xem thêm về các phương thức xác thực ứng dụng khách bên dưới
Nhận mã thông báo
OAuth2Client có các phương thức gửi yêu cầu đến Điểm cuối mã thông báo bằng cách sử dụng các khoản trợ cấp được tiêu chuẩn hóa [và/hoặc tùy chỉnh] khác nhau. Vì điểm cuối mã thông báo và phương thức xác thực đã được khai báo cho máy khách tại thời điểm bắt đầu, nên các tham số bắt buộc duy nhất là những thông số sẽ được gửi trong yêu cầu tới Điểm cuối mã thông báo
Các phương thức đó trực tiếp trả về BearerToken nếu yêu cầu thành công hoặc đưa ra ngoại lệ nếu yêu cầu không thành công. BearerToken sẽ quản lý việc hết hạn mã thông báo, sẽ chứa mã thông báo làm mới cuối cùng khớp với mã thông báo truy cập và cũng sẽ theo dõi các siêu dữ liệu được liên kết khác. Bạn có thể tự tạo BearerToken như vậy nếu cần
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]
Lưu ý rằng chỉ báo
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]3 ở đây không tĩnh. Nó theo dõi thời gian tồn tại của mã thông báo và được tính khi thời gian trôi qua. Ngày hết hạn tĩnh thực tế có thể truy cập được với thuộc tính
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]4. Bạn có thể kiểm tra xem mã thông báo có hết hạn hay không với bearer_token. hết hạn[]
Bạn có thể sử dụng phiên bản BearerToken ở bất kỳ đâu mà bạn có thể cung cấp access_token dưới dạng chuỗi
Sử dụng OAuth2Client làm Trình xử lý xác thực yêu cầu
Mặc dù sử dụng trực tiếp OAuth2Client rất tốt để thử nghiệm hoặc gỡ lỗi OAuth2. x, đây không phải là tùy chọn khả thi cho các ứng dụng thực tế trong đó phải lấy mã thông báo, sử dụng trong suốt thời gian tồn tại của chúng rồi lấy lại hoặc làm mới sau khi hết hạn.
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 chứa một số yêu cầu Trình xử lý xác thực tương thích [dưới dạng các lớp con của yêu cầu. xác thực. AuthBase], sẽ đảm nhận việc lấy mã thông báo khi được yêu cầu, sau đó sẽ lưu trữ các mã thông báo đó cho đến khi chúng hết hạn và sẽ nhận mã thông báo mới [hoặc làm mới chúng khi có thể], sau khi mã thông báo ban đầu hết hạn. Chúng được sử dụng tốt nhất với một yêu cầu. Phiên hoặc ApiClient, là trình bao bọc xung quanh
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]6 với một vài cải tiến như được mô tả bên dưới
Cấp chứng chỉ khách hàng
Để gửi yêu cầu bằng cách sử dụng cấp Thông tin xác thực ứng dụng khách, hãy sử dụng tên thích hợp. phương thức client_credentials[], với các tham số để gửi yêu cầu mã thông báo dưới dạng tham số từ khóa
Các tham số như
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]7,
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]8 hoặc
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]9 có thể được AS yêu cầu có thể được chuyển dưới dạng tham số từ khóa. Chúng sẽ được bao gồm trong yêu cầu mã thông báo được gửi tới AS
Là người xử lý xác thực
Bạn có thể sử dụng trình xử lý xác thực OAuth2ClientCredentialsAuth. Nó nhận OAuth2Client làm tham số và kwargs bổ sung để chuyển đến điểm cuối mã thông báo
pip install requests_oauth2client1
Một lần nữa, các tham số bổ sung như
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]7,
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]8 hoặc
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]9 được cho phép nếu cần
Khi bạn gửi yêu cầu đầu tiên của mình, OAuth2ClientCredentialsAuth sẽ tự động truy xuất mã thông báo truy cập từ AS bằng cách sử dụng cấp Chứng chỉ ứng dụng khách, sau đó sẽ đưa nó vào yêu cầu. Các yêu cầu tiếp theo sẽ sử dụng cùng một mã thông báo, miễn là hợp lệ. Mã thông báo mới sẽ được tự động truy xuất sau khi mã thông báo trước đó hết hạn
Cấp mã ủy quyền
Nhận mã thông báo với cấp mã Ủy quyền được thực hiện theo 3 bước
ứng dụng của bạn phải mở url cụ thể được gọi là Yêu cầu xác thực trong trình duyệt
ứng dụng của bạn phải lấy và xác thực Phản hồi ủy quyền, đây là chuyển hướng quay lại ứng dụng của bạn có chứa Mã ủy quyền làm tham số
sau đó, ứng dụng của bạn phải trao đổi Mã ủy quyền này để lấy Mã thông báo truy cập, với yêu cầu tới Điểm cuối mã thông báo
OAuth2Client không triển khai bất kỳ thứ gì liên quan đến Yêu cầu cấp phép hoặc Phản hồi. Chỉ có thể đổi Mã ủy quyền lấy Mã thông báo ở bước 3. Nhưng
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 có các lớp khác để giúp bạn thực hiện bước 1 và 2, như được mô tả bên dưới
Tạo yêu cầu ủy quyền
Bạn có thể tạo các yêu cầu ủy quyền hợp lệ với lớp AuthorizationRequest
pip install requests_oauth2client6
Yêu cầu này sẽ trông như thế này [với các ngắt dòng chỉ dành cho mục đích hiển thị]
pip install requests_oauth2client7
AuthorizationRequest hỗ trợ PKCE và sử dụng nó theo mặc định. Bạn có thể tránh nó bằng cách chuyển
pip install requests_oauth2client14 tới AuthorizationRequest. Bạn có thể lấy code_verifier được tạo từ
pip install requests_oauth2client15
Chuyển hướng hoặc gửi người dùng đến url này là trách nhiệm của ứng dụng của bạn, cũng như lấy url Phản hồi ủy quyền
Xác thực phản hồi ủy quyền
Sau khi người dùng được xác thực và ủy quyền thành công, AS sẽ phản hồi bằng cách chuyển hướng đến redirect_uri của bạn. Đó là Phản hồi ủy quyền. Nó chứa một số tham số mà khách hàng của bạn phải truy xuất. Mã ủy quyền là một trong những thông số đó, nhưng bạn cũng phải xác thực rằng trạng thái phù hợp với yêu cầu của bạn. Bạn có thể làm điều này với
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]0
Đổi mã lấy token
Để trao đổi mã lấy Access và/hoặc mã thông báo ID, hãy sử dụng OAuth2Client. phương thức ủy quyền_code[]. Nếu bạn đã nhận được Phản hồi ủy quyền như được mô tả ở trên, bạn chỉ cần thực hiện
from requests_oauth2client import *0
Điều này sẽ tự động bao gồm các tham số
pip install requests_oauth2client16,
pip install requests_oauth2client17 và
pip install requests_oauth2client18 trong Yêu cầu mã thông báo, như mong đợi của AS
Nếu bạn quản lý một cách khác để lấy Mã ủy quyền, bạn có thể chuyển các tham số đó theo cách thủ công như thế này
from requests_oauth2client import *1
Là người xử lý xác thực
Trình xử lý OAuth2AuthorizationCodeAuth lấy OAuth2Client và mã ủy quyền làm tham số, cộng với bất kỳ tham số từ khóa bổ sung nào được yêu cầu bởi Máy chủ ủy quyền của bạn
from requests_oauth2client import *2
OAuth2AuthorizationCodeAuth sẽ tự động làm mới mã thông báo sau khi hết hạn bằng cách sử dụng mã thông báo làm mới, nếu có
Cấp phép thiết bị
Người trợ giúp cho Cấp phép thiết bị cũng được bao gồm. Để lấy mã thiết bị và mã người dùng
from requests_oauth2client import *3
pip install requests_oauth2client19 chứa Mã thiết bị, Mã người dùng, URI xác minh và thông tin khác do AS trả về
from requests_oauth2client import *4
Gửi/hiển thị Uri xác minh và Mã người dùng cho người dùng. Anh ta phải sử dụng trình duyệt để truy cập url đó, xác thực và nhập Mã người dùng. Sau đó, bạn có thể yêu cầu điểm cuối Mã thông báo để kiểm tra xem người dùng đã ủy quyền thành công cho bạn bằng OAuth2Client hay chưa
from requests_oauth2client import *5
Điều này sẽ đưa ra một ngoại lệ, AuthorizationPending, SlowDown, ExpiredToken hoặc AccessDenied nếu người dùng chưa hoàn tất việc cấp quyền cho thiết bị của bạn, nếu bạn nên tăng thời gian gộp của mình hoặc nếu mã thiết bị không còn hợp lệ hoặc cuối cùng người dùng đã từ chối yêu cầu của bạn. . Các ngoại lệ khác có thể được đưa ra tùy thuộc vào mã lỗi mà AS phản hồi. Nếu người dùng đã hoàn tất ủy quyền thành công,
pip install requests_oauth2client60 sẽ chứa mã thông báo truy cập của bạn
Để làm cho việc tổng hợp dễ dàng hơn, bạn có thể sử dụng DeviceAuthorizationPoolingJob như thế này
from requests_oauth2client import *6
DeviceAuthorizationPoolingJob sẽ tự động tuân theo thời gian tổng hợp. Mỗi khi bạn gọi pool_job[], nó sẽ đợi số giây thích hợp do AS chỉ định và sẽ áp dụng các yêu cầu slow_down
Là người xử lý xác thực
Sử dụng OAuth2DeviceCodeAuth làm trình xử lý xác thực để đổi mã thiết bị lấy mã thông báo truy cập
from requests_oauth2client import *7
Xác thực BackChannel do khách hàng khởi xướng [CIBA]
Để bắt đầu Xác thực BackChannel đối với điểm cuối chuyên dụng
from requests_oauth2client import *8
pip install requests_oauth2client61 sẽ chứa các thuộc tính phản hồi do AS trả về, bao gồm một
pip install requests_oauth2client62
from requests_oauth2client import *9
Để gộp Điểm cuối mã thông báo cho đến khi người dùng cuối xác thực thành công
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]0
Các gợi ý của AS để làm chậm quá trình tổng hợp sẽ tự động được tuân theo
Trao đổi mã thông báo
Để gửi yêu cầu trao đổi mã thông báo, hãy sử dụng OAuth2Client. phương thức token_exchange[]
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]1
Cũng như các phương thức cụ thể cho loại cấp phép khác, bạn có thể chỉ định các tham số từ khóa bổ sung sẽ được chuyển đến điểm cuối mã thông báo, bao gồm mọi thuộc tính được tiêu chuẩn hóa như
pip install requests_oauth2client63 hoặc
pip install requests_oauth2client64 hoặc bất kỳ tham số tùy chỉnh nào. Có các tên viết tắt cho các loại mã thông báo, sẽ được dịch tự động sang các loại được tiêu chuẩn hóa
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]2
Hoặc để làm cho nó dễ dàng hơn, các loại có thể được đoán dựa trên mã thông báo chủ thể hoặc diễn viên được cung cấp
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]3
Các phương thức xác thực ứng dụng khách được hỗ trợ
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 hỗ trợ một số phương thức xác thực ứng dụng khách, như được định nghĩa trong nhiều OAuth2. tiêu chuẩn x. Bạn chọn phương pháp thích hợp để sử dụng khi khởi tạo OAuth2Client của mình, với tham số
pip install requests_oauth2client66. Sau khi được khởi tạo, ứng dụng khách sẽ tự động sử dụng phương thức xác thực đã định cấu hình mỗi khi gửi yêu cầu đến điểm cuối yêu cầu xác thực ứng dụng khách. Bạn không có việc gì khác để làm sau đó
Bí mật khách hàng cơ bản
Với client_secret_basic,
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]0 và
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]1 được bao gồm trong văn bản rõ ràng trong tiêu đề
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]9 khi gửi yêu cầu đến Điểm cuối mã thông báo. Để sử dụng nó, chỉ cần chuyển tham số
pip install requests_oauth2client70 dưới dạng tham số
pip install requests_oauth2client66
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]4
Bài viết bí mật của khách hàng
Với client_secret_post,
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]0 và
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]1 được bao gồm như một phần của dữ liệu biểu mẫu cơ thể. Để sử dụng nó, hãy chuyển một tham số
pip install requests_oauth2client74 dưới dạng
pip install requests_oauth2client66. Đây là giá trị mặc định khi bạn chuyển một tuple
pip install requests_oauth2client76 thành
pip install requests_oauth2client66 khi khởi tạo một
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]2
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]5
Bí mật khách hàng JWT
Với client_secret_jwt, ứng dụng khách tạo xác nhận JWT tạm thời bao gồm thông tin về chính nó [client_id], AS [url của điểm cuối] và ngày hết hạn sau vài giây trong tương lai. Để sử dụng nó, hãy chuyển một tham số
pip install requests_oauth2client79 dưới dạng
pip install requests_oauth2client66. Việc tạo xác nhận hoàn toàn tự động, bạn không phải làm gì
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]6
Phương pháp này an toàn hơn 2 phương pháp trước, vì chỉ thông tin đăng nhập tạm thời được truyền đi, điều này hạn chế khả năng chặn và phát lại Bí mật khách hàng. Nhưng Bí mật khách hàng đó vẫn cần được chia sẻ giữa [các] chủ sở hữu AS và Khách hàng
Khóa riêng JWT
Với private_key_jwt, khách hàng sử dụng xác nhận JWT giống như client_secret_jwt, nhưng nó được ký bằng khóa bất đối xứng. Để sử dụng nó, bạn cần có khóa ký riêng, trong một
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]01 khớp với định dạng JWK hoặc dưới dạng một phiên bản của
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]02. Khóa công khai phù hợp phải được đăng ký cho ứng dụng khách của bạn ở phía AS. Khi bạn đã có điều đó, việc sử dụng phương thức xác thực này rất đơn giản với trình xử lý xác thực
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]03
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]7
Phương pháp này có thể được coi là an toàn hơn so với những phương pháp dựa vào bí mật của khách hàng, bởi vì chỉ những thông tin đăng nhập tạm thời mới được gửi qua dây và nó sử dụng mật mã bất đối xứng. khóa ký được tạo bởi máy khách và chỉ có khóa chung được biết bởi AS. Việc truyền khóa công khai đó giữa [các] chủ sở hữu của máy khách và của AS dễ dàng hơn nhiều so với việc truyền Bí mật ứng dụng khách, đây là khóa dùng chung phải được coi là bí mật
Không có
Phương thức xác thực máy khách mới nhất, không có, dành cho Máy khách công khai không xác thực với Điểm cuối mã thông báo. Những khách hàng đó chỉ bao gồm
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]0 của họ trong dữ liệu biểu mẫu cơ thể mà không có bất kỳ thông tin xác thực nào. Sử dụng
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]05
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]8
Thu hồi mã thông báo
OAuth2Client có thể gửi yêu cầu thu hồi tới Điểm cuối thu hồi. Bạn cần cung cấp URI điểm cuối thu hồi khi tạo OAuth2Client
import requests from requests_oauth2client import BearerToken token = "an_access_token" resp = requests.get["//my.protected.api/endpoint", auth=BearerAuth[token]]9
OAuth2Client. phương thức thu hồi_token[] và các bí danh chuyên biệt của nó. thu hồi_access_token[] và. thu hồi_refresh_token[] sau đó có sẵn
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]00
Vì các Điểm cuối Thu hồi thường không trả về các phản hồi có ý nghĩa nên các phương thức đó trả về một giá trị boolean. Boolean này chỉ ra rằng một yêu cầu đã được gửi thành công và không có lỗi nào được trả về. Nếu Máy chủ ủy quyền thực sự trả về một lỗi đã chuẩn hóa, thay vào đó, một ngoại lệ sẽ được đưa ra
Xem xét nội quan mã thông báo
OAuth2Client có thể gửi yêu cầu đến Điểm cuối nội quan mã thông báo. Bạn cần cung cấp URI điểm cuối Introspection khi tạo
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]2
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]01
OAuth2Client. phương pháp introspect_token[] sau đó khả dụng
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]02
Nó trả về bất kỳ dữ liệu nào được trả về bởi điểm cuối nội quan [nếu đó là JSON, nội dung của nó được giải mã trả về]
Yêu cầu thông tin người dùng
OAuth2Client có thể gửi yêu cầu đến Điểm cuối UserInfo. Bạn cần cung cấp URI điểm cuối UserInfo khi tạo
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]2
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]03
OAuth2Client. phương thức userinfo[]] sau đó khả dụng
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]04
Nó trả về bất kỳ dữ liệu nào được trả về bởi điểm cuối userinfo [nếu đó là JSON, nội dung của nó được giải mã trả về]
Đang khởi tạo OAuth2Client từ tài liệu khám phá
Bạn có thể khởi tạo OAuth2Client bằng URI điểm cuối được đề cập trong tài liệu khám phá được tiêu chuẩn hóa với OAuth2Client. Phương thức lớp from_Discovery_endpoint[]
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]05
Thao tác này sẽ tìm nạp tài liệu từ URI đã chỉ định, sau đó sẽ giải mã nó và khởi tạo một OAuth2Client trỏ đến URI điểm cuối thích hợp
Ứng dụng khách API chuyên dụng
Việc sử dụng API thường liên quan đến nhiều điểm cuối trong cùng một url gốc, với một phương thức xác thực chung. Để dễ dàng hơn,
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 bao gồm một yêu cầu. Trình bao bọc phiên có tên là ApiClient, lấy url API gốc làm tham số khi khởi tạo. Sau đó, bạn có thể gửi yêu cầu đến các điểm cuối khác nhau bằng cách chuyển đường dẫn tương đối của chúng thay vì url đầy đủ. ApiClient cũng chấp nhận tham số
pip install requests_oauth2client66 với AuthHandler. Bạn có thể chuyển bất kỳ Trình xử lý xác thực OAuth2 nào từ mô-đun này hoặc bất kỳ Trình xử lý xác thực tương thích với yêu cầu nào. Điều này giúp dễ dàng gọi các API được bảo vệ bằng Cấp chứng chỉ ứng dụng khách OAuth2
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]06
Lưu ý rằng ApiClient sẽ không bao giờ gửi yêu cầu "bên ngoài" url gốc đã định cấu hình của nó, trừ khi bạn cung cấp cụ thể cho nó một url đầy đủ tại thời điểm yêu cầu.
from requests_oauth2client import *00 hàng đầu trong
from requests_oauth2client import *01 ở trên là tùy chọn. Một
from requests_oauth2client import *00 dẫn đầu sẽ không "đặt lại" đường dẫn url về thư mục gốc, điều đó có nghĩa là bạn cũng có thể viết đường dẫn tương đối mà không có
from requests_oauth2client import *00 và nó sẽ tự động được đưa vào
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]07
Bạn cũng có thể chuyển đường dẫn dưới dạng chuỗi có thể lặp lại [hoặc đối tượng có thể chuỗi], trong trường hợp đó, chúng sẽ được nối với một
from requests_oauth2client import *00 và được thêm vào đường dẫn url
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]08
Bạn cũng có thể sử dụng cú pháp dựa trên
from requests_oauth2client import *05 hoặc
from requests_oauth2client import *06
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]09
Cả
from requests_oauth2client import *05 và
from requests_oauth2client import *06 đều trả về một
from requests_oauth2client import *09 mới được khởi tạo trên base_url mới. Vì vậy, bạn có thể dễ dàng gọi nhiều tài nguyên phụ trên cùng một API theo cách này
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]0
Theo mặc định, ApiClient sẽ đưa ra các ngoại lệ bất cứ khi nào yêu cầu trả về trạng thái lỗi. Bạn có thể vô hiệu hóa điều đó bằng cách vượt qua
from requests_oauth2client import *10 khi khởi tạo ApiClient của mình
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]1
Bạn có thể ghi đè điều này tại thời điểm yêu cầu
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]2
Bạn có thể truy cập vào
from requests_oauth2client import *11 bên dưới bằng thuộc tính phiên và bạn có thể cung cấp một phiên bản
token = oauth2client.client_credentials[scope="myscope", resource="//myapi.local"]6 đã tồn tại và được định cấu hình tại thời điểm ban đầu
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]3
Khách hàng dành riêng cho nhà cung cấp
from requests_oauth2client import BearerToken bearer_token = BearerToken[access_token="an_access_token", expires_in=60] print[bearer_token] # {'access_token': 'an_access_token', # 'expires_in': 55, # 'token_type': 'Bearer'} print[bearer_token.expires_at] # datetime.datetime[2021, 8, 20, 9, 56, 59, 498793] assert not bearer_token.is_expired[]5 đủ linh hoạt để xử lý hầu hết các trường hợp sử dụng, bạn sẽ có thể sử dụng bất kỳ AS nào của bất kỳ nhà cung cấp nào miễn là nó hỗ trợ OAuth 2. 0
Tuy nhiên, bạn có thể tạo một lớp con của OAuth2Client hoặc ApiClient để sử dụng dễ dàng hơn với Máy chủ ủy quyền hoặc API cụ thể. Mô-đun con
from requests_oauth2client import *14 bao gồm các lớp như vậy cho Auth0