OpenID Connect

2023-03-23 (木) 20:59:52

OpenID Connect とは

名称

  • OIDC

概要

  • 認可の仕様(OAuth2.0)をベースに、認証の仕様(OpenID)を加え、属性取得もできるようにしたもの。
  • REST APIライクなJSON(使用技術)
  • コンシューマ系で採用されている。
  • 野村総合研究所Googleを中心に開発を開始した。
  • 2014年2月に最終承認された。

OIDCの仕様

ロール(登場人物)

  • エンドユーザ (User)
  • リライングパーティ (RP)
    • IdPの認証結果を受け取るアプリケーション
    • 事前にIdPに登録する必要がある。
  • IDプロバイダー (IdP)
    • OpenIDプロバイダー (OP)
    • IDトークンとアクセストークンを発行する
  • UserInfoエンドポイント
    • エンドユーザのプロフィール情報をRPに提供する

エンドポイント

  • 認可エンドポイント
  • トークンエンドポイント
  • リダイレクションエンドポイント
  • ユーザーインフォエンドポイント

スコープ

  • UserInfoエンドポイントから取得する情報
    • openid ※必須
    • profile
    • email
    • address
    • phone

トークン

  • IDトークン
    • IdPがRPに対して発行する
    • RPはIDトークンを使ってエンドユーザを認証する
    • トークンに含まれる情報:ユーザID、有効期限、発行者・受領者、トークンの形式・署名方法、署名
    • トークンの形式:JWS(署名付きJWT)
  • アクセストークン
    • 認可情報
  • 認可コード
  • リフレッシュトークン

フロー

認可コードフロー

  • Authorization Code Flow
  • OAuth2.0の認可コードグラント
  • サーバサイドで認証
  • コンフィデンシャルクライアント(RP)向け

インプリシットフロー

  • Implicit Flow
  • OAuth2.0のインプリシットグラント
  • パブリッククライアント向け
  • クライアントサイドで認証
  • リフレッシュトークンの発行が禁止されている

ハイブリッドフロー

  • Hybrid Flow
  • 認可コードフローとインプリシットフローのハイブリッドなフロー
  • サーバサイド・クライアントサイドの両方で認証

OIDCの仕様・プロトコル

  • OpenID Foundation 標準
  • ※元々は以下の部分規格に分かれていた。
    • OpenID Connect Core
    • OpenID Connect Discovery
    • OpenID Connect Dynamic Registration
    • OAuth 2.0 Multiple Response Type Encoding Practices
  • ※策定中の規格
    • OpenID 2.0 to Connect Migration
    • OpenID Form POST binding
    • OpenID Connect Session Management
  • ※関連する別規格(IETF OAuth WG)
  • ※関連する別規格(IETF JOSE WG)
    • JSON Web Signature(JWS)
    • JSON Web Encryption(JWE)
    • JSON Web Algorithms(JWA)
    • JSON Web Key(JWK)
  • ※関連する別規格(IETF Apps WG)

セキュリティ上の脅威

IDトークンの不正利用

使うもの

  • nonce を使う
  • nonce
    • number used once
    • ランダムな文字列
    • クライアント側で生成してセッションと紐づけて管理する
    • nonce の値は一度切りしか使わないことが前提

フロー

  1. クライアント(スマホアプリ等)がIDプロバイダに送る認証リクエストにnonce を追加する
  2. IDプロバイダはnonce を保存する
  3. IDプロバイダがクライアントに送るトークンレスポンスにnonce を追加する
    • クライアントからIDプロバイダへのトークンリクエストの認可コードを元にIDトークンにnonce を設定する
  4. クライアントは受信したnonce を検証する
    • 受信したnonce と保存していたnonce が一致しているか確認する
    • 正規のユーザの認可コードに紐づくnonce と攻撃者の認可コードに紐づくnonce が異なるので検知できる

OIDCの実装

Webサービス

  • Google
  • Microsoft
  • Salesforce
  • Mixi
  • Yahoo!Japan

OSS

関連サイト

関連用語