Slide 1

Slide 1 text

1 OAuth 2.0 基礎 ritou JICS 2017

Slide 2

Slide 2 text

2 Ryo Ito • Evangelist @ OpenID Foundation Japan • Engineer @ mixi, Inc. XFLAG Studio • ritou @ Twitter, facebook, github

Slide 3

Slide 3 text

3 本日の内容 • 概要 • OAuth 2.0とは? • OAuth 2.0の登場人物 • ユースケース • 仕様 • プロトコルフロー解説 • Authorization Code Grant

Slide 4

Slide 4 text

4 概要

Slide 5

Slide 5 text

5 OAuth 2.0とは? あるサービスが持つリソースに対し、 別のサービスがリソースオーナーの許可を得 てアクセスするためのしくみ

Slide 6

Slide 6 text

6 OAuth 2.0の登場人物 • Resource Owner • サービスのエンドユーザーやサービスそのもの •Client : リソースアクセスを行うサービス • Webサービス、モバイルアプリケーション等 • Resource Server :リソースアクセスを提供する • Authorization Server : アクセス許可を与える

Slide 7

Slide 7 text

7 OAuth 2.0のユースケース • 登場人物である4者が存在(重複しても良い) • リソースアクセスに対し、リソースオーナーの許 可が求められる •HTTPリクエスト等でリソースアクセスが提供さ れる

Slide 8

Slide 8 text

8 OAuth 2.0のユースケース(1) ブログサービスからSNSに自動投稿 • Resource Owner : SNSのユーザー • Client : ブログサービス • Resource / Authorization Server : SNS SNSが提供する機能をそのまま利用

Slide 9

Slide 9 text

9 OAuth 2.0のユースケース(2) イベントサービスにSNSアカウントでログイン • Resource Owner : SNSのユーザー • Client : イベントサービス • Resource / Authorization Server : SNS プロフィール情報閲覧機能を認証用途で利用

Slide 10

Slide 10 text

10 OAuth 2.0のユースケース(3) SNSが機能毎にモバイルアプリケーションを提供 • Resource Owner : SNSのユーザー、SNS • Client : SNSのモバイルアプリケーション • Resource / Authorization Server : SNS SNSが提供する機能を個別に利用

Slide 11

Slide 11 text

11 RFCs @ IETF OAuth WG

Slide 12

Slide 12 text

12 基本となる2つの仕様 • RFC 6749 The OAuth 2.0 Authorization Framework • リソースアクセスの許可を得るまでの処理 • RFC 6750 The OAuth 2.0 Authorization Framework: Bearer Token Usage • Bearer Tokenを用いたリソースアクセス

Slide 13

Slide 13 text

13 その他の仕様 • OAuth 2.0 + Identity Layer = OpenID Connect • ユースケースごとのプロファイル • OpenID Foundation : FAPI WG

Slide 14

Slide 14 text

14 【PR】@IT デジタルID最新動向 連載開始

Slide 15

Slide 15 text

15 プロトコルフロー解説

Slide 16

Slide 16 text

16 取り上げるユースケース ブログサービスからSNSに自動投稿 • Resource Owner : SNSのユーザー • Client : ブログサービス • Resource / Authorization Server : SNS

Slide 17

Slide 17 text

17 実例 : はてなブログとfacebook はてなブログからFacebookに自動投稿 • Resource Owner : Facebookのユーザー • Client : はてなブログ • Resource / Authorization Server : Facebook

Slide 18

Slide 18 text

18 アクセス許可の流れ

Slide 19

Slide 19 text

19 リソースアクセスに対する許可要求

Slide 20

Slide 20 text

20 0. Client Registration はてなブログはFacebookに対して記事共有を求めるため、 事前に手続きを済ませる • Client Type : "confidential" • CredentialsをWebサーバーで管理 • Client Credentials • Client ID : 識別子 • Client Secret : 秘密鍵のようなもの

