SlideShare a Scribd company logo
Djangoフレームワークの
ユーザーモデルと認証
PyConJP 2017
岡野 真也 (@tokibito)
お前誰よ?
岡野真也 (@tokibito)
株式会社オープンコレクター
http://www.open-c.jp/
お仕事あればご相談ください
2
今日話すこと
認証と認可について
前知識
『Djangoの認証機能』
認証機能の使い方
認証機能の仕組み
認証機能のカスタマイズ
Djangoのバージョンは、1.11を前提としています。
3
認証と認可について
4
Auth
5
Auth?
認証(Authentication)
システムから見て、利用者が誰であるかを判別
して扱うこと
この話をします
認可(Authorization)
システム上で、利用者に閲覧や操作を許可する
こと
権限を扱うこと
この話はしません (hirokikyさんのセッションへ)
6
認証の話に入る前に
Webアプリケーションで認証を扱うための前知識
HTTPヘッダ
Cookie
セッション
ざっくり説明
(省略) ブラウザ=ウェブブラウザ(ChromeとかIE)
(省略) サーバー=HTTPサーバー
7
HTTPヘッダ
HTTPでのリクエスト, レスポンスの先頭のほうに
ある情報
ブラウザの画面上には表示されない
ブラウザがコンテンツをよしなに扱うための情報
が詰まってる
ブラウザの開発者ツールで確認できるよ
8
ブラウザとサーバーのやりと
り
9
Cookie
ブラウザにデータを保存できるところ
キーと値のペアで保存
サーバーからのレスポンスでHTTPヘッダにSet-
Cookieでデータを入れとくと、 ブラウザが保存し
てくれる
保存されたデータは、ブラウザが次回リクエスト
時に Cookieヘッダでサーバーに送信される
10
ブラウザとのCookieのやりと
り
11
セッション(HTTPセッション)
ブラウザからの操作(ページ遷移)を 一連の流れ と
して扱うこと
セッションに紐付けて、サーバー側で認証情報な
どを保持したりできる(セッションデータ)
12
セッションの仕組み(例)
1. ブラウザがサーバーへHTTPリクエスト
2. サーバー側でセッションIDを発行し、Set-Cookie
ヘッダに含めてレスポンス
3. ブラウザはCookieデータとしてセッションIDを保
存
4. 次回以降、ブラウザのHTTPリクエストでCookie
ヘッダでセッションIDをサーバーに送信
5. サーバーはセッションIDが一致すれば同一セッシ
ョンとして扱う
13
セッションのやりとり
14
ここからは『Djangoの』話
15
Djangoのセッション機能
django.contrib.session (デフォルトで有効)
Cookieでは sessionid キーでセッションIDを保持
SessionMiddlewareにてCookieのセッションIDと
サーバー上のセッションIDを照合
サーバー上に保存されたセッションデータは、
request.session 辞書に復元される
認証データはここに格納します
16
Djangoのセッション
17
ここからDjangoの認証の話
18
まずは使い方から。
19
Djangoの認証機能の使い方
アプリケーションの有効化
設定
ユーザーの登録
ログイン、ログアウトのView
Viewでユーザー情報を使う
ログインが必要なViewを作る
ユーザーに紐づくデータ
API
20
アプリケーションの有効化
Djangoプロジェクトの settings.py の
INSTALLED_APPSに django.contrib.auth を記述
デフォルトで有効
MIDDLEWAREに
django.contrib.auth.middleware.AuthenticationMiddleware
を記述
デフォルトで有効
manage.py migrate でユーザー情報を保存するテー
ブルを作成
21
設定
ログイン後のリダイレクト先の設定
settings.LOGIN_REDIRECT_URL
ログアウト後のリダイレクト先の設定
settings.LOGOUT_REDIRECT_URL
ログインページのURL設定
settings.LOGIN_URL
22
ユーザーの登録
管理者ユーザーの登録
manage.py スクリプトの createsuperuser コマン
ド
./manage.py createsuepruser
一般ユーザーの登録
Djangoの管理画面から登録
Userモデルを操作して登録
23
24
ログイン、ログアウトのView
urls.py で django.contrib.auth.views.LoginView を使い
ます。ログアウトは LogoutView です。
from django.conf.urls import url
from django.contrib.auth.views import LoginView, LogoutView
urlpatterns = [
url(r'^login$', LoginView.as_view(), name='login'),
url(r'^logout$', LogoutView.as_view(), name='logout'),
]
ログイン画面のデフォルトテンプレートパスは、
registration/login.html
25
Viewでユーザー情報を使う
Viewでは request.user を参照します。
未認証時は、 AnonymousUser 、認証済みの場合は User
のインスタンスとなります。
from django.http import HttpResponse
def my_view(request):
if request.user.is_authenticated:
return HttpResponse("認証済みです: {}".format(
request.user.username))
else:
return HttpResponse("未認証です")
26
ログインが必要なViewを作る
ログインを必須とするViewを作る場合は、
django.contrib.auth.decorators.login_required デコレ
ータを使います。
from django.contrib.auth.decorators import login_required
@login_required
def secret_view(request):
"認証が必要なView"
未認証時にアクセスすると、ログインURLへリダイレ
クトされます。
27
ユーザーに紐づくデータ
ユーザーに関連するデータを保存するモデルを定義す
る場合は、ForeignKeyには settings.AUTH_USER_MODEL
を指定します。
from django.db import models
from django.conf import settings
class Article(models.Model):
author = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
)
ユーザーモデルは、 settings.AUTH_USER_MODEL で変更
できるためです。 28
API
認証機能に依存するアプリケーションを作る際には
APIを使います。以下は、特定のユーザーでログイン
させる例です。
from django.shortcuts import redirect
from django.contrib.auth import get_user_model, login
def my_view(request):
UserModel = get_user_model() # ユーザーモデルの取得
user = UserModel.objects.get(pk=1) # pk=1のユーザーを取得
login(request, user) # 取得したユーザーでログインさせる
return redirect('/') # リダイレクト
その他API多数。詳しくは ドキュメント を参照。
29
使い方はここまで。
30
Djangoの認証機能の仕組み
31
ログイン処理のサーバー側
ざっくり説明すると、
1. ユーザーの照合処理
1-1. ユーザー名でDBからユーザー情報を探す
1-2. パスワード照合
1-3. 有効かどうかチェック
ここまでに失敗したらログイン画面再表示
2. セッションにユーザーIDと使用したバックエンド
クラス名を保存
3. リダイレクトレスポンスを返す
32
ログイン処理の流れ
33
ユーザーの照合処理の詳細
settings.AUTHENTICATION_BACKENDSに列挙され
たクラスが使われます
django.contrib.auth.backends.ModelBackend (抜粋)
class ModelBackend(object):
def authenticate(self, request, username, password):
"""usernameでユーザー情報を取得
passwordが正しければUserオブジェクトを返す"""
def get_user(self, user_id):
"""user_idと一致するUserオブジェクトを返す"""
34
ユーザー情報
django.contrib.auth.models.User (抜粋)
class AbstractBaseUser(models.Model):
password = models.CharField()
class AbstractUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField()
class User(AbstractUser):
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
Userモデルにusernameとpasswordを保持しています
35
セッションへの保存
認証に成功すると、ユーザー情報はセッションに保存
されます
request.session["_auth_user_id"] = user.pk
request.session["_auth_user_backend"] = '(バックエン
ドクラス名)'
セッション機能によりこのデータは、サーバー側で保
存されます。
36
認証できました
ここまでの処理:
セッションにユーザーID(認証データ)が保持された
ログイン処理が成功したのでリダイレクトされた
次は認証データを使う処理を見ていきます。
37
認証データの参照
認証データを参照する処理は、次のような仕組みで動
作します。
1. AuthenticationMiddleware
1-1. request.sessionからユーザーIDと認証バック
エンドクラス名を取り出す
1-2. バックエンドクラスでUserを取得
1-3. request.user にUserかAnonymousUserを代入
2. Viewで request.user を参照する
38
認証データの参照
39
セキュリティTips
複数のブラウザで同じユーザーにて同時にログイ
ンは可能。
パスワードを変更した場合は、変更処理をした
セッション以外のログイン情報は無効化される
パスワードの暗号化処理は、カスタマイズ可能。
デフォルトのアルゴリズムはPBKDF2。
40
認証機能のカスタマイズ
41
よくある要求
ユーザー情報のカラムを増やしたい
ユーザーモデルのカスタマイズ
LDAPやAD認証など他の認証システム(照合のみ)と
連携したい
バックエンド変更
OAuth(OpenID Connect)で外部の認証システムと
連携したい
python-social-authを使うだけでOK
もしくは、Viewを用意+バックエンド変更
42
カスタマイズのポイント
ユーザーモデルの変更
認証バックエンドの変更
43
ユーザーモデルの変更
AbstractBaseUser を継承してモデルを定義する
PK(ID)は必須
複合主キーは使えません。
class MyUser(AbstractBaseUser):
identifier = models.CharField(max_length=40, unique=True
...
USERNAME_FIELD = 'identifier'
settings.AUTH_USER_MODEL にクラスを指定すると有効化
詳しくは ドキュメント を参照。
44
認証バックエンドの変更
authenticateとget_userメソッドを持ったバックエン
ドクラスを定義して使います。
class MyBackend(object):
def authenticate(request, **credentials):
"照合OKならUserを返す処理を書く"
def get_user(self, user_id):
"user_idと一致するUserオブジェクトを返す処理を書く"
settings.AUTH_BACKENDS にクラスを指定すると有効化
詳しくは ドキュメント を参照。
45
まとめ
認証(Authentication)は、システムから見て、利用
者が誰であるかを判別して扱うこと
Djangoの認証機能では、セッションにユーザー情
報を保持している
Djangoの認証機能は、認証バックエンドでユーザ
ーの照合、取得をしている
ユーザーモデルや認証バックエンドはカスタマイ
ズできる
46

More Related Content

What's hot

Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
Mikiya Okuno
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
nginxの紹介
nginxの紹介nginxの紹介
nginxの紹介
Takashi Takizawa
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
KyutatsuNishiura
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
Ken Muryoi
 
新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア
akira6592
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
Rui Watanabe
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
 
レコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたちレコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたち
recotech
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
 

What's hot (20)

Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
nginxの紹介
nginxの紹介nginxの紹介
nginxの紹介
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
 
レコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたちレコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたち
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 

Similar to Djangoフレームワークのユーザーモデルと認証

5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方
Yuki Takahashi
 
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめコロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
Masayuki Uehara
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
PHP勉強会 LT会
PHP勉強会 LT会PHP勉強会 LT会
PHP勉強会 LT会
suzumurashingo
 
20141111 themi struct
20141111 themi struct20141111 themi struct
choreonoid_ros_control を実装した話
choreonoid_ros_control を実装した話choreonoid_ros_control を実装した話
choreonoid_ros_control を実装した話
Ryodo Tanaka
 
Opauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証についてOpauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証について松本 雄貴
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
Iwama Ryo
 
20111203 gdd2011フィードバック 公開用
20111203 gdd2011フィードバック 公開用20111203 gdd2011フィードバック 公開用
20111203 gdd2011フィードバック 公開用
tksyokoyama
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
Single sign-on system requiring authorization
Single sign-on system requiring authorizationSingle sign-on system requiring authorization
Single sign-on system requiring authorization
H MM
 
OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17
Tatsuo Kudo
 
Ptengineトレーニング資料20211103
Ptengineトレーニング資料20211103Ptengineトレーニング資料20211103
Ptengineトレーニング資料20211103
Takashi Ando
 
20141111 明日の認証会議資料(寺田)
20141111 明日の認証会議資料(寺田)20141111 明日の認証会議資料(寺田)
20141111 明日の認証会議資料(寺田)
マジセミ by (株)オープンソース活用研究所
 
フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)
abend_cve_9999_0001
 
Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!
Project Samurai
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
 
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューションOAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
Tatsuo Kudo
 
