SlideShare a Scribd company logo
1 of 59
Download to read offline
MPS 第23回ミーティング (2015/3/14) 資料

Python で OAuth を使ってみよう!
Morning Project Samurai 代表
金子純也
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Morning Project Samurai (MPS)
• Morning

- 土曜の朝を有意義に
• Project

- プロジェクト指向
• Samurai

- 謙虚に学習

- プロジェクトをバッサバッサ

と斬りまくる
プロジェクト
リーダー
シップ
メンバー
シップ
成果
人脈
UP!
UP!
UP!
キャリア
知識・技術
UP!
UP!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
これまでに行った活動
• 勉強会 (プレゼン)

- Webアプリの安全性について(XSS実習)

- コンピュータが動くメカニズム(論理回路基礎)

- プログラムテストについて

- JavaScript 入門 (実習)

- Python を用いた Youtube 動画リストの作成

(プログラム基礎、オブジェクト指向、サーバーからのデータ取得、

 ドキュメントの検索と読み方、UML基礎)

- Python から WebAPI を使ってみよう!

- Python で簡易キャッシュを実装してみよう!
• プロジェクト

- MPS HP

- ぶらさぼり(東京メトロオープンデータ活用コンテスト)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
ぶらサボり
(東京メトロオプンデータコンテスト出展作品)
Python + Django で開発
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
我々の今後の主な活動の一部
• ぶらサボりのコードの理解
• ぶらサボりのアップデート&リファクタリング
• ぶらサボりの海外展開(Burasabori Abroad)
• ダイワハウスのスマートハウスコンテスト
• 手軽な情報交換デバイス
• サーバー環境の整備
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
今回作成するアプリ
OAuth を通して Google から 

特定ユーザーの情報にアクセスする承認をもらい、
承認を受けた情報を表示する
アプリ
Virtualenv, Django, Heroku を用いて開発

するケロ!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティってなんだろう
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティってなんだろう
• 何詞?
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティってなんだろう
• 何詞?

- 名詞
• 何を指す名詞?
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティってなんだろう
• 何詞?

- 名詞
• 何を指す名詞?

- 安全な状態
• コンピュータにおける安全な状態ってどんな状態?
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティ
A system condition in which system resources are free
from unauthorized access and from unauthorized or
accidental change, destruction, or loss.
(RFC 4949)
リソースが承認されていないアクセス、変更、破壊、

消失に脅かされることのないシステムの状態
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティを確保する方法
の例を考えてみよう!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
認証 (Authentication)
The process of verifying a claim that a system entity
or system resource has a certain attribute value.
(RFC 4949)
システムの要素やリソースがある特定の属性値を

