フロー
そもそもOAuth2.0は「認可」のための仕組みであって、「認証」のための仕組みではない。
認可
:特定のデータへのアクセス、操作を許可する認証
:ユーザーを確認する(ログイン)
図中①〜④のみがOAuth2.0で定義される部分であり、①〜④の各リクエストそれぞれのパラメータも定義されている。それぞれのパラメータの詳細についてはここを参照。
項目 | 解説 |
---|---|
クライアントIDの取得 | 前もってクライアント のアクセス権などをリソースサーバー に登録し、クライアントIDを受け取っておく。このクライアントIDは①で送信する。 |
①認可コード要求 | 認可コード を要求。 |
ユーザーによる認可 | ここでユーザーの承諾を得る。例えばgithub はログイン画面を表示し、ユーザー名とパスワードを要求(認証 )した後、認可 するリソースを確認または選択する。 |
②認可コード発行 | 認可コード を発行。 |
③アクセストークン要求 | アクセストークン を要求。 |
④アクセストークン発行 | アクセストークン を発行。 |
アクセストークンによる通信 | アクセストークン を用いて許可されたリソースにアクセスする。 |
補足
エンドユーザー
は正確にはResource Owner
と呼ばれ、リソースサーバー
は正確にはAuthorization Server
(認可サーバー
)、Resource Server
に分離される(参考)- OAuth2.0では
Authorization Server
とResource Server
の間の通信については定義されない(あくまで①〜④のみ) - 実用上この2つは一つのサーバーで行うことが多い
クライアント
を含めたこの4つはロール
と呼ばれる
- OAuth2.0では
- 実はアクセストークン発行までのフローには他にも複数の方法があり、上記の方法が最も複雑である
アクセストークン
と認可コード
が分離されているのは認可コード
を用いる以外にも認可
を取得する方法が定義されているためである認可コードによる認可
(上図)、インプリシットグラント
、リソースオーナーパスワードクレデンシャルグラント
、クライアントクレデンシャルグラント
が定義される(総称して認可グラント
という)
名前 | 解説 |
---|---|
認可コードによる認可 | 上図 |
インプリシットグラント | 認可コード を挟まず、直接アクセストークン を発行する(①→④) |
リソースオーナーパスワードクレデンシャルグラント | ユーザーによる認可 の際のログイン画面がクライアント によって提供される(認可コード はなく、直接アクセストークン を発行する) |
クライアントクレデンシャルグラント | ユーザーの許可を求めず、ログインに相当する処理をクライアント が直接行う(認可コード はなく、直接アクセストークン を発行する) |
アクセストークン
の発行とともにリフレッシュトークン
の発行を受けることがあるアクセストークン
の有効期限が切れたら、リフレッシュトークン
を送信することで、新たにアクセストークン
の発行を受けられる- 特定の
認可グラント
に依存しない
OAuth2.0とは
アクセストークンの発行手順
に関する仕様である