Slide 21

Slide 21 text

21 Authorization Code Grant(Flow)

Slide 22

Slide 22 text

22 1. Authorization Request GET /authorize? response_type=code& client_id=s6BhdRkqt3& state=xyz& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fc b HTTP/1.1 Host: server.example.com Authorization Code Grantを利用

Slide 23

Slide 23 text

23 1. Authorization Request GET /authorize? response_type=code& client_id=s6BhdRkqt3& state=xyz& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fc b HTTP/1.1 Host: server.example.com Clientの識別子と戻り先

Slide 24

Slide 24 text

24 1. Authorization Request GET /authorize? response_type=code& client_id=s6BhdRkqt3& state=xyz& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fc b HTTP/1.1 Host: server.example.com CSRF対策として セッションに紐付いた値 を指定

Slide 25

Slide 25 text

25 Authorization Code Grant(Flow)

Slide 26

Slide 26 text

26 2. Authorization Response HTTP/1.1 302 Found Location: https://client.example.com/cb? code=SplxlOBeZQQYbYS6WxSbIA& state=xyz 戻り先に クエリパラメータを付与

Slide 27

Slide 27 text

27 2. Authorization Response HTTP/1.1 302 Found Location: https://client.example.com/cb? code=SplxlOBeZQQYbYS6WxSbIA& state=xyz CSRF対策の値を引回す

Slide 28

Slide 28 text

28 2. Authorization Response HTTP/1.1 302 Found Location: https://client.example.com/cb? code=SplxlOBeZQQYbYS6WxSbIA& state=xyz

Slide 29

Slide 29 text

29 Authorization Code Grant(Flow)

Slide 30

Slide 30 text

30 3. Access Token Request POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=SplxlOBeZQQYbYS6WxSbIA& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb Authorization Code Grantを利用

Slide 31

Slide 31 text

31 3. Access Token Request POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=SplxlOBeZQQYbYS6WxSbIA& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb Client Credentials を指定

Slide 32

Slide 32 text

32 3. Access Token Request POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=SplxlOBeZQQYbYS6WxSbIA& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb 取得したAuthorization Codeと戻り先を指定

Slide 33

Slide 33 text

33 Authorization Code Grant(Flow)

Slide 34

Slide 34 text

34 4. Access Token Response {"access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"Bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value"} RFC6750で定義されてい る Bearer Token であることを示す

Slide 35

Slide 35 text

35 4. Access Token Response {"access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"Bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value"} Access Tokenの値と 有効期限

Slide 36

Slide 36 text

36 4. Access Token Response {"access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"Bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value"} Access Tokenの値を更新 (再取得)するための Refresh Token

Slide 37

Slide 37 text

37 リソースアクセス実行

Slide 38

Slide 38 text

38 Accessing Protected Resources GET /resource HTTP/1.1 Host: server.example.com Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA

Slide 39

Slide 39 text

39 scopeについて • リソースの範囲、提供する機能を示すもの

Slide 40

Slide 40 text

40 scopeについて • Authorization/Resouce Server 側が定義、実装 • 例 : SNS • プロフィール情報の閲覧 • 友人へのメッセージ送信 •範囲は細かく指定できる方が良い •Resource Ownerへの見せ方も重要 •「(Client)があなたのプロフィール情報へのアク セスを要求しています。許可しますか?」

Slide 41

Slide 41 text

41 scopeについて • Client が用途に合わせて選択し、Authorization Request に含む • 必要以上に幅広い scope を要求すべきではない • ❌プロフィール情報を利用した占いサービスが友人と のダイレクトメッセージの閲覧権限を要求

Slide 42

Slide 42 text

42 ここまでのまとめ • OAuth 2.0は様々なユースケースに適用可能 • 最も一般的な実装例を用いてプロトコルフローを 紹介した •scopeは重要

Slide 43

Slide 43 text

43 ここからは「OpenID Connectについて」