持っているか検証するプロセス
例: パスワード認証、公開 認証、ケルベロス認証
(出典: https://www.apple.com/)
君は確かに
ぶらガエル君!ケロ!!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
承認 (Authorization)
A process for granting approval to a system entity to
access a system resource.
(RFC 4949)
システムの要素がシステムリソースにアクセスする権利を
承認するプロセス
例: パーミッションによるファイルへのアクセス制御
(出典: https://www.apple.com/)
いいよ!
家計簿.xls

開きたいケロ!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティ確保のための2ステップ
• 認証 (Authentication)

システムにアクセスしてきた者 (物) が誰か (何か)
特定する
• 承認 (Authorization)

システムにアクセスしてきた者 (物) のシステム上の
権利を特定する
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
OAuth とは
The OAuth 2.0 authorization framework enables 

a third-party application to obtain limited access to an
HTTP service, […]
(出典: RFC 6749)
サードパーティー製のアプリケーションの
HTTP サービスへの制約付きアクセスを可能とする、

承認フレームワーク
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
OAuth とは
The OAuth 2.0 authorization framework enables 

a third-party application to obtain limited access to an
HTTP service, […]
(出典: RFC 6749)
サードパーティー製のアプリケーションの
HTTP サービスへの制約付きアクセスを可能とする、

承認フレームワーク
「誰がアプリケーションにアクセスしているか」
「サードパーティ製のアプリケーションが

 どのリソースにアクセス可能か」
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
OAuth 4 人の登場人物
• リソースオーナー

- リソースの本来の持ち主
• リソースサーバー

- リソースオーナーからリソースを預かっているサーバー
• クライアント

- リソースサーバーにあるリソースオーナーの情報を

使用したいアプリケーション
• 承認サーバー

- クライアントにリソースサーバー上のリソースを使用する権利を

承認するサーバー
OAuth による承認とリソースの取得
(参考: RFC6749)
クライアント
(例: Doorkeeper)
リソースオーナー
(例: あなた)
承認リクエスト
(Authorization Request)
承認許可
(Authorization Grant)
承認サーバー
(例: Twitter,
Facebook)
リソースサーバー
(例: Twitter,
Facebook)
承認許可
(Authorization Grant)
アクセストークン
(Access Token)
保護されたリソース
(Protected Resource)
アクセストークン
(Access Token)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
気になるところ (問題編)
• 情報 (リソース) を本人 (リソースオーナー) でなく、

第三者 (リソースサーバー) から得るメリットは?
• 情報 (リソース) を第三者 (リソースサーバー) から

得る際にOAuth を使うメリットは?
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
気になるところ (回答編)
• 情報 (リソース) を本人 (リソースオーナー) でなく、

第三者 (リソースサーバー) から得るメリットは?

- ユーザーエクスペリエンスの向上

- 自分のサーバーで管理する個人情報の削減
• 情報 (リソース) を第三者 (リソースサーバー) から

得る際にOAuth を使うメリットは?

- 標準化が進んでおり開発が容易

- ユーザー認証情報の漏洩防止
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
OAuth の嬉しいところ
• リソースオーナー

- 自分の認証用パスワードの公開が不要

- 同じ情報をサービス毎に入力する手間の削減
• クライアント

- 他のサービスのリソースを容易に利用可能

- 自分のサーバーで管理する個人情報の削減

- ユーザーエクスペリエンスの向上
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
4つの承認方法
• 承認コード認可 (Authorization Code Grant)
• 暗黙的認可 (Implicit Grant)
• リソースオーナーパスワード認証情報認可

(Resource Owner Password Credentials Grant)
• クライアント認証情報認可 (Client Credentials Grant)
(参考: RFC6749)第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
承認コード認可

(Authorization Code Grant)
(参考: RFC6749)
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
(例: あなた)
クライアント
(例: Doorkeeper)
承認サーバー
(例: Twitter,
Facebook)
クライアントID
リダイレクション URI (A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
(例: Twitter,
Facebook)
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
OAuth を用いた承認スタート!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
GitHub に Doorkeeper が渡す情報
https://github.com/login?
return_to=/login/oauth/authorize?
client_id=515d17e1c4ffbc7816b7&
redirect_uri=

https://manage.doorkeeper.jp/user/auth/github/callback&
response_type=code&
scope=user email&
state=718f3af0d28620437fcb9b0ed0a72868665cccb59aabc148
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
(例: あなた)
クライアント
(例: Doorkeeper)
承認サーバー
(例: Twitter,
Facebook)
クライアントID
リダイレクション URI (A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
(例: Twitter,
Facebook)
(F)アクセストークン
(G) リソース
(参考: RFC6749)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
(例: あなた)
クライアント
(例: Doorkeeper)
承認サーバー
(例: Twitter,
Facebook)
クライアントID
リダイレクション URI (A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
(例: Twitter,
Facebook)
(F)アクセストークン
(G) リソース
(参考: RFC6749)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Virtualenv のインストール
仮想の Python 実行環境を構築するアプリ
1. virtualenv 12.0.7 をダウンロード
2. コマンドラインで下記を実行

$ tar xvfz virtualenv-12.0.7.tar.gz

$ cd virtualenv-12.0.7

$ sudo python3 setup.py install
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Virtualenv を使ってみよう
1. 仮想環境の作成

$ mkdir mps_env

$ virtualenv mps_env
2. 環境の切り替え

$ mv mps_env

$ source bin/activate
3. 環境の確認

(mps_venv)$ which python

mps_env/bin/python にパスが通っていれば OK
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Django のインストール
Python 上で動く

ウェブアプリケーションフレームワーク
1. インストール

(mps_env)$ pip install django
3. インストールできているか確認

(mps_env)$ which django-admin.py

mps_venv/bin/django-admin.py にパスが

通っていれば OK
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Heroku への登録と設定
1. www.heroku.com にアクセスしてユーザー登録
2. Documentation -> Get Started -> Python -> Setup

と進み、Heroku Toolbelt をダウンロードして

インストール
3. (mps_env) $ heroku login

コマンドラインから Heroku にログインできれば OK
4. 今回のアプリの動作に必要なモジュールのインストール

(mps_env) $ pip install django-toolbelt

(mps_env) $ pip install xmltodict
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Heroku へのアプリケーション登録
1. アプリケーションの鋳型のダウンロード

(mps_env)$ git clone https://github.com/
morningprojectsamurai/20150314MPS.git
2. アプリケーションの Heroku への登録

(i) (mps_env) $ cd 20150314MPS

(ii) (mps_env) $ heroku create
3. Heroku 上のアプリケーションの更新

(i) (mps_env) $ git add —all

(ii) (mps_env) $ git commit -m “any comment”

(iii) (mps_env) $ git push heroku master
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Google の設定
1. Google Developer Console にアクセス

https://console.developers.google.com/project
2. プロジェクト作成

Create Project をクリックして必要事項の入力
3. クライアント ID の作成

(i) 作成したプロジェクト名 -> APIs & Auth -> Credentials

-> Create new Client ID をクリック

(ii) Web Application を選択し、AUTHORIZED REDIRECT URI に

下記 URL を記入してCreate Client ID をクリック

URL: 作成した Heroku 上のウェブアプリのURL/callback/
4. プロダクト名の設定

Consent Screen をクリックし、PRODUCT NAME を適当に

埋めて save をクリック 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
目次
• MPS とは
• 今回作成するアプリ
• セキュリティの基礎知識 (認証と承認)
• OAuth とは
• 認証コード認可 (Authorization Code Grant)
• アプリ作成の下準備 

(Virtualenv, Django, Heroku, Google)
• アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
今回のアプリの目的
OAuth を通して Google から 

特定ユーザーの情報にアクセスする承認をもらい、
承認を受けた情報を表示する
Virtualenv, Django, Heroku を用いて開発

するケロ!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Q. (?) をみんなで埋めてみよう!
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( ? )
クライアント
( ? )
承認サーバー
( ? )
クライアントID
リダイレクション URI (A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( ? )
(F)アクセストークン
(G) リソース
(参考: RFC6749)
第23回 MPS ミーティング資料

(2015/03/14) (c) Junya Kaneko
A. 回答例
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
(参考: RFC6749)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
各サーバーのエンドポイント
• 承認サーバー

- https://accounts.google.com/o/oauth2/auth

- https://accounts.google.com/o/oauth2/token
• リソースサーバー

- https://www.googleapis.com/oauth2/v2/userinfo
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
必要な画面と遷移を考えてみよう!
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
初期画面 承認画面
プロフィール画面
第23回 MPS ミーティング資料
(2015/03/14) (c) Junya Kaneko
初期画面 承認画面
プロフィール画面
secure-crag-1372.herokuapp.com
secure-crag-1372.herokuapp.com/callback/
第23回 MPS ミーティング資料
(2015/03/14) (c) Junya Kaneko
画面と処理の対応関係 - 初期画面 -
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
画面と処理の対応関係 - 初期画面 -
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
画面と処理の対応関係 - 承認画面 -
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
画面と処理の対応関係 - 承認画面 -
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
画面と処理の対応関係 - プロフィール画面 -
ユーザーエージェント
(例: Google Chrome)
リソースオーナー
( Heroku 上のWebApp のユーザー )
クライアント
( Heroku 上の WebApp )
承認サーバー
( https://
accounts.google.com/ )
クライアントID
リダイレクション URI
(A)
(A)
(B)
(B)
ユーザー認証情報
(C)
承認コード
(C)
クライアントID
リダイレクション URI
ユーザー認証情報
(D)
認証コード
リダイレクション URI
(E)
アクセストークン
オプショナル・リフレッシュトークン
リソースサーバー
( https://
www.googleapis.com/ )
(F)アクセストークン
(G) リソース
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
Django における画面の設計
• views.py に画面に関わる処理を書く
• 1つの画面に対して1つのクラス
例: google/views.py
class WelcomeView(View):
def get(self, request):
# GET メソッドでリクエストを受けた時の処理
def post(self, request):
# POST メソッドでリクエストを受けた時の処理
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
画面、クラス、 URL の対応付け
• 初期画面

クラス: WelcomeView

URL: Heroku 上のアプリのアドレス/
• プロフィール画面

クラス: CallbackView

URL: Heroku 上のアプリのアドレス/callback/
この対応付けは、urls.py を使って行われるケロ。

今回は、すでに設定済みだケロ。
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
まずは自分で作ってみよう!
• 20150314MPS/google/views.py を編集

(できたら Heroku 上のアプリを更新)
• 主に必要な知識は urllib と WebAPI の使い方

(前回までの企画を思い出そう!)
• Google OAuth のドキュメント

https://developers.google.com/accounts/docs/
OAuth2WebServer
まずは、ドキュメントを読みながら試行錯誤するケロ!
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
セキュリティを確保する方法例
• ファイアウォール

- Linux の iptables

- ルーターのパケットフィルタリング機能
• ログイン機能

- Windows や Mac OSX のログイン機能

- GMail や Hotmail へのログイン機能
• パーミッション機能

- Windows や Mac OSX のファイルパーミッション機能
• SSL (Secure Socket Layer)

- https で始まるウェブサイト (MPS のウェブサイトなど)
第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko

More Related Content

What's hot

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜Masaru Kurahayashi
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたKohei Nakamura
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?naoki koyama
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析Yuki Mizuno
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...NTT DATA Technology & Innovation
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析政雄 金森
 

What's hot (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 

Viewers also liked

PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう2bo 2bo
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLIemasaka
 
プログラミングで少し世界を広げよう(MPS)
プログラミングで少し世界を広げよう(MPS)プログラミングで少し世界を広げよう(MPS)
プログラミングで少し世界を広げよう(MPS)Project Samurai
 
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -Project Samurai
 
Idcon11 implicit demo
Idcon11 implicit demoIdcon11 implicit demo
Idcon11 implicit demoRyo Ito
 
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -Project Samurai
 
協調フィルタリング入門
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門hoxo_m
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景Tatsuo Kudo
 
論文に関する基礎知識2016
 論文に関する基礎知識2016 論文に関する基礎知識2016
論文に関する基礎知識2016Mai Otsuki
 
Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築崇之 清水
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAmazon Web Services Japan
 
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hackYusuke Yamamoto
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 

Viewers also liked (13)

PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLI
 
プログラミングで少し世界を広げよう(MPS)
プログラミングで少し世界を広げよう(MPS)プログラミングで少し世界を広げよう(MPS)
プログラミングで少し世界を広げよう(MPS)
 
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
Pythonで画像処理をやってみよう!第2回 - 動く物体の抜き出し -
 
Idcon11 implicit demo
Idcon11 implicit demoIdcon11 implicit demo
Idcon11 implicit demo
 
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
Pythonで画像処理をやってみよう! 第1回 - ヒストグラムと濃度変換 -
 
協調フィルタリング入門
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
論文に関する基礎知識2016
 論文に関する基礎知識2016 論文に関する基礎知識2016
論文に関する基礎知識2016
 
Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築Amazon API Gateway を活用したゲームサーバー構築
Amazon API Gateway を活用したゲームサーバー構築
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
 
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 

Similar to Python で OAuth2 をつかってみよう!

安全なWebアプリ構築1回
安全なWebアプリ構築1回安全なWebアプリ構築1回
安全なWebアプリ構築1回Project Samurai
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampMasahiro NAKAYAMA
 
OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17Tatsuo Kudo
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱Koichi ITO
 
Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Shinya Nakajima
 
1分で分かる SoftLayer 監視入門
1分で分かる SoftLayer 監視入門1分で分かる SoftLayer 監視入門
1分で分かる SoftLayer 監視入門Masahito Zembutsu
 
アジャイル事例紹介
アジャイル事例紹介アジャイル事例紹介
アジャイル事例紹介hiko99
 
さくらインターネットベアメタル自動化への挑戦
さくらインターネットベアメタル自動化への挑戦さくらインターネットベアメタル自動化への挑戦
さくらインターネットベアメタル自動化への挑戦Hiroki Ito
 
Otrs&OTOBO_document 20210402
Otrs&OTOBO_document 20210402Otrs&OTOBO_document 20210402
Otrs&OTOBO_document 20210402IO Architect Inc.
 
Message Analyzer 再入門【2】
Message Analyzer 再入門【2】Message Analyzer 再入門【2】
Message Analyzer 再入門【2】彰 村地
 
DevOps and Compliance and Security
DevOps and Compliance and SecurityDevOps and Compliance and Security
DevOps and Compliance and SecurityKazushi Kamegawa
 
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナー
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナーRICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナー
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナーcontest-theta360
 
ADFS クレームルール言語 Deep Dive
ADFS クレームルール言語 Deep DiveADFS クレームルール言語 Deep Dive
ADFS クレームルール言語 Deep DiveSuguru Kunii
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
Interop2016-openstack-user-group-mizuno
Interop2016-openstack-user-group-mizunoInterop2016-openstack-user-group-mizuno
Interop2016-openstack-user-group-mizunoshintaro mizuno
 
Extension & Triggerを活用しよう
Extension & Triggerを活用しようExtension & Triggerを活用しよう
Extension & Triggerを活用しようTsukasa Takagi
 
AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ Yasuhiro Matsuo
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話ShunyoKawamoto
 
Cloudflareを活用したWebパフォーマンスチューニング
Cloudflareを活用したWebパフォーマンスチューニングCloudflareを活用したWebパフォーマンスチューニング
Cloudflareを活用したWebパフォーマンスチューニングYoichiro Takehora
 

Similar to Python で OAuth2 をつかってみよう! (20)

安全なWebアプリ構築1回
安全なWebアプリ構築1回安全なWebアプリ構築1回
安全なWebアプリ構築1回
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccamp
 
OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17OAuth Security Workshop 2017 #osw17
OAuth Security Workshop 2017 #osw17
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)
 
1分で分かる SoftLayer 監視入門
1分で分かる SoftLayer 監視入門1分で分かる SoftLayer 監視入門
1分で分かる SoftLayer 監視入門
 
Oss事例紹介資料20141111 明日の認証会議 掲載用
Oss事例紹介資料20141111 明日の認証会議 掲載用Oss事例紹介資料20141111 明日の認証会議 掲載用
Oss事例紹介資料20141111 明日の認証会議 掲載用
 
アジャイル事例紹介
アジャイル事例紹介アジャイル事例紹介
アジャイル事例紹介
 
さくらインターネットベアメタル自動化への挑戦
さくらインターネットベアメタル自動化への挑戦さくらインターネットベアメタル自動化への挑戦
さくらインターネットベアメタル自動化への挑戦
 
Otrs&OTOBO_document 20210402
Otrs&OTOBO_document 20210402Otrs&OTOBO_document 20210402
Otrs&OTOBO_document 20210402
 
Message Analyzer 再入門【2】
Message Analyzer 再入門【2】Message Analyzer 再入門【2】
Message Analyzer 再入門【2】
 
DevOps and Compliance and Security
DevOps and Compliance and SecurityDevOps and Compliance and Security
DevOps and Compliance and Security
 
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナー
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナーRICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナー
RICOH THETA x IoT デベロッパーズ コンテスト 第2回クラウドAPIセミナー
 
ADFS クレームルール言語 Deep Dive
ADFS クレームルール言語 Deep DiveADFS クレームルール言語 Deep Dive
ADFS クレームルール言語 Deep Dive
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
Interop2016-openstack-user-group-mizuno
Interop2016-openstack-user-group-mizunoInterop2016-openstack-user-group-mizuno
Interop2016-openstack-user-group-mizuno
 
Extension & Triggerを活用しよう
Extension & Triggerを活用しようExtension & Triggerを活用しよう
Extension & Triggerを活用しよう
 
AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ
 
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
 
Cloudflareを活用したWebパフォーマンスチューニング
Cloudflareを活用したWebパフォーマンスチューニングCloudflareを活用したWebパフォーマンスチューニング
Cloudflareを活用したWebパフォーマンスチューニング
 

More from Project Samurai

数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12Project Samurai
 
Python で画像処理をやってみよう! -SIFT 第7回-
Python で画像処理をやってみよう! -SIFT 第7回-Python で画像処理をやってみよう! -SIFT 第7回-
Python で画像処理をやってみよう! -SIFT 第7回-Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9Project Samurai
 
Python で画像処理をやってみよう! -SIFT 第6回-
Python で画像処理をやってみよう! -SIFT 第6回-Python で画像処理をやってみよう! -SIFT 第6回-
Python で画像処理をやってみよう! -SIFT 第6回-Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7Project Samurai
 
Python で画像処理をやってみよう! -SIFT 第5回-
Python で画像処理をやってみよう! -SIFT 第5回-Python で画像処理をやってみよう! -SIFT 第5回-
Python で画像処理をやってみよう! -SIFT 第5回-Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6Project Samurai
 
Make your Artificial Intelligence
Make your Artificial IntelligenceMake your Artificial Intelligence
Make your Artificial IntelligenceProject Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2Project Samurai
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1Project Samurai
 
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -Project Samurai
 
Instagram API を使ってウェブアプリを作ろう!
Instagram API を使ってウェブアプリを作ろう!Instagram API を使ってウェブアプリを作ろう!
Instagram API を使ってウェブアプリを作ろう!Project Samurai
 
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -Project Samurai
 
JavaScript でパックマン!第7回 (一旦最終回)
JavaScript でパックマン!第7回 (一旦最終回)JavaScript でパックマン!第7回 (一旦最終回)
JavaScript でパックマン!第7回 (一旦最終回)Project Samurai
 
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -Project Samurai
 
JavaScript でパックマン!第6回
JavaScript でパックマン!第6回JavaScript でパックマン!第6回
JavaScript でパックマン!第6回Project Samurai
 

More from Project Samurai (20)

数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
数学的基礎から学ぶ Deep Learning (with Python) Vol. 12
 
Python で画像処理をやってみよう! -SIFT 第7回-
Python で画像処理をやってみよう! -SIFT 第7回-Python で画像処理をやってみよう! -SIFT 第7回-
Python で画像処理をやってみよう! -SIFT 第7回-
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
数学的基礎から学ぶ Deep Learning (with Python) Vol. 9
 
Python で画像処理をやってみよう! -SIFT 第6回-
Python で画像処理をやってみよう! -SIFT 第6回-Python で画像処理をやってみよう! -SIFT 第6回-
Python で画像処理をやってみよう! -SIFT 第6回-
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
数学的基礎から学ぶ Deep Learning (with Python) Vol. 8
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
数学的基礎から学ぶ Deep Learning (with Python) Vol. 7
 
Python で画像処理をやってみよう! -SIFT 第5回-
Python で画像処理をやってみよう! -SIFT 第5回-Python で画像処理をやってみよう! -SIFT 第5回-
Python で画像処理をやってみよう! -SIFT 第5回-
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
数学的基礎から学ぶ Deep Learning (with Python) Vol. 6
 
Mpsy20160423
Mpsy20160423Mpsy20160423
Mpsy20160423
 
Make your Artificial Intelligence
Make your Artificial IntelligenceMake your Artificial Intelligence
Make your Artificial Intelligence
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
数学的基礎から学ぶ Deep Learning (with Python) Vol. 4
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
数学的基礎から学ぶ Deep Learning (with Python) Vol. 3
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
数学的基礎から学ぶ Deep Learning (with Python) Vol. 2
 
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
数学的基礎から学ぶ Deep Learning (with Python) Vol. 1
 
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
Python で画像処理をやってみよう!第11回 - SIFT Vol.1 キーポイント候補 -
 
Instagram API を使ってウェブアプリを作ろう!
Instagram API を使ってウェブアプリを作ろう!Instagram API を使ってウェブアプリを作ろう!
Instagram API を使ってウェブアプリを作ろう!
 
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
Pythonで画像処理をやってみよう!第8回 - Scale-space 第7回 -
 
JavaScript でパックマン!第7回 (一旦最終回)
JavaScript でパックマン!第7回 (一旦最終回)JavaScript でパックマン!第7回 (一旦最終回)
JavaScript でパックマン!第7回 (一旦最終回)
 
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
Pythonで画像処理をやってみよう!第7回 - Scale-space 第6回 -
 
JavaScript でパックマン!第6回
JavaScript でパックマン!第6回JavaScript でパックマン!第6回
JavaScript でパックマン!第6回
 

Python で OAuth2 をつかってみよう!

  • 1. MPS 第23回ミーティング (2015/3/14) 資料
 Python で OAuth を使ってみよう! Morning Project Samurai 代表 金子純也 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 2. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 3. Morning Project Samurai (MPS) • Morning
 - 土曜の朝を有意義に • Project
 - プロジェクト指向 • Samurai
 - 謙虚に学習
 - プロジェクトをバッサバッサ
 と斬りまくる プロジェクト リーダー シップ メンバー シップ 成果 人脈 UP! UP! UP! キャリア 知識・技術 UP! UP! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 4. これまでに行った活動 • 勉強会 (プレゼン)
 - Webアプリの安全性について(XSS実習)
 - コンピュータが動くメカニズム(論理回路基礎)
 - プログラムテストについて
 - JavaScript 入門 (実習)
 - Python を用いた Youtube 動画リストの作成
 (プログラム基礎、オブジェクト指向、サーバーからのデータ取得、
  ドキュメントの検索と読み方、UML基礎)
 - Python から WebAPI を使ってみよう!
 - Python で簡易キャッシュを実装してみよう! • プロジェクト
 - MPS HP
 - ぶらさぼり(東京メトロオープンデータ活用コンテスト) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 5. 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 6. ぶらサボり (東京メトロオプンデータコンテスト出展作品) Python + Django で開発 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 7. 我々の今後の主な活動の一部 • ぶらサボりのコードの理解 • ぶらサボりのアップデート&リファクタリング • ぶらサボりの海外展開(Burasabori Abroad) • ダイワハウスのスマートハウスコンテスト • 手軽な情報交換デバイス • サーバー環境の整備 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 8. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 9. 今回作成するアプリ OAuth を通して Google から 
 特定ユーザーの情報にアクセスする承認をもらい、 承認を受けた情報を表示する アプリ Virtualenv, Django, Heroku を用いて開発
 するケロ! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 10. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 12. セキュリティってなんだろう • 何詞? 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 13. セキュリティってなんだろう • 何詞?
 - 名詞 • 何を指す名詞? 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 14. セキュリティってなんだろう • 何詞?
 - 名詞 • 何を指す名詞?
 - 安全な状態 • コンピュータにおける安全な状態ってどんな状態? 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 15. セキュリティ A system condition in which system resources are free from unauthorized access and from unauthorized or accidental change, destruction, or loss. (RFC 4949) リソースが承認されていないアクセス、変更、破壊、
 消失に脅かされることのないシステムの状態 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 17. 認証 (Authentication) The process of verifying a claim that a system entity or system resource has a certain attribute value. (RFC 4949) システムの要素やリソースがある特定の属性値を
 持っているか検証するプロセス 例: パスワード認証、公開 認証、ケルベロス認証 (出典: https://www.apple.com/) 君は確かに ぶらガエル君!ケロ!! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 18. 承認 (Authorization) A process for granting approval to a system entity to access a system resource. (RFC 4949) システムの要素がシステムリソースにアクセスする権利を 承認するプロセス 例: パーミッションによるファイルへのアクセス制御 (出典: https://www.apple.com/) いいよ! 家計簿.xls
 開きたいケロ! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 19. セキュリティ確保のための2ステップ • 認証 (Authentication)
 システムにアクセスしてきた者 (物) が誰か (何か) 特定する • 承認 (Authorization)
 システムにアクセスしてきた者 (物) のシステム上の 権利を特定する 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 20. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 21. OAuth とは The OAuth 2.0 authorization framework enables 
 a third-party application to obtain limited access to an HTTP service, […] (出典: RFC 6749) サードパーティー製のアプリケーションの HTTP サービスへの制約付きアクセスを可能とする、
 承認フレームワーク 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 22. OAuth とは The OAuth 2.0 authorization framework enables 
 a third-party application to obtain limited access to an HTTP service, […] (出典: RFC 6749) サードパーティー製のアプリケーションの HTTP サービスへの制約付きアクセスを可能とする、
 承認フレームワーク 「誰がアプリケーションにアクセスしているか」 「サードパーティ製のアプリケーションが
  どのリソースにアクセス可能か」 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 23. OAuth 4 人の登場人物 • リソースオーナー
 - リソースの本来の持ち主 • リソースサーバー
 - リソースオーナーからリソースを預かっているサーバー • クライアント
 - リソースサーバーにあるリソースオーナーの情報を
 使用したいアプリケーション • 承認サーバー
 - クライアントにリソースサーバー上のリソースを使用する権利を
 承認するサーバー
  • 24. OAuth による承認とリソースの取得 (参考: RFC6749) クライアント (例: Doorkeeper) リソースオーナー (例: あなた) 承認リクエスト (Authorization Request) 承認許可 (Authorization Grant) 承認サーバー (例: Twitter, Facebook) リソースサーバー (例: Twitter, Facebook) 承認許可 (Authorization Grant) アクセストークン (Access Token) 保護されたリソース (Protected Resource) アクセストークン (Access Token) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 25. 気になるところ (問題編) • 情報 (リソース) を本人 (リソースオーナー) でなく、
 第三者 (リソースサーバー) から得るメリットは? • 情報 (リソース) を第三者 (リソースサーバー) から
 得る際にOAuth を使うメリットは? 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 26. 気になるところ (回答編) • 情報 (リソース) を本人 (リソースオーナー) でなく、
 第三者 (リソースサーバー) から得るメリットは?
 - ユーザーエクスペリエンスの向上
 - 自分のサーバーで管理する個人情報の削減 • 情報 (リソース) を第三者 (リソースサーバー) から
 得る際にOAuth を使うメリットは?
 - 標準化が進んでおり開発が容易
 - ユーザー認証情報の漏洩防止 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 27. OAuth の嬉しいところ • リソースオーナー
 - 自分の認証用パスワードの公開が不要
 - 同じ情報をサービス毎に入力する手間の削減 • クライアント
 - 他のサービスのリソースを容易に利用可能
 - 自分のサーバーで管理する個人情報の削減
 - ユーザーエクスペリエンスの向上 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 28. 4つの承認方法 • 承認コード認可 (Authorization Code Grant) • 暗黙的認可 (Implicit Grant) • リソースオーナーパスワード認証情報認可
 (Resource Owner Password Credentials Grant) • クライアント認証情報認可 (Client Credentials Grant) (参考: RFC6749)第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 29. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 30. 承認コード認可
 (Authorization Code Grant) (参考: RFC6749) ユーザーエージェント (例: Google Chrome) リソースオーナー (例: あなた) クライアント (例: Doorkeeper) 承認サーバー (例: Twitter, Facebook) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー (例: Twitter, Facebook) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 31. OAuth を用いた承認スタート! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 32. GitHub に Doorkeeper が渡す情報 https://github.com/login? return_to=/login/oauth/authorize? client_id=515d17e1c4ffbc7816b7& redirect_uri=
 https://manage.doorkeeper.jp/user/auth/github/callback& response_type=code& scope=user email& state=718f3af0d28620437fcb9b0ed0a72868665cccb59aabc148 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 33. ユーザーエージェント (例: Google Chrome) リソースオーナー (例: あなた) クライアント (例: Doorkeeper) 承認サーバー (例: Twitter, Facebook) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー (例: Twitter, Facebook) (F)アクセストークン (G) リソース (参考: RFC6749) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 34. ユーザーエージェント (例: Google Chrome) リソースオーナー (例: あなた) クライアント (例: Doorkeeper) 承認サーバー (例: Twitter, Facebook) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー (例: Twitter, Facebook) (F)アクセストークン (G) リソース (参考: RFC6749) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 35. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 36. Virtualenv のインストール 仮想の Python 実行環境を構築するアプリ 1. virtualenv 12.0.7 をダウンロード 2. コマンドラインで下記を実行
 $ tar xvfz virtualenv-12.0.7.tar.gz
 $ cd virtualenv-12.0.7
 $ sudo python3 setup.py install 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 37. Virtualenv を使ってみよう 1. 仮想環境の作成
 $ mkdir mps_env
 $ virtualenv mps_env 2. 環境の切り替え
 $ mv mps_env
 $ source bin/activate 3. 環境の確認
 (mps_venv)$ which python
 mps_env/bin/python にパスが通っていれば OK 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 38. Django のインストール Python 上で動く
 ウェブアプリケーションフレームワーク 1. インストール
 (mps_env)$ pip install django 3. インストールできているか確認
 (mps_env)$ which django-admin.py
 mps_venv/bin/django-admin.py にパスが
 通っていれば OK 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 39. Heroku への登録と設定 1. www.heroku.com にアクセスしてユーザー登録 2. Documentation -> Get Started -> Python -> Setup
 と進み、Heroku Toolbelt をダウンロードして
 インストール 3. (mps_env) $ heroku login
 コマンドラインから Heroku にログインできれば OK 4. 今回のアプリの動作に必要なモジュールのインストール
 (mps_env) $ pip install django-toolbelt
 (mps_env) $ pip install xmltodict 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 40. Heroku へのアプリケーション登録 1. アプリケーションの鋳型のダウンロード
 (mps_env)$ git clone https://github.com/ morningprojectsamurai/20150314MPS.git 2. アプリケーションの Heroku への登録
 (i) (mps_env) $ cd 20150314MPS
 (ii) (mps_env) $ heroku create 3. Heroku 上のアプリケーションの更新
 (i) (mps_env) $ git add —all
 (ii) (mps_env) $ git commit -m “any comment”
 (iii) (mps_env) $ git push heroku master 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 41. Google の設定 1. Google Developer Console にアクセス
 https://console.developers.google.com/project 2. プロジェクト作成
 Create Project をクリックして必要事項の入力 3. クライアント ID の作成
 (i) 作成したプロジェクト名 -> APIs & Auth -> Credentials
 -> Create new Client ID をクリック
 (ii) Web Application を選択し、AUTHORIZED REDIRECT URI に
 下記 URL を記入してCreate Client ID をクリック
 URL: 作成した Heroku 上のウェブアプリのURL/callback/ 4. プロダクト名の設定
 Consent Screen をクリックし、PRODUCT NAME を適当に
 埋めて save をクリック 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 42. 目次 • MPS とは • 今回作成するアプリ • セキュリティの基礎知識 (認証と承認) • OAuth とは • 認証コード認可 (Authorization Code Grant) • アプリ作成の下準備 
 (Virtualenv, Django, Heroku, Google) • アプリ作成 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 43. 今回のアプリの目的 OAuth を通して Google から 
 特定ユーザーの情報にアクセスする承認をもらい、 承認を受けた情報を表示する Virtualenv, Django, Heroku を用いて開発
 するケロ! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 44. Q. (?) をみんなで埋めてみよう! ユーザーエージェント (例: Google Chrome) リソースオーナー ( ? ) クライアント ( ? ) 承認サーバー ( ? ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( ? ) (F)アクセストークン (G) リソース (参考: RFC6749) 第23回 MPS ミーティング資料
 (2015/03/14) (c) Junya Kaneko
  • 45. A. 回答例 ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース (参考: RFC6749) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 46. 各サーバーのエンドポイント • 承認サーバー
 - https://accounts.google.com/o/oauth2/auth
 - https://accounts.google.com/o/oauth2/token • リソースサーバー
 - https://www.googleapis.com/oauth2/v2/userinfo 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 47. 必要な画面と遷移を考えてみよう! ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 48. 初期画面 承認画面 プロフィール画面 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 50. 画面と処理の対応関係 - 初期画面 - ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 51. ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 画面と処理の対応関係 - 初期画面 - 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 52. 画面と処理の対応関係 - 承認画面 - ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 53. 画面と処理の対応関係 - 承認画面 - ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 54. 画面と処理の対応関係 - プロフィール画面 - ユーザーエージェント (例: Google Chrome) リソースオーナー ( Heroku 上のWebApp のユーザー ) クライアント ( Heroku 上の WebApp ) 承認サーバー ( https:// accounts.google.com/ ) クライアントID リダイレクション URI (A) (A) (B) (B) ユーザー認証情報 (C) 承認コード (C) クライアントID リダイレクション URI ユーザー認証情報 (D) 認証コード リダイレクション URI (E) アクセストークン オプショナル・リフレッシュトークン リソースサーバー ( https:// www.googleapis.com/ ) (F)アクセストークン (G) リソース 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 55. Django における画面の設計 • views.py に画面に関わる処理を書く • 1つの画面に対して1つのクラス 例: google/views.py class WelcomeView(View): def get(self, request): # GET メソッドでリクエストを受けた時の処理 def post(self, request): # POST メソッドでリクエストを受けた時の処理 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 56. 画面、クラス、 URL の対応付け • 初期画面
 クラス: WelcomeView
 URL: Heroku 上のアプリのアドレス/ • プロフィール画面
 クラス: CallbackView
 URL: Heroku 上のアプリのアドレス/callback/ この対応付けは、urls.py を使って行われるケロ。
 今回は、すでに設定済みだケロ。 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 57. まずは自分で作ってみよう! • 20150314MPS/google/views.py を編集
 (できたら Heroku 上のアプリを更新) • 主に必要な知識は urllib と WebAPI の使い方
 (前回までの企画を思い出そう!) • Google OAuth のドキュメント
 https://developers.google.com/accounts/docs/ OAuth2WebServer まずは、ドキュメントを読みながら試行錯誤するケロ! 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko
  • 58.
  • 59. セキュリティを確保する方法例 • ファイアウォール
 - Linux の iptables
 - ルーターのパケットフィルタリング機能 • ログイン機能
 - Windows や Mac OSX のログイン機能
 - GMail や Hotmail へのログイン機能 • パーミッション機能
 - Windows や Mac OSX のファイルパーミッション機能 • SSL (Secure Socket Layer)
 - https で始まるウェブサイト (MPS のウェブサイトなど) 第23回 MPS ミーティング資料 (2015/03/14) (c) Junya Kaneko