OAuth入門

2012年4月24日
辻口 鷹耶
オープンソース・ソリューション・テクノロジ株式会社
http://www.osstech.co.jp/
Copyright © 2012 Open Source Solution Technology, Corp.

1

目次
●

OAuthについて
OAuthの背景➢ OAuthの歴史➢ プロトコル概要(OAuth2.0)➢●

OpenAMにおけるOAuth

Copyright © 2012 Open Source Solution Technology, Corp.

2

OAuthについて

Copyright © 2012 Open Source Solution Technology, Corp.

3

OAuthの背景
OAuth登場以前は。。。

ユーザ

写真共有サービスにある写真を印刷サービスで印刷したい印刷サービス

写真共有サービス
写真データ

Copyright © 2012 Open Source Solution Technology, Corp.

4

OAuthの背景
ユーザ
写真共有サービスへのアクセス権限を印刷サービスに委譲

ユーザと同じ権限で写真共有サービスにアクセス

印刷サービス
ユーザID/パスワード

写真共有サービス
写真データ

Copyright © 2012 Open Source Solution Technology, Corp.

5OAuthの背景
アクセス権限の委譲の問題点：
●

ユーザ

●

●

●

印刷サービス
ユーザID/パスワード後の使用のために、クライアント（印刷サービス）にもパスワードを保存しなければならない
リソースサーバー（写真共有サービス）はパスワード認証をサポートする必要がある
ユーザと同じ権限のため、リソース（写真）に対する権限を限定できない
情報漏えいのリスクが大きい

写真共有サービス

OAuth登場写真データ

Copyright © 2012 Open Source Solution Technology, Corp.

6

OAuthとはクライアント対してリソースオーナーが同意することで限定されたアクセス権を委譲するための認可のプロトコル● パスワードを共有することなく、ユーザ（リソースオーナー）がクライアントにリソースの使用を許可することが可能になる● アクセス権限を限定できる●

Copyright © 2012 Open Source Solution Technology, Corp.

7

OAuthを利用するとユーザ
アクセス権限の一部を印刷サービスに委譲限定された権限で写真共有サービスにアクセス

印刷サービス

写真共有サービス
写真データ

Copyright © 2012 Open Source Solution Technology, Corp.

8

OAuthでの役割●

リソースオーナー
リソースの所有者です。
リソースへのアクセスを許可します。

●

リソースサーバー
リソースを保持するサーバーです。
資格情報（アクセストークン）を提示したアクセス要求に応答します。

●

クライアントリソースオーナーの代理としてリソースにアクセスするアプリケーションです。

●

認可サーバー
リソースオーナーの認証し、アクセストークンをクライアントに発行するサーバーです。
Copyright © 2012 Open Source Solution Technology, Corp.

9

OAuthでの役割（例：Facebook)
Facebookユーザ

リソースオーナー

Facebook
連携アプリ

Facebook

クライアント
認可サーバー
リソースサーバー

Copyright © 2012 Open Source Solution Technology, Corp.

10

OAuthの歴史
2007/10 OAuth Core 1.0
2009/6 OAuth Core 1.0 RevisionA

OAuth1.0
2010/4 RFC 5849 The OAuth 1.0 Protocol
2010/4 The OAuth 2.0 Protocol draft-ietf-oauth-v2-00
OAuth WRAPOAuth2.0

2012/3 The OAuth 2.0 Authorization Protocol draft-ietf-oauth-v2-25

Copyright © 2012 Open Source Solution Technology, Corp.

11

OAuth1.0 の課題
Eran Hammer氏の「Introducing OAuth 2.0」より●

署名と複雑な認証仕様で求められる暗号化手法が複雑で実装しにくい。

●

WEBアプリケーション以外で上手く機能しなかった
策定当初はデスクトップアプリやモバイルデバイスのフローもあったが、すべて機能するようにマージした結果、機能しなかった。

●

スケールしにくい
捨てられる一時認証情報を保持しておく必要がある。
クライアントの認証情報とアクセストークンを同時に使用するため、認可サーバーとリソースサーバーを分けにくい。

