OAuth 徹底入門 セキュアな認可システムを適用するための原則と実践

オーオーステッテイニュウモン セキュアナニンカシステムヲテキヨウスルタメノゲンソクトジッセン

OAuth 徹底入門 セキュアな認可システムを適用するための原則と実践の表紙
インターネット / WEB デザイン
著者:
Justin Richer / Antonio Sanso / 須田 智之 / Authlete、 Inc.(ジャスティン リッチャー / アントニオ サンソ / スダ トモユキ / オースリート)
出版社:
翔泳社
出版日:
2019年01月30日頃
ISBN:
9784798159294
在庫:
在庫あり
4.25(4 件 / 楽天ブックス)
中級者向け
OAuthセキュリティ認可プロトコルセキュアプログラミングAPI セキュリティOAuth 2.0エコシステム脆弱性プロトコル設計セキュリティアーキテクチャ

なぜ注目されているか

言及数
336位
総合419位 ↑ 7 ランクアップ 言及 9 件・うち記事 8 件を掲載
01220222023202420252026

書籍紹介

OAuth は近年、WEB アプリケーションで使われる主要な認可プロトコルです。本書では OAuth をどのようなプラットフォームでも適用できるように解説をしています。
本書は全体で 16 章あり、4 つのパートに分割しています。パート 1 にあたる第 1 章と第 2 章は OAuth 2.0 のプロトコルの概要を説明しており、基盤となる知識を得るための読み物としています。パート 2 は第 3 章から第 6 章までとなっており、OAuth 2.0 のエコシステム全体をどのように構築するのかについて示しています。パート 3 は第 7 章から第 10 章までとなっており、OAuth 2.0 のエコシステムにおけるさまざまな構成要素が持つ脆弱性について説明しており、その脆弱性をどのように回避するのかについて述べています。最後のパートは第 11 章から第 16 章までで構成されており、OAuth 2.0 を核とした次の世代のプロトコルについて語っており、標準や仕様に関して OAuth の周辺の技術も踏まえて見ていき、最後に本書のまとめを行っています。

技書の森解説

Web サービスの API を外部のアプリケーションに開放するとき、ユーザーのパスワードを渡さずに、決められた範囲の操作だけを許可する仕組みが認可フレームワーク OAuth 2.0 です。『OAuth 徹底入門』 (Justin Richer、Antonio Sanso 著、須田智之 訳、Authlete, Inc. 監修、翔泳社、2019 年 1 月刊) は、OAuth 2.0 を構成するクライアント / 保護対象リソース / 認可サーバーの三つを自分の手でゼロから組み上げ、動く仕組みとして理解させることを狙った翻訳書です。翔泳社の「徹底入門」シリーズの一冊で、プロトコルの手順説明にとどまらず、なぜその仕様になっているのか、どこが攻撃されやすいのかまで踏み込む点が、入門と名乗りながら本格的な内容になっている理由です。

全 4 部 16 章の構成、概要から構築、脆弱性、拡張仕様へ

構成は全 4 部 16 章に付録 2 本が付きます。第 1 部 (Chapter 1〜2) は OAuth 2.0 とは何か、クレデンシャルを共有する旧来の手法の問題点、アクセス権の委譲という考え方、そして OAuth ダンスと題した構成要素間のやり取りを、読み物として押さえる導入です。第 2 部 (Chapter 3〜6) が本書の背骨で、シンプルな OAuth クライアント、保護対象リソース、認可サーバーを順に構築し、認可コードによる付与方式でのトークン取得、リフレッシュ・トークン やスコープのサポート追加、付与方式とクライアントの種類の使い分けまでを実装で確かめます。第 3 部 (Chapter 7〜10) はクライアント / 保護対象リソース / 認可サーバー / トークンのそれぞれについて狙われやすい脆弱性を扱い、第 4 部 (Chapter 11〜16) は JWT と JOSE、トークン・イントロスペクションと取り消し、動的クライアント登録、OAuth 2.0 を使ったユーザー認証と OpenID Connect、UMA / HEART / iGov といったプロファイル、所有証明 (PoP) トークンや TLS トークン・バインディングまで、核の周りに広がる拡張の世界を案内します。サンプルコードは JavaScript で書かれ、付録 A で使用しているフレームワークが説明されます。

