使用 Python 中的 requests 模組執行身份驗證

Vaibhav Vaibhav 2023年1月30日 2022年5月17日
  1. 在 Python 中使用 requests 模組執行身份驗證
  2. Python 中的其他身份驗證方法
使用 Python 中的 requests 模組執行身份驗證

超文字傳輸​​協議是全球資訊網或網際網路的基礎。本質上,它是一個應用層協議,其主要任務是將資料從 Web 伺服器傳輸到 Web 瀏覽器,例如 Chrome、Edge、Firefox 和 Brave。

HTTP 請求針對唯一的網址或 URL 進行,以獲取所需的資源和媒體文件,例如 HTML、PDF、文字檔案、影象、視訊等。

URL,也稱為統一資源定位器,是用於在 Internet 上定位內容的唯一網址或路徑,每個 URL 都指向特定的內容。

Python 是一種動態型別的多用途程式語言,支援大量庫。requests 模組提供了使用 Python 程式語言執行 HTTP 請求的實用程式。

在 Python 中使用 requests 模組執行身份驗證

要在 requests 模組的幫助下執行身份驗證,我們可以使用 requests 庫中的 HTTPBasicAuth 類。這個類接受兩個引數,一個使用者名稱和一個密碼。

這個類代表一個 HTTP Basic Authentication,它附加到一個請求上。身份驗證物件提供給 get() 方法的 auth 引數。

讓我們通過一個例子來理解這個類及其用法。請參考以下 Python 程式碼。

from requests.auth import HTTPBasicAuth

url = "<any valid url>"
basic = HTTPBasicAuth("username", "password")
requests.get(url, auth = basic)

身份驗證成功後,將獲得具有 200 狀態程式碼的響應物件。

編寫上述程式碼的另一種更直接的方法如下。

from requests.auth import HTTPBasicAuth

url = "<any valid url>"
requests.get(url, auth = ("username", "password"))

可以為元組中的 auth 引數提供使用者名稱和密碼。

Python 中的摘要式身份驗證

另一種流行且直接的 HTTP 身份驗證形式是摘要式身份驗證。這種型別的身份驗證可以在 HTTPDigestAuth 的幫助下執行。

HTTPBasicAuth 類一樣,此類也接受使用者名稱和密碼。

讓我們看一個例子。請參考以下 Python 程式碼。

from requests.auth import HTTPBasicAuth

url = "<any valid url>"
requests.get(url, auth = HTTPDigestAuth("username", "password"))

Python 中的 OAuth 1 身份驗證

OAuth 1 身份驗證是一種強大的身份驗證形式。

在這裡,OAuth 代表開放授權。這種形式的身份驗證適用於使用 OAuth 的 Web API 或應用程式程式設計介面。

這種型別的身份驗證可以在 OAuth1 類的幫助下執行。這個類是 requests-oauthlib 庫的一部分。要安裝這個 Python 庫,請使用以下 pip 命令。

pip install requests-oauthlib

讓我們藉助一個例子來理解這個類。請參閱以下 Python 程式碼。

import requests
from requests_oauthlib import OAuth1

url = "<any valid url>"
YOUR_APP_KEY = "YOUR_APP_KEY"
YOUR_APP_SECRET = "YOUR_APP_SECRET"
USER_OAUTH_TOKEN = "USER_OAUTH_TOKEN"
USER_OAUTH_TOKEN_SECRET = "USER_OAUTH_TOKEN_SECRET"
auth = OAuth1(YOUR_APP_KEY, YOUR_APP_SECRET, USER_OAUTH_TOKEN, USER_OAUTH_TOKEN_SECRET)
requests.get(url, auth = auth)

Python 中的 OAuth 2 身份驗證

2012 年,OAuth 1 被稱為 OAuth 2 的更新且更可靠的身份驗證協議所取代。

OAuth 2 的幫助下,開發人員和企業主可以通過他們的網站提供對資源的同意訪問,並限制可疑行為。

OAuth 2 身份驗證使用訪問令牌。訪問令牌是一種允許使用者進行身份驗證的特殊資料。

使用者必須在向網站伺服器發出的每個請求中包含其訪問令牌,以證明其身份外行身份驗證並訪問他們有權訪問的任何內容。

由於可以使用網路瀏覽器輕鬆訪問令牌,因此出於安全目的,每個訪問令牌都有一個到期日期和時間。

使用 OAuth 2 身份驗證,使用者可以在多個平臺上進行身份驗證,從而為終端使用者節省時間並提升令人滿意的使用者體驗。

可以使用 requests_oauthlib 模組執行 OAuth 2 身份驗證。這個模組有一個我們可以使用的類 OAuth2Session

以下是 OAuth2Session 的類簽名。

class requests_oauthlib.OAuth2Session(client_id=None, client=None, auto_refresh_url=None, auto_refresh_kwargs=None, scope=None, redirect_uri=None, token=None, state=None, token_updater=None, **kwargs)

讓我們通過一個例子來了解它的用法。

from requests_oauthlib import OAuth2Session

client_id = "your_client_id"
client_secret = "your_client_secret"
url = "<any valid url>"
oauth = OAuth2Session(client_id, redirect_uri = url)
token = oauth.fetch_token("<url to fetch access token>", client_secret = client_secret)
r = oauth.get("<url to a resource>")

OAuth2Session 類接受 client_idclient_secret 用於執行實際身份驗證。

url 是一個必須完成身份驗證的好網站。我們使用此類物件的 fetch_token() 方法獲取新的訪問令牌。

該令牌將用於會話的其餘部分以訪問內容。這裡,<url to fetch access token> 應該是一個 HTTPS 網址。

一旦獲得令牌,我們就可以使用此類物件的 get() 方法安全地訪問網站上的內容。

要了解有關此方法的更多資訊,請參閱官方文件此處

Python 中的其他身份驗證方法

除了上面提到的方法,我們還可以使用兩個 Python 庫進行身份驗證。

  • requests Kerberos/GSSAPI
  • requests-ntlm

requests Kerberos/GSSAPI 庫是一個基於 Python 的開源庫,它擴大了 requests 庫的範圍。

requests 用於 HTTP 請求,但 requests Kerberos/GSSAPI 庫支援 Kerberos/GSSAPI 身份驗證和相互身份驗證。

以下 Python 描述瞭如何使用此庫執行基本身份驗證。

import requests
from requests_kerberos import HTTPKerberosAuth

r = requests.get("<any valid url>", auth = HTTPKerberosAuth())

requests-ntlm 庫是一個基於 Python 的開源庫,用於 HTTP NTLM 身份驗證。NTLM 代表 Windows NT LAN 管理器。

NTLM 協議通常被認為是不安全的,因為它是一個相當古老的協議並且基於過時的 密碼學 演算法。

因此,它很容易受到諸如傳遞雜湊攻擊和蠻力攻擊等可疑攻擊。要安裝此庫,請在任何終端中執行以下 pip 命令。

pip install requests_ntlm

下面的 Python 描述瞭如何使用這個庫來執行 NTLM 身份驗證。

import requests
from requests_ntlm import HttpNtlmAuth

requests.get("<any valid url>", auth = HttpNtlmAuth("domain\\username", "password"))
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

LinkedIn GitHub

相關文章 - Python Web