2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【認証】Bearer(ベアラー)認証とは

2
Last updated at Posted at 2025-09-02

1.Bearer認証とは

Bearer(ベアラー)とは英語で「所有者」という意味。
Bearer認証とは、認証トークン(アクセストークン)を「持っている人」に対して
アクセスを許可する方式。
(トークンを持っている人=正規の利用者として扱う仕組み)

もう少しわかりやすく言うと、
サーバー(入場ゲート)に接続するための「入館証」のイメージで
※トークン(入館証)を持っていれば、
 サーバーへのアクセス(入場ゲートへの通過)が可能。

2.Bearer認証の基本的な構造

フロント側からAPIにリクエストする時、
HTTPヘッダーに下記内容で設定します。
Authorization: Bearer <アクセストークン>

※サーバーへのリクエスト例

GET /user/profile HTTP/1.1
Host: api.example.com
Authorization: Bearer abc123xyz456

Authorization: 認証情報を送るヘッダー
Bearer:    「入館証チェック」方式を使うよ、という宣言
abc123xyz456: 実際のアクセストークン

3.特徴(メリットと注意点)

メリット

  • シンブルな認証方式:トークンを送信するだけで認証可能
  • ステートレス(サーバー側でセッション情報を保持する必要がない)
  • 多くのサービス(OAuth2、JWTなど)で標準的に使われている

注意点

  • トークンを盗まれると不正利用される危険大
    ⇒HTTPS(暗号化通信)必須(盗聴のリスク回避のため)
    ⇒トークンには有効期限を設定を推奨

※推奨セキュリティ設定

  • トークンの有効期限を短く設定する(通常15分〜1時間)
  • リフレッシュトークンと組み合わせる
  • HTTPS通信を必須にする
  • 適切な場所にトークンを保存する(localStorageではなく、httpOnlyなCookieなど)

4.Bearer認証処理の流れ

5.実装例(Node.js+Express)

// インストール
// npm init -y
// npm install express

const express = require("express");
const app = express();

// サーバー側で決め打ちしたアクセストークン(例)
const ACCESS_TOKEN = "abc123xyz456";

// 保護されたAPIエンドポイント
app.get("/profile", (req, res) => {
  // Authorizationヘッダーを取得
  const authHeader = req.headers["authorization"];

  if (!authHeader) {
    return res.status(401).json({ message: "認証情報がありません" });
  }

  // "Bearer <token>" の形式を確認
  const [scheme, token] = authHeader.split(" ");

  if (scheme !== "Bearer" || token !== ACCESS_TOKEN) {
    return res.status(403).json({ message: "トークンが無効です" });
  }

  // トークンが一致すればアクセス許可
  res.json({
    message: "認証成功!",
    user: {
      id: 123,
      name: "Shuumei",
      role: "admin",
    },
  });
});

// サーバー起動
app.listen(3000, () => {
  console.log("Server running at http://localhost:3000");
});

📌 動作確認

■サーバー起動

node index.js

■正しいトークンでアクセス

curl -H "Authorization: Bearer abc123xyz456" http://localhost:3000/profile

✅ レスポンス例

{
  "message": "認証成功!",
  "user": {
    "id": 123,
    "name": "Shuumei",
    "role": "admin"
  }
}

■トークン無しでアクセス

curl http://localhost:3000/profile

❌ レスポンス

{
  "message": "認証情報がありません"
}

6.まとめ

以前、UdemyでBearer認証を使っていた講座があって、
何となく使っていたのですが、
本記事で具体的な仕組みとメリット・デメリットも理解出来たので、
JWT、HttpOnlyなどセキュリティに関わるところを
もっと深堀りしたいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?