初めまして、日本システム技研の浦野です。
最近社内システムの認証基盤を見直す機会があり、試しに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側)
- まずAuth0のトップページからアカウントを登録します。githubやgoogleのアカウントを使ったソーシャルログインも可能です。
- 最初にログインした際は、Auth0で使用するドメイン名、リージョン、会社名や使用目的を入力します。適当に決めてしまって大丈夫だと思います。
- 入力が完了すると、管理ページに遷移します。左のメニューから「Clients」を選択すると、「Default App」が用意されているので、こちらを使って作業したいと思います。
- 「Default App」を開くと、初回ログイン時に入力したドメイン名や、クライアント固有のID等が表示されます。このうち「Domain」「Client ID」「Client Secret」はプログラム側で使うので、メモしておきます。ここまで終わったら一旦Auth0は置いて、Django側の設定に移ります。
設定(Django側)
- django-auth0というライブラリをpip installします。(https://github.com/imanhodjaev/django-auth0)
- Readmeの通り、settings.pyに設定を追加します。
- 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を読んでも理解できず、手を動かしながらメモにまとめました。
もっと効率のいいやり方はあるかと思いますが、そういった場合はコメント等いただければと思います。