使用 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_id
和 client_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"))