Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JICS2017_HS10_OAuth2_ritou

ritou
September 15, 2017

 JICS2017_HS10_OAuth2_ritou

ritou

September 15, 2017
Tweet

More Decks by ritou

Other Decks in Technology

Transcript

  1. 2 Ryo Ito • Evangelist @ OpenID Foundation Japan •

    Engineer @ mixi, Inc. XFLAG Studio • ritou @ Twitter, facebook, github
  2. 3 本日の内容 • 概要 • OAuth 2.0とは? • OAuth 2.0の登場人物

    • ユースケース • 仕様 • プロトコルフロー解説 • Authorization Code Grant
  3. 6 OAuth 2.0の登場人物 • Resource Owner • サービスのエンドユーザーやサービスそのもの •Client :

    リソースアクセスを行うサービス • Webサービス、モバイルアプリケーション等 • Resource Server :リソースアクセスを提供する • Authorization Server : アクセス許可を与える
  4. 8 OAuth 2.0のユースケース(1) ブログサービスからSNSに自動投稿 • Resource Owner : SNSのユーザー •

    Client : ブログサービス • Resource / Authorization Server : SNS SNSが提供する機能をそのまま利用
  5. 9 OAuth 2.0のユースケース(2) イベントサービスにSNSアカウントでログイン • Resource Owner : SNSのユーザー •

    Client : イベントサービス • Resource / Authorization Server : SNS プロフィール情報閲覧機能を認証用途で利用
  6. 10 OAuth 2.0のユースケース(3) SNSが機能毎にモバイルアプリケーションを提供 • Resource Owner : SNSのユーザー、SNS •

    Client : SNSのモバイルアプリケーション • Resource / Authorization Server : SNS SNSが提供する機能を個別に利用
  7. 12 基本となる2つの仕様 • RFC 6749 The OAuth 2.0 Authorization Framework

    • リソースアクセスの許可を得るまでの処理 • RFC 6750 The OAuth 2.0 Authorization Framework: Bearer Token Usage • Bearer Tokenを用いたリソースアクセス
  8. 13 その他の仕様 • OAuth 2.0 + Identity Layer = OpenID

    Connect • ユースケースごとのプロファイル • OpenID Foundation : FAPI WG
  9. 20 0. Client Registration はてなブログはFacebookに対して記事共有を求めるため、 事前に手続きを済ませる • Client Type :

    "confidential" • CredentialsをWebサーバーで管理 • Client Credentials • Client ID : 識別子 • Client Secret : 秘密鍵のようなもの
  10. 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対策として セッションに紐付いた値 を指定
  11. 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を利用
  12. 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 を指定
  13. 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と戻り先を指定
  14. 40 scopeについて • Authorization/Resouce Server 側が定義、実装 • 例 : SNS

    • プロフィール情報の閲覧 • 友人へのメッセージ送信 •範囲は細かく指定できる方が良い •Resource Ownerへの見せ方も重要 •「(Client)があなたのプロフィール情報へのアク セスを要求しています。許可しますか?」
  15. 41 scopeについて • Client が用途に合わせて選択し、Authorization Request に含む • 必要以上に幅広い scope

    を要求すべきではない • ❌プロフィール情報を利用した占いサービスが友人と のダイレクトメッセージの閲覧権限を要求