チュートリアルの開始 Getting StartedからIntegrate Auth0 into your applicationへ。Create Application
からチュートリアルを開始。
testapp
として、Regular Web Applicationを選択。
Django
選択。
作成されたアプリケーションのページ。
GitHubからサンプルをfork。
python-social-auth/social-app-django
Python Social Auth is an easy to setup social authentication/registration mechanism with support for several frameworks and auth providers. This is the Django component of the python-social-auth ecosystem, it implements the needed functionality to integrate social-auth-core in a Django based project.
Djangoプロジェクトにソーシャル認証を組み込み、OAuthによる認証認可を行うことができる。サンプルアプリ側ではこれを利用してauth0の認証を行っている。
Get Your Application Keys
When you signed up for Auth0, a new application was created for you, or you could have created a new one.
新しアプリケーションを作成すると、以下が発行されるので、Settings
から取得する。
Domain
Client ID
Client Secret
Configure Callback URLs
A callback URL is a URL in your application where Auth0 redirects the user after they have authenticated. The callback URL for your app must be whitelisted in the Allowed Callback URLs field in your Application Settings. If this field is not set, users will be unable to log in to the application and will get an error.
認証後のリダイレクト先。Settings
でホワイトリスト登録する必要がある。
Configure Logout URLs
A logout URL is a URL in your application that Auth0 can return to after the user has been logged out of the authorization server. This is specified in the returnTo query parameter. The logout URL for your app must be whitelisted in the Allowed Logout URLs field in your Application Settings. If this field is not set, users will be unable to log out from the application and will get an error.
ログアウト後のリダイレクト先。Settings
でホワイトリスト登録する必要がある。
Django Settings サンプルアプリはほぼ設定済で、環境変数のみ.env
に設定すればOK。
1 2 3 AUTH0_CLIENT_ID ={CLIENT_ID}AUTH0_DOMAIN ={DOMAIN}AUTH0_CLIENT_SECRET ={CLIENT_SECRET}
Install the Dependencies pip install -r requirements.txt
でインストール。チュートリアルのDockerイメージはビルドの中でこれらもインストールされる。
1 2 3 4 django~=2.1 social-auth-app-django~=3.1 python-jose~=3.0 python-dotenv~=0.9
以下のDockerfile
が用意されており、サンプルアプリを利用可能な状態になっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FROM python:3.6 WORKDIR /home/app ADD requirements.txt /home/app RUN pip install --no-cache-dir -r requirements.txt ADD . /home/app RUN python manage.py migrate CMD python manage.py runserver 0.0.0.0:3000 EXPOSE 3000
docker-composeで操作したいので、docker-compose.yml
を作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: '3' services: auth0: container_name: auth0-django build: context: . dockerfile: Dockerfile tty: true ports: - "3000:3000" environment: AUTH0_CLIENT_ID: ${AUTH0_CLIENT_ID} AUTH0_DOMAIN: ${AUTH0_DOMAIN} AUTH0_CLIENT_SECRET: ${AUTH0_CLIENT_SECRET}
1 2 3 $ docker-compose up -d Creating network "01-login_default" with the default driver Creating auth0-django ... done
サンプルアプリへのログイン 【GET /】http://localhost:3000
にアクセス。
【GET /login/auth0】auth0のユニバーサルログインページに転送され、ログインすると…
【GET /dashboard】属性情報を表示されるアプリに転送され、渡されたユーザデータが表示される。
アプリサイドのログ この時のサーバログは以下の内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Creating network "01-login_default" with the default driver Creating auth0-django ... done Attaching to auth0-django auth0-django | Watching for file changes with StatReloader auth0-django | Performing system checks... auth0-django | auth0-django | System check identified no issues (0 silenced). auth0-django | June 05, 2020 - 11:14:04 auth0-django | Django version 2.2.13, using settings 'webappexample.settings' auth0-django | Starting development server at http://0.0.0.0:3000/ auth0-django | Quit the server with CONTROL-C. auth0-django | [05/Jun/2020 11:14:13] "GET / HTTP/1.1" 200 899 auth0-django | [05/Jun/2020 11:14:18] "GET /login/auth0 HTTP/1.1" 302 0 auth0-django | [05/Jun/2020 11:14:29] "GET /complete/auth0?code=kOYVXXXXXMVD8Sl&state=s0l9XXXXXXXXXXXXbPBNzeaA HTTP/1.1" 302 0 auth0-django | [05/Jun/2020 11:14:29] "GET /dashboard HTTP/1.1" 200 1371
Auth0サイドのログ Auth0のログ
Type:Success Exchange
はAuthorization Code for Access Token
というDescriptionが付与されており、前述のGET /complete/auth0?code=
で指定している認可コードを取得している。
内容はにRaw
とContextData
としてJSON形式で確認できる。
Raw
では以下が表示され、アプリからのリクエスト情報が記録されている。 User-Agentはアプリであり、内部的に使用されるPython RequestsのUser-Agentが記録されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "date" : "2020-06-05T11:14:28.994Z" , "type" : "seacft" , "description" : "Authorization Code for Access Token" , "connection_id" : "" , "client_id" : "orEXXXXXXXXXXXXXXXXXIFWsMF" , "client_name" : "testapp" , "ip" : "XXX.XXX.XXX.XXX" , "user_agent" : "Python Requests 2.23.0 / Other 0.0.0" , "details" : { "code" : "*************8Sl" }, "hostname" : "devXXXXXXXXXXXXX.auth0.com" , "user_id" : "auth0|XXXXXXXXXXXXXXXXXXXXXXXXXXXX" , "user_name" : "XXXXXXXXXXXXX@xxxxxxx.xxxxxx" , "log_id" : "9002020XXXXXXXXXXXXXXXXXXXXXXXXXXXX08290750546" , "_id" : "9002020XXXXXXXXXXXXXXXXXXXXXXXXXXXX08290750546" , "isMobile" : false }
ContextData
にはdetails
の内容が入っている。
1 2 3 { "code" : "*************8Sl" }
Type:Success Login
はクライアントのログイン認証の成功を示している。利用者からの認証であり、User-Agentは利用者のブラウザの情報が記録されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 { "date" : "2020-06-05T11:14:28.363Z" , "type" : "s" , "connection" : "Username-Password-Authentication" , "connection_id" : "con_XXXXXXXXXXXXXXv7" , "client_id" : "orEXXXXXXXXXXXXXXXXXIFWsMF" , "client_name" : "testapp" , "ip" : "XXX.XXX.XXX.XXX" , "user_agent" : "Chrome 83.0.4103 / Windows 10.0.0" , "details" : { "prompts" : [ { "name" : "lock-password-authenticate" , "initiatedAt" : 1591355668017 , "completedAt" : 1591355668324 , "connection" : "Username-Password-Authentication" , "connection_id" : "con_XXXXXXXXXXXXXXv7" , "strategy" : "auth0" , "identity" : "5edXXXXXXXXXXXXXXXcf9" , "stats" : { "loginsCount" : 6 }, "session_user" : "5edaXXXXXXXXXXXXXXX2e9d36" , "elapsedTime" : 307 }, { "name" : "login" , "flow" : "login" , "initiatedAt" : 1591355658531 , "completedAt" : 1591355668329 , "user_id" : "auth0|XXXXXXXXXXXXXXX6ecf9" , "user_name" : "XXXXXXXXXXXXX@xxxxxxx.xxxxxx" , "elapsedTime" : 9798 } ], "initiatedAt" : 1591355658530 , "completedAt" : 1591355668362 , "elapsedTime" : 9832 , "session_id" : "0FetBO15mf0vQs_YfMoZTQdeItwyJKdH" , "stats" : { "loginsCount" : 6 } }, "hostname" : "dev-e6hrtsp8.auth0.com" , "user_id" : "auth0|5ed5fb1b424ed40bee36ecf9" , "user_name" : "XXXXXXXXXXXXX@xxxxxxx.xxxxxx" , "strategy" : "auth0" , "strategy_type" : "database" , "log_id" : "900202XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7572418" , "_id" : "900202XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7572418" , "isMobile" : false , "description" : "Successful login" }