全て、認可サーバーからクライアントに対して発行される。(例えば、CognitoからWebアプリに対してなど)
アクセストークン
クライアントから、リソースサーバーに送れられる。
アクセストークンには以下の情報が紐づいています。
- 誰がどのリソースに対してどのような操作を許可することが許されているか。(認可情報が入っている)
- 有効期限はいつまでか。
Bearerトークン
OAuthのアクセストークンはこれ。よってリソースサーバーはアクセストークンの送信元を確認しない。
アクセストークンを所有していれば、それだけでリソースにアクセスが可能となる。
重要な属性
スコープ
アクセストークンに紐づくアクセス権をきめ細やかに設定する仕組み。基本的に最小限の権限にすべき。
有効期限
有効期限をすぎたアクセスはリソースサーバーによって拒否される。
有効期限が来るまではアクセストークンを何度でも利用できる。
リフレッシュトークン
クライアントから認可サーバーに対してアクセストークンの再発行をする際に利用される。アクセストークンに比べて遥かに長い有効期限になっている。
なぜリフレッシュトークンがあるの?
アクセストークンの有効期限を長くすれば良いという話かもしれません。
ただ、アクセストークンはAPIをリクエストするたびにネットワークに流れる情報になるので漏洩リスクが高いです。
リフレッシュトークンは基本的にアクセストークンを再発行する際しかネットワークに流出しないので漏洩リスクは低いため分けてトークンを保存する仕組みになっています。
認可コード
リソースオーナーがクライアントへの権限委譲を同意した証
クライアントから認可サーバーにアクセストークンを要求する際に利用される。
認可コードは、ブラウザを通じてアクセスするので有効期限は非常に短く10分以内となっている。
エンドポイント
認可エンドポイント
認可サーバーが提供するURI、認可コードの発行が主な役割。
クライアントがアクセス権を持っていないリソースにアクセスする際はまずここにアクセスする。ユーザーはユーザー名やパスワードを入力して、クライアントに権限を委譲して認可コードがリダイレクトエンドポイントに送られる。
トークンエンドポイント
認可サーバーが提供するURI、認可コードと必要なパラメータを使用してここにリクエストを投げることでアクセストークンを取得できる。
Basic認証によってクライアントの認証が行われる。
リダイレクトエンドポイント
クライアントが提供するURI、認可サーバーから認可コードを受け取るために使われる。
ロール
OAuthには4つのロールがあります。
リソースオーナー
リソースの所有者、APIを使うアプリを利用する一般ユーザーのことです。
クライアントに対して、リソースサーバーへアクセスする権限を委譲します。
クライアント(APIを使うアプリ)
リソースオーナーから許可された範囲内でリソースサーバーへのアクセスを許可されます。
Webアプリケーションや、モバイルアプリケーションなど種類は問いません。
クライアントタイプ
OAuthでは「クライアントID」、「クライアントシークレット」の二つをセキュアに保存できるかで二つのクライアントタイプを定義している。
コンフィデンシャルクライアント
セキュアに保存できる場合。サーバーサイドのWebアプリなどはこれ。
パブリッククライアント
セキュアに保存できない場合。ブラウザベースやネイティブアプリなどはこれ。
リソースサーバー(APIを提供するアプリ)
Web APIのこと。
認可サーバー(OAuth)
アクセストークンを発行するサーバーのこと。
認可サーバーの機能
- リソースオーナーを認証する。
- クライアントのリソースへのアクセスについてリソースオーナーの同意を得る。
- アクセストークンを発行する。
この記事へのコメントはありません。