Skip to content

MS_OAuth

nishi_74322014 edited this page Sep 1, 2026 · 2 revisions

OAuth

概要

OAuth 1.0OAuth 2.0 にページを分割しました。

補足(OAuth とは何か): 一言でいえば
パスワードを渡さずに、他人のサービスに自分のデータへのアクセスを許す
ための仕組み(認可の委譲)である。

「A というサービスに、B にある自分の写真を使わせたい。
でも B のパスワードは教えたくない」——これを解く。

**認証(誰か)ではなく認可(何をしてよいか)**の仕様である点が要で、
認証に使うには OpenID Connect が必要になる。

変遷

  • OpenID を使って Twitter や Ma.gnolia の API の認証委譲する方法を議論を開始。
  • 2007/4 — OAuth のコミュニティが誕生。
  • 2007/7 — OAuth の仕様の草案が完成。
  • 2007/10 — OAuth Core 1.0 の最終草案がリリース。
  • 2008/11 — 第 73 回の IETF 会合で OAuth の非公式会合も開かれ、
    IETF に OAuth プロトコルを提案するかどうかを議論。
  • 2009/4/23 — OAuth 1.0 のセキュリティ問題が判明
    この問題は、OAuth 1.0a で修正された。

補足: このセキュリティ問題は
セッション固定攻撃(Session Fixation)」で、
攻撃者が取得したリクエスト トークンを被害者に承認させると、
攻撃者のアカウントに被害者のリソースが結び付いてしまうもの。
1.0a では oauth_verifier を導入して修正された。
同種の問題は OAuth 2.0 でも state パラメタで対処している。

  • OAuth 1.0 とは後方互換性を持たない
  • 次世代の OAuth プロトコルとして、2012 年に RFC として発行された。

補足(最新化): OAuth XYZ とその対抗案 OAuth TxAuth は統合され、
GNAP(Grant Negotiation and Authorization Protocol / RFC 9635, 2024)
として標準化された。

ただし GNAP は OAuth 2.0 の後継ではなく別系統であり、
現時点で普及はしていない。
実務上の「次」は OAuth 2.1 の方である。

違い

OAuth 1.0OAuth 2.0 の違い

  1. HTTPS を必須にし、署名をなくし、Token 取得も簡略化
  2. Access Token のみでリソース取得が可能に
  3. Web アプリも含め、4 つの Client Profile を仕様化
    1. Web サーバ(Web Server)— Web アプリケーション
    2. User Agent ベースアプリケーション — WWW ブラウザ上の JavaScript
    3. ネイティブアプリ(Native Application)— モバイルやデスクトップアプリ
      (ガイドライン程度しか定義されていない)
    4. 自立クライアント(Autonomous)— 既存の認証フレームワークと
      SAML などのプロトコルを使って連携する場合のフロー。

補足(「署名をなくした」ことの功罪): OAuth 1.0 は
リクエストごとに署名していたため、

  • 通信路が平文でも改ざん・なりすましを検知できた
  • しかし実装が難しく(署名ベース文字列の正規化が鬼門)、普及の障害になった

2.0 は署名をやめて TLS に全面的に依存する設計にし、
実装の敷居を大きく下げた。これが普及の決め手になった一方、
トークンを持っている者が使える(Bearer)」
という弱さを抱えることになった。

その反省から、後に mTLS / DPoP といった
「送信者制約トークン(記名式)」の仕様が追加されている
OAuth 2.0 のトークンを参照)。

OAuth 2.0OpenID Connect の違い

  • Token が JWT アサーション形式で署名(必要なら暗号化)される。

  • 新しく、Hybrid Flow が追加されている。

OAuth 2.0 OpenID Connect
Authorization Code グラント種別 Authorization Code Flow
Implicit グラント種別 Implicit Flow
上記を組合せたようなグラント種別 Hybrid Flow
  • コレ以外にも、多数のオプションが追加されている。

移行メモ: 元ページは「Token が JWT アサーション形式で
暗号化・署名される」としていたが、
OIDC の ID トークンで**必須なのは署名(JWS)**であり、
暗号化(JWE)はオプションである(JWTを参照)。

補足(本質的な違い): 表面的なフローの差より重要なのは、
OIDC は「誰がログインしたか」を RP に伝える手段(ID トークン)を
定義した
という点である。
OAuth 2.0 のアクセス トークンは「API を叩く権限」でしかなく、
それを認証の証明に使うのは誤りである
(他所で盗んだトークンかもしれない)。

参考

@IT


Tags: 移行, IT国際標準, 認証基盤, クレームベース認証, OAuth

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally