DjangoでOAuth2認証①

2016/03/26 urls.pyの記載を追加

はじめに

Djangoにおいて、下の図のようにGoogle等のサイトからOAuth2で認証を行った後、その認証情報をベースにさらにOAuth2で認証を行う方法を調べました。
なお、Djangoは1.9.4をベースにしています。

このような構造にすることで、個人認証をGoogle等の外部サイトに任せることができる上に、ユーザー情報を一元管理できます。



① OAuth2 Consumer部分について

今回は、①のOAuth2 Consumer部分について解説します。
※②、③は次回以降に解説します。

①はGoogle等のサービスに対するOAuth2 Consumerとして動作させます。
Djangoで利用できるOAuth2 Consumerの有名なライブラリとして、Python Social Authdjango-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.pyINSTALLED_APPS'social.apps.django_app.default'を追加します。

 INSTALLED_APPS = (
    ...
    'social.apps.django_app.default',
    ...
 )

2. AUTHENTICATION_BACKENDSの作成

settings.pyAUTHENTICATION_BACKENDSを追加し、さらに利用したいサービスのBackendを追加します。
利用できるBackendの一覧はこちらを確認してください。
なお、'django.contrib.auth.backends.ModelBackend'はDjangoに元々搭載されている認証のBackendです。AUTHENTICATION_BACKENDSsettings.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.pycontext_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_***_KEYSOCIAL_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 件のコメント :

コメントを投稿