MS_OAuth10 - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(OAuth)
- OAuth 1.0
- OAuth 2.0
- OpenID Connect
- OAuth 2.1
移行メモ: 元ページは「概要 / 詳細」が空で、参考リンクのみだった。
ここでは移行にあたり、OAuth から参照されたときに
意味が通る程度の基本事項を補って記述する。
OAuth 1.0 は、リクエストへの署名によって保護される認可委譲プロトコル。
- 2007 年に OAuth Core 1.0 として公開。
- 2009 年にセッション固定攻撃が発見され、OAuth 1.0a で修正。
- 2010 年に RFC 5849 として IETF 標準化。
- OAuth 2.0 とは後方互換性が無い。
補足(現在の位置づけ): 新規採用する場面はほぼ無い。
RFC 5849 は **RFC 6749(OAuth 2.0)によって廃止(obsoleted)**されている。ただし、古い API を相手にするときに遭遇することがある
(Twitter API v1.1、一部の業務系 SaaS など)。
「読み解けること」が本ページの実用的な価値になる。
| # | ステップ | 内容 |
|---|---|---|
| 1 | リクエスト トークンの取得 | Consumer が Service Provider に要求(/request_token) |
| 2 | ユーザー認可 | ユーザーをブラウザで Service Provider へ誘導し、承認させる |
| 3 | アクセス トークンへの交換 |
oauth_verifier を添えて交換(/access_token) |
| 4 | API 呼び出し | 以降、アクセス トークンと署名でリソースにアクセス |
補足: OAuth 2.0 の Authorization Code フローと
流れは似ているが、1 の「リクエスト トークンの事前取得」が余分である。
2.0 ではこの往復が省かれた。
-
署名方式:
HMAC-SHA1/RSA-SHA1/PLAINTEXT -
署名対象: HTTP メソッド + URL + すべてのパラメタを
正規化した「署名ベース文字列(Signature Base String)」 -
リプレイ対策:
oauth_nonce(一度きりの値)とoauth_timestamp
補足(実装が難しかった理由): 署名ベース文字列の生成規則が厳密で、
- パラメタをキー名でソートして連結する
- 二重に URL エンコードする箇所がある
Authorizationヘッダ / クエリ文字列 / ボディに散らばったパラメタを
すべて集めて対象にするといった具合で、1 文字ずれると署名が合わない。
しかもエラーは一律「署名が不正」としか返らず、切り分けが難しかった。これが OAuth 2.0 で署名を捨てて
TLS に依存する設計へ舵を切った直接の理由である。
ユーザーの認可を伴わない、Consumer と Service Provider の
サーバー間通信のための使い方(仕様上は明示されていないが慣例的に使われた)。
OAuth 2.0 の Client Credentials グラント種別に相当する。
-
OAuth Core 1.0
http://oauth.net/core/1.0/ -
RFC 5849 - The OAuth 1.0 Protocol
https://datatracker.ietf.org/doc/html/rfc5849 -
ゼロから学ぶOAuth:特集|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/oauth- 第1回 OAuthとは?―OAuthの概念とOAuthでできること
- 第2回 OAuth Consumerの実装(入門 : OAuth Access Tokenの取得と利用)
- 第3回 OAuth Consumerの実装(応用 : smart.fm APIおよびGoogle Data APIsの利用)
- 第4回 OAuth Service Providerの実装
Tags: 移行, IT国際標準, 認証基盤, クレームベース認証, OAuth