はじめに
Djangoにおいて、下の図のようにGoogle等のサイトからOAuth2で認証を行った後、その認証情報をベースにさらにOAuth2で認証を行う方法を調べました。なお、Djangoは1.9.4をベースにしています。
このような構造にすることで、個人認証をGoogle等の外部サイトに任せることができる上に、ユーザー情報を一元管理できます。
① OAuth2 Consumer部分について
今回は、①のOAuth2 Consumer部分について解説します。※②、③は次回以降に解説します。
①はGoogle等のサービスに対するOAuth2 Consumerとして動作させます。
Djangoで利用できるOAuth2 Consumerの有名なライブラリとして、Python Social Authとdjango-allauthが存在します。
基本的にどちらでもGoogle等に対するOauth2 Consumerとしては問題なく利用できますが、次回以降で解説する③部分の情報がPython Social Authの方が多かったため、Python Social Authを選択しました。
Python Social Authのインストール
pip install python-social-auth
を実行するだけでインストールが完了します。requirements.txt
を利用する等、お好きな形でインストールしてください。Python Social Authの設定
基本的に、Documentationに記載されている内容を実行します。1. INSTALLED_APPSへ追加
settings.py
のINSTALLED_APPS
に'social.apps.django_app.default'
を追加します。 INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
2. AUTHENTICATION_BACKENDSの作成
settings.py
にAUTHENTICATION_BACKENDS
を追加し、さらに利用したいサービスのBackendを追加します。利用できるBackendの一覧はこちらを確認してください。
なお、
'django.contrib.auth.backends.ModelBackend'
はDjangoに元々搭載されている認証のBackendです。AUTHENTICATION_BACKENDS
をsettings.py
に追加する時は、特別の理由が無い限り、'django.contrib.auth.backends.ModelBackend'
を含めておくようにしてください。そうしないとadminページにログインできなくなります。 AUTHENTICATION_BACKENDS = (
'social.backends.google.GoogleOAuth2',
'social.backends.twitter.TwitterOAuth',
...
'django.contrib.auth.backends.ModelBackend',
)
3. TEMPLATESのcontext_processorsに追加
settings.py
のcontext_processors
に、'social.apps.django_app.context_processors.backends'
と'social.apps.django_app.context_processors.login_redirect'
を追加します。 #Django 1.9
TEMPLATES = [
{
'BACKEND': ...,
'DIRS': ...,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
],
},
},
]
なお、Djangoの古いバージョンでは
TEMPLATE_CONTEXT_PROCESSORS
に追加してください。 #Older Django
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
4. KEYとSECRETを追加
OAuth2ではアプリケーションをOAuth2 Provider側に認証してもらうためのKey(Client ID)とSecretが必要です。GAE等のサービス側でアプリケーションの登録を行った後、KeyとSecretも
settings.py
に追加してください。KeyとSecretを追加する変数名は、
SOCIAL_AUTH_***_KEY
とSOCIAL_AUTH_***_SECRET
です。***の部分にはBackend名が入ります。こちらも詳細はBackend一覧を確認してください。
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'KEY'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'SECRET'
5. urls.pyに追加
urls.py
に、'surl(r'^accounts/', include('social.apps.django_app.urls', namespace='social')),'
を追加します。
urlpatterns = [
...
url(r'^accounts/', include('social.apps.django_app.urls', namespace='social')),
...
]
6. migrateの実行
最後に、データベースにPython Social Authのテーブルを作成するため、python manage.py migrate
を実行してください。
0 件のコメント :
コメントを投稿