WEBサービスを利用するためには、ユーザ&パスワードを入力してログイン認証をする必要がありますが、他のWEBサービスと連携して認証をすることによりユーザ&パスワードを入力することなくサービスにログインするOAuth認証を実現する方法を紹介します。
OAuth認証に対応しているWEBサービスは、google、office365、twitter、Facebookなどがあります。今回は、TWitterのOAuth認証について、紹介していくこととします。
準備
まず、最初にTWitterでOAuth認証させるためのアカウントが必要となります。
以前、紹介した記事にTWitterAPI利用申請を参考にして、TWitterアプリを作成しAPI KeyとAPI Key Secretを取得してください
https://touch-kun.net/2020/11/03/post-170/
アプリ作成後、OAuth認証のため以下の3点を編集して保存する。
- User authentication settingsの編集から「OAuth 1.0a」を有効にする
- 認証が確認できたのちに進むURLを「Callback URI / Redirect URL」に記載する
- OAuth認証を利用するドメインを「Website URL」に記載する
以上でOAuth認証するための、TWitterアプリの設定は完了
OAuth認証の流れ
TWitterアプリを作成したAPI KeyとAPI Key Secretを利用して、ログインしようとしているユーザに対して、OAuth TokenとOAuth Token Secretを発行し、認証用のURLを作成してユーザ側に以下のようなアクセス確認を表示させ、Twitterの連携ログインを促します。
TWiterでのログイン認証(アプリ連携)が終わるとサービスにログインしたことになります。
Pythonライブラリのインストール
TWiterでのログイン認証(アプリ連携)をPythonで実現するライブラリを利用します。今回は requests-oauthlibという Python 用の OAuth 認証ライブラリをインストールします。
pip install requests requests_oauthlib
TWitter OAuth認証
ライブラリを利用して、TWitter OAuth認証を紹介します。
from requests_oauthlib import OAuth1Session
API_KEY = "TWitterアプリで取得したKEY"
API_KEY_SECRET = "TWitterアプリで取得したSECRET_KEY"
callback_url = "認証確認が取れた後に返す画面"
request_endpoint_url = "https://api.twitter.com/oauth/request_token"
twitter = OAuth1Session(API_KEY, API_KEY_SECRET)
response = twitter.post(request_endpoint_url, params={"oauth_callback": callback_url})
request_token = dict(parse_qsl(response.content.decode("utf-8")))
# リクエストトークンから認証画面のURLを生成
authenticate_url = "https://api.twitter.com/oauth/authenticate"
authenticate_endpoint = '%s?oauth_token=%s' % (authenticate_url, request_token['oauth_token'])
# 認証画面を表示
redirect(authenticate_endpoint )
1行目はOAuth認証のライブラリ
2,3行目はTWitterアプリで取得したKEY
4行目は認証後に返すURLを記載(TWitterOAuth認証で設定したURL)
5行目はTWitterOAuth認証のBASEとなるURL
6行目はOAuth認証のSessionを作成
7,8行目は認証した後callbackに指定したURLを設定して、OAuth認証のリクエストトークンを生成
9,10行目はTWitterOAuth認証のURLを生成(1度しか認証できないURL)このURLが先ほど説明した認証許可画面が表示され、OAuth認証するとcallbackに指定したURLに移動します。
11行目は生成したOAuth認証のURLに移動