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

OAuth 2.1 + PKCEのススメ ~Spotify APIを通して理解する、OAuth...

na2na
December 11, 2024
54

OAuth 2.1 + PKCEのススメ ~Spotify APIを通して理解する、OAuth 2.1 + PKCEの基礎と実践~

na2na

December 11, 2024
Tweet

Transcript

  1. OAuth2について知る (前のスライドの続き) →その技術について知るには、実際にその技術を使ったものを作るのが⼀番早い →⾃⾝もよく使うSpotifyを題材にしたい →ドキュメントを読むとSPAではAuthorization Code With PKCE Flowを推奨されている →調べて実装までやってみた(今⽇はここの成果)

    In scenarios where storing the client secret is not safe (e.g. desktop, mobile apps or JavaScript web apps running in the browser), you can use the authorization code with PKCE, as it provides protection against attacks where the authorization code may be intercepted. 引⽤元: https://developer.spotify.com/documentation/web-api/concepts/authorization 6
  2. 今⽇話すこと 1. OAuth2.0の概要 2. OAuth2.1での更新点 3. Authorization Code With PKCE

    Flowの概要と採⽤モチベーション 4. Authorization Code With PKCE Flowを、Spotify WebAPIを題材に追ってみる 7
  3. 認可の例(Implicit Grant Flowの場合) 自作Spotify Webアプリ なずなさん Spotifyのサーバ Spotifyの 認可サーバ ①プレイリストの一覧を

    参照する許可をください 9 リソースオーナー クライアント 認可サーバ リソースサーバ ②なずなさんの許可 ③なずなさんの許可 ④Spotifyのリソースを 操作するためのアクセストークン ⑤アクセストークン ⑥なずなさんの Spotifyのプレイリスト情報
  4. 認可の例(Implicit Grant Flowの場合) 自作Spotify Webアプリ なずなさん Spotifyのサーバ Spotifyの 認可サーバ ①プレイリストの一覧を

    参照する許可をください 10 リソースオーナー クライアント 認可サーバ リソースサーバ ②なずなさんの許可 ③なずなさんの許可 ④Spotifyのリソースを 操作するためのアクセストークン ⑤アクセストークン ⑥なずなさんの Spotifyのプレイリスト情報
  5. 認可の例(Implicit Grant Flowの場合) 自作Spotify Webアプリ なずなさん Spotifyのサーバ Spotifyの 認可サーバ ①プレイリストの一覧を

    参照する許可をください 11 リソースオーナー クライアント 認可サーバ リソースサーバ ②なずなさんの許可 ③なずなさんの許可 ④Spotifyのリソースを 操作するためのアクセストークン ⑤アクセストークン ⑥なずなさんの Spotifyのプレイリスト情報
  6. 認可の例(Implicit Grant Flowの場合) 自作Spotify Webアプリ なずなさん Spotifyのサーバ Spotifyの 認可サーバ ①プレイリストの一覧を

    参照する許可をください 12 リソースオーナー クライアント 認可サーバ リソースサーバ ②なずなさんの許可 ③なずなさんの許可 ④Spotifyのリソースを 操作するためのアクセストークン ⑤アクセストークン ⑥なずなさんの Spotifyのプレイリスト情報
  7. 認可の例(Implicit Grant Flowの場合) 自作Spotify Webアプリ なずなさん Spotifyのサーバ Spotifyの 認可サーバ ①プレイリストの一覧を

    参照する許可をください 13 リソースオーナー クライアント 認可サーバ リソースサーバ ②なずなさんの許可 ③なずなさんの許可 ④Spotifyのリソースを 操作するためのアクセストークン ⑤アクセストークン ⑥なずなさんの Spotifyのプレイリスト情報
  8. OAuth 2.0の概要 OAuth 2.0とは、IETF OAuth WGで仕様策定されている標準仕様群です。 ウェブサイトまたはアプリケーションが、ユーザーに代わって他のウェブアプリがホストしているリソース に、アクセスできるよう設計された基準です。 2012年に OAuth

    1.0 の後を継ぎ、現在、事実上、オンライン認可の業界標準となっています。OAuth 2.0 は、 ユーザーの認証情報を共有しなくても、ユーザーに代わって、合意されたアクセスを提供し、クライアントア プリがリソースに対して実⾏できるアクションを規制します。 OAuth 2.0 は、認可プロトコルであり、認証プロトコルではありません。 引⽤元: https://auth0.com/jp/intro-to-iam/what-is-oauth-2 14
  9. OAuth 2.1の概要 OAuth2.0からの⼤きな変更は、以下です。 • Authorization Code Grant FlowにおけるPKCE の必須化 •

    リダイレクト URI の厳密な⼀致 • Implicit Grant Flow(response_type=token)の廃⽌ • Resource Owner Password Credentials Grant の廃⽌ • Bearer トークンを URI のクエリ⽂字列に含めることの禁⽌ • パブリッククライアントのリフレッシュトークンの制限 • クレデンシャルの有無によりクライアントの定義の簡素化 参考: https://oauth.net/2.1/ 16
  10. OAuth 2.1の概要 OAuth2.1は、現在進⾏形でIETF OAuth WGで仕様策定が進んでいる標準仕様群です。 OAuth 2.1 ドラフト仕様の作成者の 1 ⼈が以下のように述べているように、新仕様が増えるというよりかは

    既に存在していた既存仕様やその拡張仕様を1つに集約したものです。 That also means specifically that this effort will not define any new behavior itself, it is just to capture behavior defined in other specs. 引⽤元: https://aaronparecki.com/2019/12/12/21/its-time-for-oauth-2-dot-1 17
  11. OAuth2.0からの⼤きな変更は、以下です。 • Authorization Code FlowにおけるPKCE の必須化 • リダイレクト URI の厳密な⼀致

    • Implicit Grant Flow(response_type=token)の廃⽌ • Resource Owner Password Credentials Grant の廃⽌ • Bearer トークンを URI のクエリ⽂字列に含めることの禁⽌ • パブリッククライアントのリフレッシュトークンの制限 • クレデンシャルの有無によりクライアントの定義の簡素化 参考: https://oauth.net/2.1/ OAuth 2.1の概要 18
  12. Authorization Code With PKCE Flowの概要 OAuth 2.0のAuthorization Code FlowにPKCE (Proof

    Key for Code Exchange) を組み込むことでセ キュリティの強化をしよう、という仕様です。 特にクライアントシークレットを持たないパブリッククライアント向けに設計されており、不正な認 可コードの利⽤を防ぎます。 たとえばAuth0ではモバイルでは必須、SPAにおいては推奨とされています。 20
  13. Authorization Code With PKCE Flowの概要 通常の認可コードフローから以下が追加されています。 • 認可コード取得時に以下のパラメータを追加 ◦ code_challenge

    ◦ code_challenge_method • 認可コードとアクセストークンの交換時に以下のパラメータを追加 ◦ code_verifier 22
  14. 最後に • Authorization Code With PKCE Flowの活⽤ ◦ PKCEを利⽤することでよりセキュアな認可フローの実装ができるようになります •

    今回はOAuthクライアントの振る舞いを実装を通じて学習できた ◦ 次は認可サーバの実装をしてみたい ◦ たとえば⾃宅のインフラに認証‧認可基盤を作って適⽤してみるとか 52