Movable Typeトライアルの提供方式はクラウド型に
Movable Typeトライアルの提供方式はクラウド型にMovable Typeトライアルの提供方式はクラウド型に
Movable Typeトライアルの提供方式はクラウド型に
Six Apart KK
 

Similar to Djangoフレームワークのユーザーモデルと認証 (20)

5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方
 
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめコロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
PHP勉強会 LT会
PHP勉強会 LT会PHP勉強会 LT会
PHP勉強会 LT会
 
20141111 themi struct
20141111 themi struct20141111 themi struct
20141111 themi struct
 
choreonoid_ros_control を実装した話
choreonoid_ros_control を実装した話choreonoid_ros_control を実装した話
choreonoid_ros_control を実装した話
 
How To Drink Wsgi
How To Drink WsgiHow To Drink Wsgi
How To Drink Wsgi
 
Opauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証についてOpauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証について
 
Laravel LT
Laravel LTLaravel LT
Laravel LT
 
20111203 gdd2011フィードバック 公開用
20111203 gdd2011フィードバック 公開用20111203 gdd2011フィードバック 公開用
20111203 gdd2011フィードバック 公開用
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
Single sign-on system requiring authorization
Single sign-on system requiring authorizationSingle sign-on system requiring authorization
Single sign-on system requiring authorization
 
OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17
 
Ptengineトレーニング資料20211103
Ptengineトレーニング資料20211103Ptengineトレーニング資料20211103
Ptengineトレーニング資料20211103
 
20141111 明日の認証会議資料(寺田)
20141111 明日の認証会議資料(寺田)20141111 明日の認証会議資料(寺田)
20141111 明日の認証会議資料(寺田)
 
フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)フリーでできるWebセキュリティ(burp編)
フリーでできるWebセキュリティ(burp編)
 
Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!Python で OAuth2 をつかってみよう!
Python で OAuth2 をつかってみよう!
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューションOAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
 
Movable Typeトライアルの提供方式はクラウド型に
Movable Typeトライアルの提供方式はクラウド型にMovable Typeトライアルの提供方式はクラウド型に
Movable Typeトライアルの提供方式はクラウド型に
 

More from Shinya Okano

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
Shinya Okano
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
Shinya Okano
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
Shinya Okano
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
Shinya Okano
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406Shinya Okano
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Shinya Okano
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Shinya Okano
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専
Shinya Okano
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話Shinya Okano
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
Shinya Okano
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17Shinya Okano
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
Shinya Okano
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジShinya Okano
 

More from Shinya Okano (16)

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
 
Spring4Dの紹介
Spring4Dの紹介Spring4Dの紹介
Spring4Dの紹介
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
 

Djangoフレームワークのユーザーモデルと認証