OAuth2.0 のバックアップ(No.1)


OAuth2.0

OAuth2.0 とは

  • IETF OAuth WG
  • RFC6749
  • RFC6750

OAuth2.0 の仕様

ロール

  • リソースオーナー
    • リソースの所有者。クライアントのユーザでもある。
  • クライアント
    • リソースサーバを利用するアプリケーション。
    • 事前に認可サーバに登録する必要がある。
  • 認可サーバ
    • アクセストークンを発行する。
  • リソースサーバ

クライアントタイプ

  • コンフィデンシャルクライアント
    • クライアントID・クライアントシークレットを安全に扱うことができるクライアント
    • サーバサイドのWebアプリ
  • パブリッククライアント
    • クライアントID・クライアントシークレットを安全に扱うことができないクライアント
    • ブラウザ向けのWebアプリ(JavaScript)、ネイティブアプリ

スコープ

  • リソースサーバ上のリソースに対するアクセス権を制御する仕組み。
  • スコープはアクセストークンに紐付ける。

トークン

  • アクセストークン
    • 認可サーバがクライアントに対して発行する
    • スコープ
      • アクセス権の詳細を制御するための仕組み
    • 有効期限(expires_in)
      • 攻撃者に盗まれても短時間で接続できなくなるように、有効期限は短く設定される。
    • 以下の2種類のトークンのどちらかを選択できる。
    • ベアラートークン
      • トークンを持っている人を信用する
    • 利用者制限トークン(Sender Constrained Token)
      • トークンと利用者が結びついている必要がある
      • HoK(Holder of Key) Token
  • リフレッシュトークン
    • 認可サーバに対してのみ使われるため、攻撃者に盗まれるリスクは低い。
    • 有効期限
      • 一般的にアクセストークンよりも長く設定される。

エンドポイント

  • 認可エンドポイント
    • 認可サーバが提供するURI
    • クライアントに認可コードを発行する
  • トークンエンドポイント
    • 認可サーバが提供するURI
    • クライアントから認可コードを受けてアクセストークンを発行する
  • リダイレクトエンドポイント
    • リダイレクトURI
    • クライアントが提供するURI
    • 認可サーバが発行する認可コードやアクセストークンの受け渡し先
    • 事前に認可サーバに登録する必要がある
    • リダイレクト(ステータスコード302)を使って認可サーバからWebブラウザ経由でクライアントにアクセスする(LocationヘッダにリダイレクトエンドポイントのURIとパラメータを指定する)

グラントタイプ

  • 認可コードグラント (Authorization Code Grant)
    • コンフィデンシャルクライアント向け
    • PKCEを使うことでパブリッククライアント向けの利用も可能
  • インプリシットグラント (Implicit Grant)
    • パブリッククライアント向け
    • リフレッシュトークンの発行が禁止されている
    • 非推奨 ※アクセストークン漏洩のリスクがある
  • クライアントクレデンシャルグラント (Client Credentials Grant)
  • リソースオーナーパスワードクレデンシャルグラント (Resource Owner Password Credentials Grant)

OAuth Dance

  • OAuth のシーケンス

OAuth2.0を実装しているWebサービス

  • Facebook
  • Google Apps
  • Windows Live

関連サイト

ドキュメント

解説

関連用語