Copyright © 2012 Open Source Solution Technology, Corp.

12

OAuth2.0では●署名と複雑な認証独自の暗号化は行わず、HTTPSを利用してセキュリティを確保。
●
WEBアプリケーション以外で上手く機能しなかった➔

WEBアプリケーション以外のフローも仕様化された。
●
スケールしにくい➔

長期間有効なアクセストークンを発行するのではなく、一時的なトークンを発行して認可状態を継続できるようになった。
➔
サーバーは認可サーバーとリソースサーバーに役割が分離された。
➔Copyright © 2012 Open Source Solution Technology, Corp.

13

プロトコル概要(OAuth2.0)

Copyright © 2012 Open Source Solution Technology, Corp.

14

基本フロー
リソース
オーナー

クライアント

認可サーバー

認可リクエスト

リソース
サーバー

リソースオーナーから認可を取得する

認可グラント

認可サーバーでクライアントを認証し、認可グラントと引き換えにアクセストークンを取得する

認可グラント
アクセストークン

アクセストークンを提示してリソースにアクセスする

アクセストークン
リソース

Copyright © 2012 Open Source Solution Technology, Corp.

15

フロー(認可コード)
リソースオーナー（&ユーザエージェント）

クライアント

認可サーバー

リソース
サーバー

ブラウザ

クライアントがWEBアプリケー
ションのケースでは、クライアントは認可サーバーを通して認可グラントを取得するフローとなっている。

認可コード

認可コード
アクセストークン
アクセストークン
リソース
Copyright © 2012 Open Source Solution Technology, Corp.

16

フロー(認可コード)
リソースオーナー（&ユーザエージェント）

クライアント

認可サーバー

リソース
サーバー

ブラウザ

(A)
(B)

(A)クライアントへのアクセス等
リソースオーナーの操作によりリソースへアクセスする必要性の発生します。

(C)
(D)

認可コード

(B)認可要求
認可コード
アクセストークン

クライアントはユー
ザーエージェントを認可サーバー(認可エンドポイント)にリダイレクトします。

アクセストークン
リソース
Copyright © 2012 Open Source Solution Technology, Corp.

17

フロー(認可コード)
リソースオーナー（&ユーザエージェント）

クライアント

認可サーバー

リソース
サーバー

ブラウザ

(A)
(B)

(C)認可
認可サーバーはリソースオーナーを認証し、アクセスの許可/拒否をたずねます。

(C)
(D)

認可コード

(D)認可コード返却

認可コード
アクセストークン
アクセストークン

アクセスが許可された
場合、認可サーバーはユーザーエージェントをクライアントにリダイレクトします。その際、認可コードをURLに付加します。

リソース
Copyright © 2012 Open Source Solution Technology, Corp.

18

OpenAMにおけるOAuth

Copyright © 2012 Open Source Solution Technology, Corp.

19ロードマップ●OpenAM10.0➢●

OAuth認証機能が追加された

OpenAM10.1➢

OAuth プロバイダ機能が追加される

Copyright © 2012 Open Source Solution Technology, Corp.

20

OAuth2.0 Authentication Module
OAuthに対応しているサービスのユーザで認証できる認証モジュール● OAuth2.0に対応しているサービスの例●

Facebook➢ Google Apps
➢ Windows Live
➢

●

etc

取得したユーザ情報は設定により様々な取り扱いが可能
データストアの既存ユーザにマッピング➢ 匿名ユーザにマッピング➢ セッション情報として保存➢ データストアに保存➢Copyright © 2012 Open Source Solution Technology, Corp.

21

設定●OAuthプロバイダにOpenAMをアプリケーションとして登録する※例はWindows Liveアカウントで認証する際のものです
Copyright © 2012 Open Source Solution Technology, Corp.

22

設定
●

OpenAMの管理コンソールでOAuth認証モジュールを作成する

Copyright © 2012 Open Source Solution Technology, Corp.

23

設定
●

OAuth認証モジュールの設定を行う
OAuthプロバイダから提供されるクライアント識別子
OAuthプロバイダから提供されるクライアントのパスワード
認可コードを提供するサーバーのURL
アクセストークンを提供するサーバーのURL
ユーザ情報を提供するサーバーのURL
ユーザ情報の要求範囲
OAuthサーバーからOpenAMへリダイレクトさせる際のURL
サーバー名以外は固定※例はWindows Liveアカウントで認証する際のものです
Copyright © 2012 Open Source Solution Technology, Corp.

24

設定
OAuthアカウントをOpenAMにマップするクラス
OAuthアカウントをOpenAMにマップする際にキーとなる属性

Oauthアカウント属性をOpenAMにOAuthアカウント属性をOpenAMにマップするクラス
OpenAMにマップする属性※例はWindows Liveアカウントで認証する際のものです
Copyright © 2012 Open Source Solution Technology, Corp.

25

設定
セッションにOAuthプロバイダから取得した属性を保存するか
OAuthプロバイダのプロファイルのうちEmailに該当する属性ユーザがデータストアに存在しない場合に自動でアカウントを作成するか自動でアカウントを作成する場合にパスワードを設定しアクティベーションコードをメールで送付するか※例はWindows Liveアカウントで認証する際のものです

Copyright © 2012 Open Source Solution Technology, Corp.

26

設定

存在しないユーザを匿名ユーザにマップするか匿名ユーザの名称
OAuthプロバイダのログアウトのURLログアウトの動作を指定※例はWindows Liveアカウントで認証する際のものです

Copyright © 2012 Open Source Solution Technology, Corp.

27

設定
メールを送信するクラス

アクティベーションコードをメールで送信する際に使われるメール設定※例はWindows Liveアカウントで認証する際のものです

Copyright © 2012 Open Source Solution Technology, Corp.

28

デモ●OpenAMにアクセス⇒Windows Liveの認証画面へ

Copyright © 2012 Open Source Solution Technology, Corp.

29

デモ
●

アクセスの許可を問われる

Copyright © 2012 Open Source Solution Technology, Corp.

30

デモ
●

認証成功

※ここでは匿名ユーザにマップしています

Copyright © 2012 Open Source Solution Technology, Corp.

31

OAuth認証の使いどころ
OAuthプロバイダはFacebookやtwitterといったSNSが多い● OAuth認証モジュールの特徴は、OAuthプロバイダのアカウントをOpenAMに取り込める所➔ 不特定多数のユーザを対象としたサービスに向いている➔ 教育機関や企業にはSNSとの連携は難しい●

Copyright © 2012 Open Source Solution Technology, Corp.

32

OAuth認証の使いどころ
OAuth認証を利用すれば、OAuthプロバイダがもつ情報を利用できる➔ OpenAMのデータストアに持つ必要がなくなりデータの一元管理が可能になる？
●Copyright © 2012 Open Source Solution Technology, Corp.

33参考文献●OAuth Community Site
⇒OAuthの仕様
http://oauth.net/●

Introducting OAuth2.0⇒OAuth2.0策定の背景
http://hueniverse.com/2010/05/introducing-oauth-2-0/●

OAuth 2.0 Authentication (Facebook, Google, MSN, etc)
⇒OAuth認証モジュールの概要
https://wikis.forgerock.org/confluence/display/openam/OAuth+2.
0+Authentication+%28Facebook,+Google,+MSN,+etc%29

Copyright © 2012 Open Source Solution Technology, Corp.

34

参考文献
●

OAuth 2.0 (Live Connect Developer Center)⇒Windows LiveのOAuthの仕様
http://msdn.microsoft.com/en-us/library/live/hh243647.aspx●

Scopes and permissions (Live Connect Developer Center)⇒Windows Liveのscopeの仕様
http://msdn.microsoft.com/en-us/library/live/hh243646.aspx

Copyright © 2012 Open Source Solution Technology, Corp.

35

オープンソース・ソリューション・テクノロジ株式会社
http://www.osstech.co.jp/
Copyright © 2012 Open Source Solution Technology, Corp.

36