Python yêu cầu ví dụ về OAuth

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

________số 8

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_oauth2client
1

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

  1. ứ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

  2. ứ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ố

  3. 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_oauth2client
6

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_oauth2client
7

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_oauth2client
14 tới AuthorizationRequest. Bạn có thể lấy code_verifier được tạo từ
pip install requests_oauth2client
15

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_oauth2client
16,
pip install requests_oauth2client
17 và
pip install requests_oauth2client
18 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_oauth2client
19 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_oauth2client
60 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_oauth2client
61 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_oauth2client
62

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_oauth2client
63 hoặc
pip install requests_oauth2client
64 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_oauth2client
66. 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_oauth2client
70 dưới dạng tham số
pip install requests_oauth2client
66

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_oauth2client
74 dưới dạng
pip install requests_oauth2client
66. Đây là giá trị mặc định khi bạn chuyển một tuple
pip install requests_oauth2client
76 thành
pip install requests_oauth2client
66 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_oauth2client
79 dưới dạng
pip install requests_oauth2client
66. 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_oauth2client
66 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

Chủ Đề