はじめに
既存の学習支援システムにあるアカウントリストを使って,Open edXへの認証があると便利だろうなと考えていて,調査を行いました.その結果,Third Party Authentication という仕組みを使うことで,ソーシャル認証ができることがわかりました.また,標準では自前アカウントソースを使うことは難しく,OAuth2を用いたバックエンドを作成し,Open edXに設定することで対応することが可能であることもわかりました.
今回,OAuth2で認証ができる認証基盤サービスのAuth0を使ったバックエンドを作成しました.これを用いたOpen edXへのユーザ認証を行いました.結果,ユーザー認証をすることが可能となりました.
Open edX Third Party Authentication
最近のOpen edXには,Third Party Authentication の仕組みが備わっています.これを使うことでGoogleやFacebookなどのソーシャル認証やSAML認証が可能になります.
認証のイメージ
- 認証先を個別に設定する必要がある.
Auth0 は便利な認証基盤サービス
Auth0は,認証基盤サービスです.Auth0にもユーザDBがありますが,外部データソースへ接続することができます.接続先には,ソーシャル, Database, LDAP, SAML パスワードレスなど様々です. つまり,Auth0による認証ができれば,他のサービスによる連携も可能となるのです.
Auth0を使った認証のイメージ
- Auth0をハブとして様々な認証を連携できる.Auth0上での連携設定はTTWで簡単に設定が可能.
Open edXの ソーシャル認証には, Python Social Auth を使っている
Open edX の外部認証機能のソーシャル認証は,Python Social Auth を使っています. このモジュールに標準であるバックエンド(google, facebook, linkedin等)の場合, lms.env.json
と lms.auth.json
に利用バックエンドとIDとシークレット等を記述し,再起動すれば使えるようになります.
しかし,バックエンドが無いときは backend
を作成する必要があります. Third Party Authentication には,dummy.pyというテスト用のコードがあるのでそれを参考にすれば容易に作成が可能です. Auth0に対応したのバックエンドは,以下のアドレスにあります.
セットアップ: Auth0側
はじめに,Auth0でOpen edXで利用するための設定を行います.
Auth0のダッシュボードから, Apps / APIs
を選択し,画面右上の + NEW APP/API
ボタンをクリックします.ダイアログが表示されるのでタイトルを記入します.
- Allowed Callback URLs にOpen edXのコールバックURLを入力します.
Open edX側の設定では, Domain
, Client ID
, Client Secret
を使用します.
http://{your open edx address}/auth/login/oa2-auth0/, http://{your open edx address}/auth/complete/oa2-auth0/, http://{your open edx address}/auth/disconnect/oa2-auth0/
セットアップ: Open edX側
openedx_auth0
をOpen edXにインストールします.
sudo su - edxapp -s /bin/bash cd ~/ . edxapp_env mkdir src && cd src git clone https://github.com/ngi644/openedx_auth0 pip install openedx_auth0/
バックエンドのインストールが終わりました.
環境ファイルの編集
lms.env.json
- ルートノードに
"ADDL_INSTALLED_APPS": ["openedx_auth0"]
と"THIRD_PARTY_AUTH_BACKENDS": ["openedx_auth0.auth0.Auth0OAuth2"]
を追記します. FEATURES
ノード内の"ENABLE_THIRD_PARTY_AUTH": true,
と変更し,"AUTH0_DOMAIN": "{your.auth0.com}"
を追記します.
Open edX DB をマイグレーションします.
- Cypress まで
cd /edx/app/edxapp/edx-platform python /edx/app/edxapp/edx-platform/manage.py lms syncdb --migrate --settings=aws
- dogwoodからは, Django1.8なので,
python manage.py migrations
,python manage.py migrate
コマンドとなります.
Open edXを再起動します
sudo /edx/bin/supervisorctl restart edxapp:
Django Admin にアクセスします.
http://{your lms address}/admin
Third_Party_Auth でプロバイダの設定を行います.
- Home › Third_Party_Auth › Provider Configuration へ進みます.
- Enabled:
チェックを入れます.有効になっているとログイン画面にリンクが表示されます.
-
Name:
名前を入力します.ログイン画面の表示に使われます.
-
Skip email verification:
チェックを入れることでOpen edXによるメール認証をスキップします.
-
Skip registration form:
Open edXは外部認証でも内部にユーザを作成します.これにチェックを入れることで自動登録します.
-
Backend name:
外部認証の際に利用するバックエンドを選択します.
oa2-auth0
を選択します. -
Client ID:
Auth0で作成した,
Client ID
を入力します. -
Client Secret:
Auth0で作成した,
Client Secret
を入力します.
Save
をクリックして保存します.
動作確認
- Open edXの画面から
Sign in
ボタンをクリックします.
- 従来のフォームの下に,Auth0へのリンクが表示されていますので,クリックします.
- Auth0へのログイン画面が表示されるので,メールアドレス・パスワードを入力してログインします.
- ログインできました.
おわりに
Open edXの外部認証先としてAuth0を使って認証することができました.バックエンドの書き方がわかったのでいろいろとできそうです.また,Auth0の便利さを実感しました. Auth0の外部DBを使う方法はまた別の機会に.とっても簡単ですよ.