認証
このドキュメントでは、リクエストでのさまざまな種類の認証の使用について説明します。
多くのWebサービスには認証が必要であり、さまざまな種類があります。 以下では、単純なものから複雑なものまで、リクエストで使用できるさまざまな形式の認証の概要を説明します。
基本認証
認証を必要とする多くのWebサービスは、HTTP基本認証を受け入れます。 これは最も単純な種類であり、Requestsは箱から出してすぐにサポートします。
HTTP基本認証を使用したリクエストの作成は非常に簡単です。
>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>
実際、HTTP基本認証は非常に一般的であるため、Requestsはそれを使用するための便利な省略形を提供します。
>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>
このようなタプルでクレデンシャルを提供することは、上記のHTTPBasicAuth
の例とまったく同じです。
netrc認証
auth
引数で認証方法が指定されていない場合、リクエストはユーザーのnetrcファイルからURLのホスト名の認証資格情報を取得しようとします。 netrcファイルは、 headers = で設定された生のHTTP認証ヘッダーをオーバーライドします。
ホスト名の資格情報が見つかった場合、要求はHTTP基本認証を使用して送信されます。
ダイジェスト認証
HTTP認証のもう1つの非常に人気のある形式はダイジェスト認証であり、Requestsはこれをすぐにサポートします。
>>> from requests.auth import HTTPDigestAuth
>>> url = 'https://httpbin.org/digest-auth/auth/user/pass'
>>> requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
<Response [200]>
OAuth1認証
複数のWebAPIの認証の一般的な形式はOAuthです。 requests-oauthlib
ライブラリを使用すると、リクエストユーザーはOAuth1認証済みリクエストを簡単に作成できます。
>>> import requests
>>> from requests_oauthlib import OAuth1
>>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
>>> auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
... 'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
>>> requests.get(url, auth=auth)
<Response [200]>
OAuthフローが機能する方法の詳細については、公式の OAuth Webサイトを参照してください。 requests-oauthlibの例とドキュメントについては、GitHubの requests_oauthlib リポジトリを参照してください。
OAuth2とOpenIDConnect認証
requests-oauthlib
ライブラリは、OpenIDConnectを支える認証メカニズムであるOAuth2も処理します。 さまざまなOAuth2資格情報管理フローの詳細については、リクエスト-oauthlibOAuth2ドキュメントを参照してください。
その他の認証
リクエストは、他の形式の認証を簡単かつ迅速にプラグインできるように設計されています。 オープンソースコミュニティのメンバーは、より複雑な、またはあまり使用されていない形式の認証用の認証ハンドラーを頻繁に作成します。 リクエスト組織の下に、次のような最高のものがいくつか集められています。
これらの形式の認証のいずれかを使用する場合は、GitHubページに直接アクセスして、指示に従ってください。
新しい形式の認証
必要な形式の認証の適切な実装が見つからない場合は、自分で実装できます。 リクエストを使用すると、独自の認証形式を簡単に追加できます。
これを行うには、 AuthBase をサブクラス化し、__call__()
メソッドを実装します。
>>> import requests
>>> class MyAuth(requests.auth.AuthBase):
... def __call__(self, r):
... # Implement my authentication
... return r
...
>>> url = 'https://httpbin.org/get'
>>> requests.get(url, auth=MyAuth())
<Response [200]>
認証ハンドラーがリクエストに添付されると、リクエストのセットアップ中に呼び出されます。 したがって、__call__
メソッドは、認証を機能させるために必要なすべてのことを実行する必要があります。 一部の形式の認証では、さらに機能を提供するためにフックが追加されます。
その他の例は、リクエスト組織およびauth.py
ファイルにあります。