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

OAuth vs microservices

OPTiM
October 24, 2019

OAuth vs microservices

OPTiM

October 24, 2019
Tweet

More Decks by OPTiM

Other Decks in Programming

Transcript

  1. Copyright © OPTiM Corp. All Right Reserved. 2 o Kikuchi

    o Senior engineer, works in OPTiM Inc. o Optimal Biz (2014 ~) o OPTiM Store (2016 ~) o OPTiM Cloud IoT OS / LANDLOG (2017 ~) o Tech lead of digital identity o likes “eyJ...” o Member of OpenID Foundation Japan o Enterprise Identity Working Group Phase 3 (2016 ~) o KYC Working Group (2019 ~) o Rubyist ♥ Profile
  2. Copyright © OPTiM Corp. All Right Reserved. 4  AI/IoT

    Platform を作るための Platform  Data Hub となる API Sets や Device Control のAPI Setsと、 それらを操作する標準アプリを提供  大規模な開発体制のため、 microservice architecture を採用 • コンテナは Kubernetes でオーケストレーションしている  用途に応じて複数の開発言語 / フレームワークが 使い分けられている • 例) • App: Vue.js + Node.js • Core API: golang • IdM/IAM: Ruby on Rails OPTiM Cloud IoT OS
  3. Copyright © OPTiM Corp. All Right Reserved. Image: マイクロサービスとは –

    RedHat https://www.redhat.com/ja/topics/microservices/what-are-microservices
  4. Copyright © OPTiM Corp. All Right Reserved. 7  API

    をどうやって守るか • API を実行できる = そのアプリケーションに、ユーザーのデータが渡る • 誰でも API を呼べていいわけではない • ユーザーが認めたアプリケーションにのみ、データを渡せなければならない  各リソース(データ)をどうやって守るか • ユーザーのリソースは、誰でもアクセスできていいわけではない • 自分専用のものもあれば、会社の特定の人だけ見れるものもある • 一時的に、誰かにアクセス権限を渡したいこともある • 誰がそのリソースにアクセス出来るかを、制御する仕組みが必要  各アプリケーションの認証をどうするか • 標準アプリの場合、ユーザー情報は直接持っていない • ユーザー認証 (Context の識別) が出来ない • 3rd Party アプリの場合でも、Cloud IoT OS とシングルサインオン出来る方が ユーザーの使い勝手が良い & クレデンシャルを持たなくて良い 認証・認可・権限制御
  5. Copyright © OPTiM Corp. All Right Reserved. 8  API

    をどうやって守るか • API を実行できる = そのアプリケーションに、ユーザーのデータが渡る • 誰でも API を呼べていいわけではない • ユーザーが認めたアプリケーションにのみ、データを渡せなければならない  • • • •  • • • 認証・認可・権限制御
  6. Copyright © OPTiM Corp. All Right Reserved. 9 3rd Apps

    大雑把なイメージ API Service 標準App
  7. Copyright © OPTiM Corp. All Right Reserved. 12 OAuth とは、

     リソース所有者が  アプリケーションに対して  リソース所有者の代わりに、対象のリソースへアクセスするための  アクセス許可(認可)の手段を提供する ための、委譲プロトコル Protect API with OAuth
  8. Copyright © OPTiM Corp. All Right Reserved. 13 Overview OAuth

    2.0 Resource Access w/ Access Token Use App Authorize an app
  9. Copyright © OPTiM Corp. All Right Reserved. 14  認証・認可を行うサービスと、

    APIサーバーは別の service • 別サービスの払い出した Access Token を受け入れなければならない • 正当に発行されたものなのか、有効期限内なのか、etc...  考えられうる対応方法 • Shared DB を使って、Access Token の管理DBごと共有する • API を使って、Authorization Server に問い合わせを行う(Token Introspection) • Access Token 自体に、情報を入れてしまう(Formatted access token) OAuth problems in microservices
  10. Copyright © OPTiM Corp. All Right Reserved. 15 Shared DB

    Pros • 実装が容易 Cons • Shared DB が SPOF (Single Point Of Failure: 単一障 害点)となってしまう • 全てのサービスを同一ネットワーク内に配置し なければならない • Shared DB の変更が全 Resource Server に波及する
  11. Copyright © OPTiM Corp. All Right Reserved. 16 Token Introspection

    Pros • 異なるネットワークに配置することが出来る Cons • Authorization Server の負荷が高くなり、 Resource Server のスケールに合わせて Authorization Server をスケールしないといけないため、リソースの 無駄が大きい • Authorization Server が SPOF (Single Point Of Failure: 単一障害点)となってしまう
  12. Copyright © OPTiM Corp. All Right Reserved. 17 Formatted Access

    Token Pros • Resource Server 自身で Access Token の検証を行え るため、依存先がない(外部にSPOF がない) • Resource Server のトラフィックに合わせてスケー ルすれば良いため効率的なスケールアウトが行 える Cons • Access Token の Revoke が出来ない
  13. Copyright © OPTiM Corp. All Right Reserved. 21 OAuth in

    CIOS  Formatted Access Token を採用 • IoT 文脈では、大量のアクセスが想定されうるため、自立分散で動作できる方が望ましい  Access Token のフォーマットに JSON Web Token を採用 • 署名付きなので JWS  Access Token の署名に使う秘密鍵と対になる公開鍵はキャッシュ可能なため、検証の際に Authorization Server へ問い合わせる必要はない • キャッシュがない場合は、Authorization Server の提供するエンドポイントから取得 (JWK Set format)
  14. Copyright © OPTiM Corp. All Right Reserved. 22 Access Token

    各 API Server は、これらの値が 想定しているものになっているかを検証し リクエストバリデーションを行う
  15. Copyright © OPTiM Corp. All Right Reserved. https://www.ietf.org/id/draft-ietf-oauth-access-token-jwt-02.txt 最近 draft

    化されました (設計したときにはなかったので、準拠してはない)
  16. Copyright © OPTiM Corp. All Right Reserved. 24  Microservices

    という意味では、今の所うまく行っている • 認可周りがボトルネックになる事象は起きていない  運用中にいくつかの issue が発生した  Access Token の検証 • iss/exp といった時刻に関する claim が、サーバー間での時刻ずれによって、うまく検証処理できないケー スが発生 • NTP は設定していたが、Hypervisor の stop the world を食らってしまった • 時刻を扱う場合、これらの時刻同期ずれを考慮に入れなければならない  Access Token の Lifetime 問題 • (formatted であるか否かに関わらず)Lifetime は本来可能な限り短いべきであるが、あまりその理解が進 んでいない現状 • Refresh token の積極的な活用と、Offline access への理解が求められる Review