Tự động đăng nhập OAuth2 Python

Trong bài viết này, chúng ta sẽ làm việc với 5 API khác nhau sử dụng các loại xác thực khác nhau. Chúng tôi sẽ sử dụng Python để sử dụng các API

Không phải tất cả các API đều được ghi chép đầy đủ như Twilio. Hướng dẫn này sẽ giúp bạn làm việc với các API được bảo mật bằng Keys, BasicAuth hoặc OAuth2

Chúng tôi sẽ làm việc với APIS sau

  • Sự thật về mèo
  • Cat as a Service [CAAS]
  • API Twilio
  • API GitHub
  • API thiên tài

Bạn có thể tìm mã nguồn ở đây

Mục lục

  • API không an toàn
  • Đọc các giá trị từ. tập tin env
  • API có khóa
  • API có xác thực cơ bản
  • Trình bao bọc API
  • Đối tượng phiên
  • API được bảo mật qua OAuth2
  • Sử dụng API GitHub [OAuth2]
  • Sử dụng API Genius [OAuth2]

Một số quen thuộc với thư viện yêu cầu dự kiến. Nếu bạn cần làm mới, bạn có thể tham khảo bài viết trước của tôi

API không an toàn

Cat Facts API không yêu cầu bất kỳ xác thực nào và khá đơn giản để làm việc với. Hãy tạo một yêu cầu đến điểm cuối sau

//cat-fact.herokuapp.com/facts

API trên trả về Sự kiện mèo ngẫu nhiên

import requests
api_endpoint = "//cat-fact.herokuapp.com/facts"
response = requests.get[
    api_endpoint
]
for idx, item in enumerate[response.json[]]:
    print[f"{idx+1}. {item['text']}"]

Đọc từ. tập tin env

Trước khi chuyển sang các phần tiếp theo, hãy xem cách đọc các biến từ một. tập tin env. Bạn nên lưu trữ thông tin đăng nhập của mình trong một. env để tránh chúng bị lộ cho người khác

Chúng ta sẽ cần cài đặt thư viện python-dotenv

pip install python-dotenv

Giả sử có một. env với một số Mã thông báo API ngẫu nhiên

API_TOKEN = "SOME API TOKEN"

Hãy thử đọc API Token trong Python

from dotenv import load_dotenv
import os 

load_dotenv[]
API_TOKEN = os.environ.get["API_TOKEN"]

Hàm get chấp nhận một tên biến được lưu trữ trong. tệp env làm đối số

API có khóa

Đây là hình thức xác thực phổ biến nhất khi sử dụng API. Khóa API/Mã thông báo được chuyển vào dưới dạng tiêu đề trong khi thực hiện yêu cầu. Chúng tôi sẽ làm việc với API Cat as a Service [CAAS]. Bạn có thể lấy chìa khóa tại đây

from dotenv import load_dotenv
import os 
import requests

api_endpoint = "//api.thecatapi.com/v1/breeds"

load_dotenv[]
CAT_API_KEY = os.environ.get["CAT_API_KEY"]

headers = {
    "x-api-key" : CAT_API_KEY
}
response = requests.get[
    api_endpoint,
    headers = headers
]

for idx, item in enumerate[response.json[]]:
    print[f"{idx+1}. {item['name']} : {item['description']}"]

Chúng tôi đã tạo một từ điển có tên là tiêu đề để lưu trữ Khóa API. Chìa khóa trong từ điển là “x-api-key”. Tuy nhiên, điều này có thể khác nhau dựa trên API bạn đang làm việc với. Một số API yêu cầu khóa được đặt tên là “Ủy quyền”, “ủy quyền”, “mã thông báo”. Tốt nhất là tham khảo phần xác thực tài liệu API của bạn

Bearer Authentication khá phổ biến và nó yêu cầu từ “Bearer” [lưu ý khoảng trắng] ở đầu Mã thông báo/Khóa API

headers = {
    "authorization": f"Bearer {access_token}"
}

Chúng tôi sẽ sử dụng xác thực người mang trong một ví dụ ở phần sau

API có xác thực cơ bản

