【Python】FlaskとOAuthでGoogleログインする

pythonPython

概要

Pythonで、Flaskを使用してWebサイトを作成し、OAuth2認証でGoogleログインをしてみたのでまとめました。

GoogleログインをOAuth2で行うことで、こちらでユーザ登録機能や、パスワードなどを保持する必要なく、アプリケーションの作成を行うことができます。

OAuth2の仕組みに関しては、ほかで詳しく解説されてますので、そちらを確認してください。

本記事は、以下の記事の内容を参考に作成しております。

Create a Flask Application With Google Login – Real Python
In this step-by-step tutorial, you'll create a Flask application that lets users sign in using their Google login. You'll learn about OAuth 2 and OpenID Connect...

また、ソースコードはGitHubに格納しております。

GitHub - remix-yh/flask-google-login
Contribute to remix-yh/flask-google-login development by creating an account on GitHub.

Webサイトの概要

Webサイトの概要を説明します。

まずトップページに、Google Loginと書かれたリンクがあります。

このリンクをクリックすると、Googleの認証画面に遷移します。

こちらが、認証画面で、ログインする対象のGoogleアカウントを選択、またはログイン情報を入力します。

 

認証されると、Goolgleの情報から、名前、Emailアドレス、プロフィール画像を表示します。

Logoutボタンを押すと、トップの画面に戻ります。

以上がWebサイトの概要になります。

作成手順

OAuth2クライアントの生成

まずは、OAuth2で認証するためにOAuthクライアントを登録します。

登録するには、Googleアカウントが必要なので、ない方は登録してください。

OAuthクライアントの登録には、以下のURLにアクセスします。

Google Cloud プラットフォーム
Google Cloud Platform では、Google と同じインフラストラクチャでアプリケーション、ウェブサイト、サービスを構築、導入、拡大することができます。

 

OAuth同意画面で、外部を選択して、作成ボタンを押します。

アプリケーション名にアプリケーション名を入力し、画面下の保存を押下します。

アプリケーション名は、認証する際の画面に表示されるアプリケーション名で特に適当でかまいません。

保存すると、OAuthクライアントが生成されます。

クライアントIDと、クライアント シークレットは後で必要になりますので、控えておいてください。

OAuthクライアントの設定を行います。

認証情報より、認証情報を作成のOAuthクライアントIDを押下してください。

以下のように設定し、作成ボタンをクリックしてください。

  • アプリケーションの種類:ウェブ アプリケーション
  • 承認済みのJavaScript生成元:https://127.0.0.1:5000
  • 承認済みのリダイレクトURI:https://127.0.0.1:5000/login/callback

以上でOAuthクライアントの設定は完了です。

Webサイトの作成

以下のGitHubよりソースコードをcloneします。

GitHub - remix-yh/flask-google-login
Contribute to remix-yh/flask-google-login development by creating an account on GitHub.

必要なモジュールをインストールします。

pyenvを使用している方は、以下のコマンドでインストールします。

pipenv install

pyenvを使用していない方は、pipでインストールします。

pip install -r requirements.txt
app.pyの以下のNone部分に、先ほど控えた、クライアントIDと、クライアント シークレットを入力します。
または、環境変数に設定する処理を追加します。
GOOGLE_CLIENT_ID = os.environ.get("GOOGLE_CLIENT_ID", None)
GOOGLE_CLIENT_SECRET = os.environ.get("GOOGLE_CLIENT_SECRET",None)
app.pyを実行します。
python app.py
https://127.0.0.1:5000/ にアクセスし、以下の画面が表示される方は、証明書問題を無視して、表示してください。httpsでループバックでアクセスしており、証明書が登録されてませんので表示されてます。
その後、トップ画面が表示されればOKです。

まとめ

FlaskでOAuth2認証を使用しGoogleログインを行いました。

Pythonでは、OAuthに関するライブラリが存在していることから、簡単に実装することができました。

また、OAuthを使用することで、

  • 認証機構をクライアントアプリで構築する必要がない
  • ユーザ管理、パスワード管理をする必要がない

などのメリットがあることがわかりました。

Google以外のFacebookやTwitterの認証や、別言語でOAuthを使用しての認証を試してみるのもよいかと思います。

コメント