Help us understand the problem. What is going on with this article?

Bearer認証について

HTTP上で認証を行う場合,

  • セッションによる認証
  • リクエストボディにトークンを含める認証
  • 独自ヘッダにトークンを含める認証
  • Authorizationヘッダを用いた認証(Basic, Digest, Bearer)
  • JWT認証

など, 様々な方法がある.
この記事ではAuthorizationヘッダを用いた認証のうち, 特にBearer認証についてまとめている.

認証と認可

そもそも認証や認可とは何を指す言葉なのか.

認証 ... ある個人を特定すること
認可 ... 行動やリソースの許可をすること

よくあるWebサービスの場合, 認証を行った時点でそのユーザが使用できる機能が決まるため, 認可もされているということになる.

Bearer認証

Bearer認証は, トークンを利用した認証・認可に使用されることを想定しており, OAuth 2.0の仕様の一部として定義されているが, その仕様内でHTTPでも使用しても良いと記述されている.
bearerは「担い手」や「使い」といった意味を持つ.
詳細は, 『RFC 6750 The OAuth 2.0 Authorization Framework: Bearer Token Usage』を参照.

HTTPのAuthorizationヘッダにスキームとして指定でき, Authorization: Bearer <token> のようにして指定する.
トークンの形式はtoken68の形式で指定することが定められている.

Authorizationヘッダ

Authorizationヘッダの仕様に関しては, 『RFC 7235 Hypertext Transfer Protocol (HTTP/1.1): Authentication』を参照.

Authorizationヘッダに指定できるスキームには, BasicやDigest, Bearer等が存在し, これらのスキームはIANAによって管理されている.

token68

token68は1文字以上の半角英数字, - (ハイフン), . (ドット), _ (アンダーバー), ~ (チルダ), + (プラス), / (スラッシュ)から構成された文字列を指す.
文字列の末尾に任意個の = (イコール)が挿入されていても良い.

リクエストとレスポンス

まずクライアントから Authorization: Bearer <token> を含めたリクエストが投げられる.
それを受け取ったサーバは WWW-Authenticate: Bearer realm="XXXX" 形式, 又は WWW-Authenticate: Bearer error="XXXX" 形式のヘッダを含めたレスポンスを返す.

成功パターン

特に返したいパラメータが無い場合は realm を空にして返す.

WWW-Authenticate: Bearer realm=""

失敗パターン

リクエストにAuthorizationヘッダが含まれていないケース(401 Unauthorized)
WWW-Authenticate: Bearer realm="token_required"
リクエストパラメータが不正なケース(400 Bad Request)
WWW-Authenticate: Bearer error="invalid_request"
トークンが失効, 破損しているケース(401 Unauthorized)
WWW-Authenticate: Bearer error="invalid_token"
トークンのスコープが不十分なケース(403 Forbidden)
WWW-Authenticate: Bearer error="insufficient_scope"

トークンはどこに保持するのか

クライアント側はlocalStorageかsessionStorage, サーバ側はDBに保存することになる.

トークンに有効期限は設けるのか

トークンが漏れてしまうと第三者がそのトークンを使ってあらゆる操作ができてしまうため, 有効期限は設けておくべき.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした