21. C1
R
● OAuth の重要な「セキュリティ上の前提」
○ 論理的な分離(認可サーバ毎に異なる redirection uri を設定)することが、認可サーバ
Mix-up 攻撃などを回避するのに重要
1クライアント1サーバの前提
UA
C1
O
C1
R
C2
O
C2
R
A1
Z
A2
Z
1クライアント1認可サーバ
UA
C1
O
C1
R
C2
O
A1
Z
A2
Z
1クライアント N 認可サーバ
違う認可サーバからの
応答を1つの
redirection uri で受け
取る、とか
22. ● UA(ブラウザなど)を介した通信は、 UA 内で TLS が終端するため保護されない。メッセージは
認証されず、変更される恐れがある
● 例えば code や state も汚染チェックせずに使われることが多い
メッセージ認証の問題
UA
C1
O
C1
R
A1
Z
メッセージ認証されていない
(response_type, client_id,
redirect_uri, scope, state)
メッセージ認証されていない
(code, state)
TLS 終端
24. ● ネイティブアプリ(パブリッククライアント)上の「 code 横取り攻撃」などで顕著
○ 例: カスタムスキームをデバイス上のマルウェアなどによってハイジャック
○ OAuth PKCE (RFC7636) はこの問題のために存在している
メッセージ 受信者 認証の問題
UA
GOOD
APP
BAD
APP
A1
Z
I am GOOD APP!!!
redirect uri = goodapp://
29. 1. Unique Source Identifier
2. Protocol + Version + Message Identifier
3. Full list of Actors/Roles
3つの要
30. OAuth 2.0 (RFC6749) の単純な実装の場合
Message Parameters
① Unique Source
Identifier
② Protocol + Version
Identifier
③ Fill list of Actors/Roles
認可要求
response type*
client id*
redirect uri
scope
state
Client ID はグローバルに
unique ではないため改ざ
んが可能
識別子として params のリ
ストがありますが、これは
完全な保証にはなりませ
ん
存在しない
認可応答
code*
state*
other ext params
Source Identifier にあた
るものは存在しない
同上 存在しない
トークン要求
grant type*
code*
redirect uri*
client*
credential / client id*
Client ID はグローバルに
unique ではない
OK (OAuth 3.0 が存在し
ないかぎり)
存在しない
トークン応答
access token*
token_type*
expires_in
refresh_token
others
Source Identifier にあた
るものは存在しない
同上 存在しない
31. FAPI WG で考案中の実装
Message Parameters
① Unique Source
Identifier
② Protocol + Version
Identifier
③ Fill list of Actors/Roles
認可要求
response type*
client id*
redirect uri
scope
state
Unique redirect URI
& Client ID
要求署名 ① + UA 識別子としての
state あるいは TBID
認可応答
code*
state*
other ext params
Unique redirect URI 応答署名 ① + Client ID + UA 識別子
としての state あるいは
TBID
トークン要求
grant type*
code*
redirect uri*
client*
credential / client id*
Unique redirect URI
& Client ID
OK (OAuth 3.0 が存在し
ないかぎり)
① + UA 識別子としての
state あるいは TBID
トークン応答
access token*
token_type*
expires_in
refresh_token
others
Unique redirect URI 同上 ① + Client ID + UA 識別子
としての state あるいは
TBID