API được bảo mật bằng Basic Auth yêu cầu tên người dùng và mật khẩu. Thông thường, tên người dùng là Client ID và mật khẩu là Client Secret của API. Trong một số trường hợp, tên người dùng có thể để trống. Điều này nên được đề cập trong tài liệu API

API Twilio được bảo mật bằng Basic Auth. Bạn có thể đăng ký trên trang web Twilio và có quyền truy cập vào thông tin đăng nhập API

from requests.auth import HTTPBasicAuth
from dotenv import load_dotenv
import os 
import requests

load_dotenv[]
TWILIO_ACCOUNT_SID = os.environ.get["TWILIO_ACCOUNT_SID"]
TWILIO_ACCOUNT_TOKEN = os.environ.get["TWILIO_ACCOUNT_TOKEN"]

api_endpoint = f'//api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Calls.json?PageSize=5'

auth = HTTPBasicAuth[TWILIO_ACCOUNT_SID, TWILIO_ACCOUNT_TOKEN]

response = requests.get[api_endpoint , auth = auth]

for idx, item in enumerate[response.json[]['calls']]:
    print[f"{idx+1}. {item['duration']}"]

Chúng tôi tạo một phiên bản HTTPBasicAuth. Nó lấy tên người dùng và mật khẩu tương ứng làm đối số. Trường hợp này được thông qua như một đối số khi thực hiện yêu cầu. Trong trường hợp twilio, tên người dùng là sid tài khoản của bạn và mật khẩu là mã thông báo tài khoản của bạn. Như đã đề cập trước đây, nó có thể khác nhau đối với các API khác nhau. Nếu API bạn đang sử dụng, sử dụng Basic Auth để bảo mật các điểm cuối của nó, hãy tham khảo tài liệu để biết tên người dùng và mật khẩu

Trình bao bọc API

Đối với Python, trình bao bọc API về cơ bản là các thư viện/gói có thể được cài đặt bằng pip. Các thư viện này giúp giao tiếp với các API theo cách rõ ràng hơn về mặt cú pháp. Dưới vỏ bọc, các thư viện vẫn sử dụng các yêu cầu và tiêu đề để thực hiện các yêu cầu. Tuy nhiên, các trình bao bọc làm cho mã của bạn trông gọn gàng hơn

OAuth2 có thể được tự động hóa không?

Người dùng máy có thể nhận mã thông báo OAuth2 mà không phải chỉ định mật mã. Điều đó có nghĩa là bạn hoàn toàn có thể tự động hóa quy trình lấy và làm mới mã thông báo OAuth2 bằng cách sử dụng API Edge .

Cách triển khai OAuth 2. 0 bằng Python?

Tạo thông tin xác thực ủy quyền .
Chuyển đến trang Thông tin xác thực
Nhấp vào Tạo thông tin xác thực > ID ứng dụng khách OAuth
Đối với loại ứng dụng, hãy chọn Ứng dụng web
Điền vào biểu mẫu và nhấn nút Tạo. Chúng tôi phải chỉ định các URI chuyển hướng được ủy quyền, là các điểm cuối mà OAuth 2. 0 máy chủ có thể gửi phản hồi

Làm cách nào để tạo mã thông báo truy cập bằng Python?

Nhận Mã truy cập . Bạn sẽ thêm mã thông báo xác thực vào tiêu đề của mỗi yêu cầu API. Ví dụ Python sau đây cho thấy cách lấy mã thông báo xác thực và tạo tiêu đề Ủy quyền bằng cách sử dụng mã thông báo. Use your client ID and client secret to obtain an auth token. You will add the auth token to the header of each API request. The following Python example shows how to obtain an auth token and create the Authorization header using the token.

Tại sao OAuth lại khó như vậy?

Việc thiếu hướng dẫn xác thực của OAuth đã dẫn đến một số tình huống tích hợp phức tạp, khó hiểu, đó chính là lý do OpenID Connect [OIDC] được tạo ra. OIDC là một tiêu chuẩn mới hơn giúp mở rộng OAuth, thêm hỗ trợ cho xác thực.

Chủ Đề