はじめに
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 件のコメント :
コメントを投稿