Skip to content

MS_OAuthSecurityTopics

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

OAuth 2.0 セキュリティ関連トピック

概要

セキュリティに関する考察と、考慮点。

詳細

基礎

脅威モデルとセキュリティ考慮事項

OAuth 2.0 Threat Model and Security Considerations

基礎の参考

認証に使用する

認証に使用する場合の問題点

認証ではなく認可のためのプロトコル(権限委譲プロトコル)である。
OAuth 2.0 の仕様を熟読しても OAuth 2.0 を認証に使用しても問題ないように見える。

以下の Blog を参照して、

  • 認可のためのプロトコルの OAuth が認証に使えることの説明 | ありえるえりあ
    http://dev.ariel-networks.com/wp/archives/258

    • 「OAuth が権限委譲(認可伝達)プロトコルなのは事実です。
      ・・・権限委譲プロトコルのひとつの利用方法に過ぎないからです。」

    • 「権限委譲プロトコル OAuth で、事実上、認証伝達ができる。」

の部分を見ると、全権限の認可は ≒ 認証で、
OAuth 2.0 による認証も、OAuth 2.0 の一利用方法と捉えることができる。

従って、「OAuth 2.0 は認証で使用できる。」と考える。
ただし、「OAuth 2.0 には以下の問題がある。」と考える。

  • Open な仕掛けで、インターネット上の野良 Client、Resource Owner から攻撃され得る。
  • また、Authorization Server に脆弱性があった場合、攻撃対象になり得る。
  • さらに、Client の作り次第で、Access Token が露見し得る。

このため、これらの問題がある状態で、OAuth 2.0 を認証に使用すると、

「Resource Server で公開しているリソースへのアクセスを認可する。」

という限られた権限より、(システムにログインできるということは)大きい権限を
委譲することになるので、
この発言の背景では、「認可に比べ、認証に使用した場合、リスクが大きい。」という
問題が懸念されている。

補足(認証に必要なものが仕様に無い): 上記に加えて実務上より重い問題は、
Access Token には「誰が・いつ認証されたか」が書かれていないことである。
Access Token を受け取れたことをもってログインさせると、

  • 別のクライアント向けに発行されたトークンを持ち込まれても気付けない
    (Token Substitution / 混同攻撃)
  • トークンが盗まれた場合、そのまま「その人」としてログインされる

という穴が残る。
OpenID Connect
aud(宛先)・nonceauth_time を含む署名付きの ID トークン
別立てで発行するのは、まさにこの穴を塞ぐためである。

対応方法1

従って、この問題は、特に脆弱な Implicit Flow
対象に、以下のように対策できる。

  • Implicit を Authorization Code に変更する。

    • Implicit を利用している場合、Authorization Code を利用できないか確認する。
    • Authorization Code であれば、Access Token の露見の可能性は低い
      (ただし、Client の作り次第)。
  • 基本実装を拡張する。

対応方法2

更に、昨今、Implicit フロー非推奨
UserAgentでOAuth2のTokenを取得するベスト・プラクティス)の流れが。

補足(Implicit は廃止された): 「非推奨の流れ」と書かれていた Implicit Flow は、
その後 OAuth 2.0 Security BCP と OAuth 2.1 で正式に廃止された。
現在は、パブリック クライアントであっても
Authorization Code + PKCE を使うのが唯一の選択肢である。

拡張のフロー

スマホ向け

OAuth 2.0 拡張のスマホ向けの節を参照
OAuth 2.0 for Native Apps)。

デバイス向け

OAuth 2.0 拡張のデバイス向けの節を参照
Device Authorization Grant)。

ベスト・プラクティス

OAuth 2.0 Security Best Current Practice

OAuth 2.0 Security Best Current Practice

UserAgentでOAuth2のTokenを取得するベスト・プラクティス

UserAgentでOAuth2のTokenを取得するベスト・プラクティス

UserAgent = SPA、スマホの意

JWTのコンテキストで何故かSessionとかCookieとか

JWTのコンテキストで何故かSessionとかCookieとか

参考

OAuth 1.0 のほうが OAuth 2.0 より安全なの?

qiita.com/TakahikoKawasaki

r-weblife

https://ritou.hatenablog.com/archive/category/Security

本 Wiki 内


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

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally