マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
マイクロサービスが話題を集め、コンポーネントの急速な API 化が進んでいます。
認証や認可は、主にエンドユーザとシステムの間の問題だと認識されますが、今やコンポーネント間のサービス呼び出しにおいても重要な役割を担っています。
複雑に入り組んだマイクロサービス間の認証と認可について、実際に開発している API プラットフォームの実例を元に、実践的な知見をお伝えします。
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
マイクロサービスが話題を集め、コンポーネントの急速な API 化が進んでいます。
認証や認可は、主にエンドユーザとシステムの間の問題だと認識されますが、今やコンポーネント間のサービス呼び出しにおいても重要な役割を担っています。
複雑に入り組んだマイクロサービス間の認証と認可について、実際に開発している API プラットフォームの実例を元に、実践的な知見をお伝えします。
Title:
Overview of JSON Object Signing and Encryption
Abstract:
JavaScript Object Notation (JSON) is a text format for the serialization of structured data. The JSON format is often used for serializing and transmitting structured data over a network connection.
JSON Object Signing and Encryption (JOSE) WG in IETF standardized mechanism for integrity protection (signature and MAC) and encryption as well as the format for keys and algorithm identifiers to support interoperability of security services for protocols that use the JSON.
There are specifications such as JSON Web Key (JWK), JSON Web Signature (JWS) and JSON Web Encryption (JWE) in JOSE WG. This lightning talk will introduce overview of them.
WebHack #11 Feb 20, 2018
URL:https://webhack.connpass.com/event/78719/
2. 倉林 雅(通称: kura)
OpenID ファウンデーション・ジャパン
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
エバンジェリスト
ヤフー株式会社 IDサービス エンジニア
ID厨
@kura_lab
3. Nov Matake
OpenID Foundation Japan
Evangelist 初号機
OAuth.jp
Idcon
Rubyist
fb_graph, rack-oauth2, openid_connect etc.
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
4. OpenID ファウンデーション・ジャパン
2008年設立
OpenID TechNight
翻訳・教育 WG
トラストフレームワーク WG
Enterprise Identity WG
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
5. Japan Identity Cloud Summit
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
20. トークン置き換え攻撃
の脆弱性
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
【メモ】
ネイティブアプリの多くはバックエンドに
自前のサーバーがあり通信を行う
アプリからバックエンドサーバーにアクセストークンを
送って認証すると脆弱性が生まれる
21. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Your Server
GET /me
User Info
:
Source: developers.facebook.com
Your App
22. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Weak Point
Source: developers.facebook.com
23. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
access token
トークン置き換え
Source: developers.facebook.com
24. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
access token
トークン置き換え
Source: developers.facebook.com
【メモ】
悪意ある開発者が別のアプリで他人のアクセストークンを取得する
そのアクセストークンを置き換えてバックエンドサーバーに送信する
25. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
× 他人のユーザデータ
29. ID Token?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Question Mark Block by Jared Cherup
30. ID Token?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Question Mark Block by Jared Cherup
【メモ】
Implicitを使ってサーバーサイドで認証を行う際には
OpenID Connectの仕様にあるID Tokenを用いることで
トークン置き換え攻撃の脆弱性を防ぐことができる
33. JSONオブジェクト, Base64
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm
NvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF
WFOEjXk
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
37. JSONオブジェクト
{“typ”:”JWT”,
“alg”:"HS256"}
!
{“iss”:”https://auth.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380}
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ヘッダー部
ペイロード部
38. iss: issuer, トークンの発行者
aud: audience, クライアント識別子
sub: subject, ユーザー識別子
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
39. {“typ”:”JWT”,
“alg”:"HS256"}
!
{“iss”:”https://auth.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380}
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
audience
= クライアント識別子
40. ID Tokenでわかること
isser が audience のために
subject を認証する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
41. ID Tokenでわかること
isser が audience のために
subject を認証する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
【メモ】
サーバーサイドでID Tokenを受け取りaudienceを検証することで
他のアプリで発行されたトークンと区別することができる
42. リプレイアタックの対処法
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
43. リプレイアタックの対処法
【メモ】
サーバーサイドでトークンの検証をおこなうため
リプレイアタックの対策をしなければならない
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
44. nonce = number used once
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
45. nonce = number used once
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
【メモ】
ID Tokenにはリプレイアタック対策のnonceが導入されている
46. {“typ”:”JWT”,
“alg”:"HS256"}
!
{“iss”:”https://auth.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380}
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
リクエストごとに
ユニークな文字列
47. ID Tokenで対策
トークン置き換え攻撃
リプレイアタック
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Armour on display in the War Gallery by Royal Armouries
48. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
49. nonceを生成リクエスト
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
50. access token
ID Token
(nonce)
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
51. ID Token
(nonce)
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
GET /me
User Info
:
Source: developers.facebook.com
トークン置き換え
53. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Token
(nonce)
GET /me
検User 証でInfo
不正を防止
:
Source: developers.facebook.com
54. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Token
(nonce)
GET /me
検User 証でInfo
不正を防止
:
Source: developers.facebook.com
【メモ】
署名の検証、audienceなどをチェックして
問題なければログイン状態にする
55. ネイティブアプリに
鍵を埋め込む?
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
56. ネイティブアプリに
鍵を埋め込む?
【メモ】
ここまでサーバーサイドでの認証をみてきたがクライアントサイドに注目
ID Tokenにおける署名検証に用いる鍵についての紹介
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
57. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
署名?
HMAC-SHA1?
HMAC-SHA256?
59. 共通鍵暗号と公開鍵暗号
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
【メモ】
署名検証に共通鍵暗号を用いた場合は署名生成時と同一の鍵で検証する
公開鍵暗号を用いた場合は署名生成時に用いた秘密鍵ではなく
公開鍵を用いて検証する
65. 公開鍵暗号の署名検証
共通鍵(secret)を
埋め込む必要がなくなる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
【メモ】
サーバーサイドでは鍵の漏洩しにくいため共通鍵暗号でもよい
ネイティブアプリではアプリ内部をのぞかれる可能性があるため
漏洩してもよい公開鍵暗号を選択するとよい
66. ID Tokenで
ユーザー認証を!
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Passport by jpmatth
67. ID Token + OAuth 2.0
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
80. 公開鍵暗号(こうかいかぎあんごう、Public key cryptosystem)
とは、暗号化と復号に別個の鍵(手順)を使い、暗号化の為の鍵を
公開できるようにした暗号方式である。1980年代にかけ、日本で
紹介された直後は「公衆暗号系」と訳されていた。
暗号は通信の秘匿性を高めるための手段だが、それに必須の鍵もま
た情報なので、鍵自体を受け渡す過程で盗聴されてしまうリスクが
あり、秘匿性を高める障害だった。この問題に対して、暗号化鍵の
配送問題を解決したのが公開鍵暗号である。
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
http://ja.wikipedia.org/wiki/公開鍵暗号
81. 秘密鍵を渡さずに
! 公開鍵だけを渡して
! 秘密鍵を持っていることを証明できる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
82. デバイス上のKeyChainに
鍵ペアを生成すれば
秘密鍵を渡さずに
! 公開鍵だけを渡して
! 秘密鍵を持ってるデバイスを認証できる
…こういうのを HoK (Holder of Key) 方式とか言うらしい
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
83. Self-Issued IdP
ID Token ベース
Subject (sub) は公開鍵のハッシュ値 (SHA256)
公開鍵自体を ID Token に含める
秘密鍵使って署名
詳しくは OpenID Connect Core - Section 7 参照
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.