Postmanで行うAPIテスト ― 認証技術の探究

こんにちは!メディアフュージョンでテスターをしているタムです。Webサイトやアプリ、APIのテスト、SQLなどを担当しています。最近は自動テストに興味を持ち、JavaやPostman、Seleniumなどを勉強しています。これからこのブログで日々の学びを発信していきたいと思います。よろしくお願いします!

Postman を使って API テストを始める際、多くの人はリクエストを送信して正しくレスポンスが返ってくるか、ステータスコード 200 が返るか、JSON に必要な key-value が揃っているかといった点に注目しがちです。
しかし、実際の環境で API テストを行う際に、同じくらい重要で、場合によってはシステムのセキュリティそのものに関わる重要な要素が「認証(Authentication)」です。システムが使用している認証の仕組みを正しく理解していないと、誤った方法でテストをしてしまうだけでなく、重大なセキュリティ上の脆弱性を見落としたり、意図せず情報漏洩を引き起こしたりしまうからです。
物語は、ユーザー情報を取得するAPIにリクエストを送信するところから始まります。その際、サーバーから「401 Unauthorized(認証されていない)」というエラーレスポンスが返ってきたとします。これはリクエストに認証情報が含まれていない、または不正であることを示す明確なサインです。まるで、ホテルに鍵を持たずに入ろうとした時、警備員に部屋に入れてもらえない状況と同じです。

では、この「鍵」は何でしょうか?認証の方法はさまざま存在しますが、実際は特にPostmanを使ってAPIテストする際、よく使われる代表的な2つの手法がAPIキー(API Key)及びBearerトークン(Bearer Token)です。これらを正しく理解し、適切に使い分けることが、正確で安全なAPIテストの第一歩となります。
APIキーとは、あなただけに発行された「部屋の鍵」のようなものであり、このキーを提示することで特定のAPIリソースへのアクセスが許可されます。一般的に、APIキーはURLに直接付加するか、Postmanの「Params」タブに設定して使用します。たとえば、?apikey=uljbe773k68hqtqgv623szel0v7hgia のようにURL末尾に追加したり、「Key」にapikey、「Value」に実際のキー値を設定することで、サーバーがリクエストを認証し、アクセスを許可してくれる仕組みです。

ただし、APIキーは「シンプルな鍵」のようなものであり、一度見られると簡単にコピーされてしまうという弱点があります。特にURLにそのまま記載されている場合、通信が暗号化されていないネットワークを通すと、第三者に盗まれるリスクが非常に高くなります。
さらに、APIキーは多くの場合「有効期限が設定されていない」ため、誰が・いつ使っているのかを追跡するのが難しいという問題もあります。そのため、テスターとしての注意点としてはAPIキーは 開発・テスト・サンドボックス環境 での利用にとどめるべきです。本番環境では、追加のセキュリティレイヤー(例:IP制限、トークン認証など)がない限り使用すべきではありません。セキュリティ意識を持ったテスト設計が重要です。
もし、より安全でプロフェッショナルな方法を求めるのであれば、Bearerトークンの利用が最適です。これは通常、ログイン時にユーザー名とパスワードを送信するとサーバーから返される認証用のトークンであり、一度取得すれば、それ以降のリクエストではユーザー名やパスワードを再送する必要はなく、代わりにこのトークンをAuthorizationヘッダーに含めることで認証が行えます。トークンには有効期限や権限の制限が設定でき、漏洩時のリスクを最小限に抑えることができるため、ユーザー情報を直接送信するよりも安全です。
Postmanでは、Authorizationタブでタイプを「Bearer Token」に設定し、取得したトークンを対応する入力欄に貼り付けることで、セキュリティを保ちつつスムーズにAPIテストを実行できます。

このとき、Postmanはリクエストに自動的に Authorization: Bearer your_token_here の形式でヘッダーを追加します。サーバー側はこのトークンを検証し、有効であればリクエストされたデータを返却します。
逆に、トークンが期限切れまたは無効な場合は、HTTPステータスコード「401」または「403」が返されます。
「401」は認証情報が不足している場合(例:トークンがない、期限切れなど)に返され、「403」は認証は成功したが、リソースにアクセスする権限がない場合に返されます。
Bearerトークンのメリットは、URLに含まれないため盗み見されにくく、有効期限やアクセス権限の設定が可能で管理しやすいという点です。また、OAuth2やJWT(JSON Web Token)などの大規模な認証システムとの連携にも適しており、より安全で柔軟な認証方式として広く採用されています。
テスターとしてキャリアを始めたばかりの場合、API KeyとBearer Tokenの使い分けに迷ってしまうことがあるかもしれません。しかし、これらを正しく使い分けることは非常に重要です。もしAPIがAPI Keyを要求している場合は、必ず指定された場所(ParamsまたはHeader)に設定する必要があります。一方、Bearer Tokenを使用するAPIでは、Postmanの「Authorization」タブを使って正確にヘッダーを設定することを忘れないでください。
さらに重要なのは、認証付きのAPIをテストする際には、以下のようなテストケースを用意しておくことです。認証情報がない場合にどんなエラーが返されるか。誤った認証情報を送った場合に適切なエラーメッセージが表示されるか。トークンが期限切れの場合にシステムが適切に対応できるか。このように、認証(Authentication)はAPIテストにおいて欠かせない要素です。機能テストでもセキュリティテストでも、システムがどのような認証方式を使っているかを正確に理解していなければなりません。
最初から正しく対応することで、テストの正確性が上がるだけでなく、システム全体の安全性にも貢献できます。そして何より大切なのは、セキュリティは開発者やセキュリティ担当だけの責任ではなく、あなたが送る1つ1つのリクエストから始まっているという意識を持つことです。