認可がなぜ難しいのか、三者とリダイレクトで進む委譲の仕組み

OAuth 以前、他社サービスのデータを扱うアプリケーションは、ユーザーからパスワードそのものを預かるしかありませんでした。パスワードを預けると、預けた先はユーザーになりすませる全権を持ち、権限を絞ることも、特定のアプリケーションだけ取り消すこともできません。OAuth 2.0 はこの問題を、リソース所有者であるユーザーが認可サーバーに同意を与え、クライアントには範囲と期限を限定したアクセス・トークンだけを渡す、という委譲の形で解決します。難しさは、この手続きがクライアント / 認可サーバー / 保護対象リソースの三者に、ブラウザのリダイレクトまで加わった複数の通信で成り立つことにあります。どのパラメータが誰から誰へ渡り、誰が何を検証すべきかを一箇所でも取り違えると、認可コードの横取りや CSRF、リダイレクト URI の不正操作といった攻撃の入口になります。本書がクライアント側 / リソース側 / 認可サーバー側の三つの実装を順に自作させるのは、この検証責任の所在を各役割の立場から体験させるためで、フロー図を眺めるだけでは身につかない部分を実装を通して整理できる構成です。

脆弱性の章と OpenID Connect、第 3 部以降の読みどころ

第 3 部の脆弱性の章は本書を類書から際立たせる部分です。クライアントに対する CSRF 攻撃、クライアント・クレデンシャルの不当な取得、リダイレクト URI の登録、認可コードやトークンの不正な取得、ネイティブ・アプリケーションでのベスト・プラクティス、保護対象リソースに対するトークンのリプレイ攻撃、認可サーバーのセッションの乗っ取りやオープン・リダイレクト、そして Bearer トークンの使用に伴うリスクと保護策と、攻撃対象ごとに整理されています。第 4 部では、JWT と署名 / 暗号化の枠組みである JOSE、トークン・イントロスペクションと取り消しを含むトークンのライフサイクルを扱ったうえで、なぜ OAuth 2.0 は認証プロトコルではないのか、認証に使う際に陥りやすい落とし穴は何かを明示し、その答えとして OpenID Connect のシンプルなシステム構築へ進みます。ログイン連携を OAuth だけで済ませているつもりの実装が抱える危うさを、原理から説明できるようになる章です。

前提知識と、2019 年時点の仕様範囲という注意点

前提として必要なのは、HTTP のリクエストとレスポンス、リダイレクト、Cookie とセッションといった Web アプリケーションの基礎と、JavaScript のコードを読み進められる程度のプログラミング経験です。暗号や認証の専門知識は求められませんが、第 2 部の構築を手を動かさずに読み飛ばすと第 3 部の脆弱性の議論が抽象的に感じられるため、コードを追う時間を確保して読む本です。刊行は 2019 年 1 月で、扱う内容は OAuth 2.0 の中核仕様と、その時点で整備されていた拡張が中心です。特定の認証基盤製品やクラウドの ID サービスの設定手順を知りたい人、ライブラリを呼ぶだけで済ませたい人には遠回りになりますし、刊行後に進んだ仕様の整理を追う目的には別の情報源が必要です。

それでも、自社の API を OAuth 2.0 で保護する側に立つ人、社内やパートナー向けに認可サーバーを運用する人、外部の ID プロバイダーとの連携を設計してレビューする人にとって、三者の実装を一度自分で組んだ経験は、ライブラリの設定項目一つひとつの意味を読み解く土台になります。刊行後も増刷を重ねており、版元の正誤表ページには 6 刷までの刷数区分が並ぶことからも、実務者に読み継がれてきた本であることがうかがえます。認可の仕組みを表面的な手順としてではなく設計判断として扱いたいエンジニアには、費やした時間に見合う一冊です。

言及した記事 (8 件)

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: