1
/
5

認証基盤サービスAuth0を使ってみた

初めまして、日本システム技研の浦野です。

最近社内システムの認証基盤を見直す機会があり、試しにAuth0(https://auth0.com/jp/)を導入してみました。忘備録も兼ねて導入の手順を記事にまとめてみたいと思います。

Auth0とは

認証基盤サービスです。
「(ある程度)無料で」「SSOやソーシャルログインが」「簡単に」できるところが魅力かな、と思います。
詳しくは以下のサイトを見ていただくとわかりやすいです。

https://qiita.com/furuth/items/68c3caa3127cbf4f6b77

環境

言語: python(3.5.1) + Django(1.9.7)
DB: sqlite(デフォルト)

今回はlocalhostで試したので、webサーバに載せるときはまた変わってくるかもしれません。

設定(Auth0側)

  1. まずAuth0のトップページからアカウントを登録します。githubやgoogleのアカウントを使ったソーシャルログインも可能です。
  2. 最初にログインした際は、Auth0で使用するドメイン名、リージョン、会社名や使用目的を入力します。適当に決めてしまって大丈夫だと思います。
  3. 入力が完了すると、管理ページに遷移します。左のメニューから「Clients」を選択すると、「Default App」が用意されているので、こちらを使って作業したいと思います。
  4. 「Default App」を開くと、初回ログイン時に入力したドメイン名や、クライアント固有のID等が表示されます。このうち「Domain」「Client ID」「Client Secret」はプログラム側で使うので、メモしておきます。ここまで終わったら一旦Auth0は置いて、Django側の設定に移ります。



設定(Django側)

  1. django-auth0というライブラリをpip installします。(https://github.com/imanhodjaev/django-auth0)
  2. Readmeの通り、settings.pyに設定を追加します。
  3. views.pyにコールバック用のメソッドを追加し、url.pyで紐付けを行っておきます。 
from django.shortcuts import redirect
from django_auth0 import views as auth0

def auth_callback(request):

    html = auth0.auth_callback(request)

    if html.status_code == 400:
        return redirect('accounts:login')

    return html
url(r'callback/?$', auth_callback, name='auth_callback'),

4. settings.pyにコールバック用のパスを追加します。

AUTH0_CALLBACK_URL = 'http://XXXXXX/callback'

5. login用のtemplateに記述を追加します。

<script src="https://cdn.auth0.com/js/lock/10.20/lock.min.js"></script>
<script type="text/javascript">
    var lock = new Auth0Lock(
        '{{ AUTH0_CLIENT_ID }}', '{{ AUTH0_DOMAIN }}', {
        auth: {
            callbackURL: '{{ AUTH0_CALLBACK_URL }}',
            responseType: 'code',
            params: {
                scope: 'openid profile'
            }
        }
    });

    $(document).on('click', "#button", function () {
        lock.show();
    });

    if ($(location).attr('search')) {
        window.location.href = '{{ AUTH0_CALLBACK_URL }}' + $(location).attr('search');
    };
</script>

6. django_auth0/auth_helpers.py の40行目に記述を追加します。

if user_info.get('sub'):
    user_info['user_id'] = user_info['sub']

これでDjango側の設定は完了です。
最後にAuth0でコールバックURLの設定を行います。

「Allowed Callback URLs」にコールバックURLを2件追加します。

http://XXXXXX/login/, http://XXXXXXX/auth_callback



こんな感じでログインできるようになりました。v(`・ω・´)v < ヤッター


最初はReadmeを読んでも理解できず、手を動かしながらメモにまとめました。
もっと効率のいいやり方はあるかと思いますが、そういった場合はコメント等いただければと思います。

株式会社日本システム技研では一緒に働く仲間を募集しています
6 いいね!
6 いいね!
今週のランキング