curlの認証(Basic認証とBearerトークン)

curlでBasic認証(-uフラグ)とBearerトークン認証を使いこなす方法を解説。OAuth2フロー、.netrcファイル、トークンセキュリティ、資格情報のベストプラクティスを学びましょう。

General

詳細な説明

curlでの認証

curlは複数の認証方式をサポートしています。最もよく使われるのはHTTP Basic認証とBearerトークン認証で、それぞれ異なるシナリオに適しています。

-uによるBasic認証

curlでは -u フラグでBasic認証を行います:

curl -u username:password https://api.example.com/protected

curlは自動的に資格情報をBase64エンコードし、Authorization ヘッダーに Basic dXNlcm5hbWU6cGFzc3dvcmQ= として送信します。パスワードを省略すると、curlが対話的にプロンプトを表示し、シェル履歴にパスワードが残るのを防げます:

curl -u username https://api.example.com/protected

ヘッダーを手動で設定することもできます:

curl -H "Authorization: Basic $(echo -n 'username:password' | base64)" \
  https://api.example.com/protected

.netrcによる資格情報の保存

繰り返しの認証には、~/.netrc ファイルに資格情報を保存します:

machine api.example.com
login username
password secretpass

そして --netrc を使います:

curl --netrc https://api.example.com/protected

Bearerトークン認証

Bearerトークンは、OAuth 2.0やJWTを使用する現代のAPIの標準です:

curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  https://api.example.com/me

OAuth 2.0トークンフロー

典型的なフローでは、まずトークンを取得し、それを使用します:

TOKEN=$(curl -s -X POST https://auth.example.com/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=$CLIENT_ID" \
  -d "client_secret=$CLIENT_SECRET" | jq -r '.access_token')

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/resources

セキュリティのベストプラクティス

  • 資格情報をハードコードしない — バージョン管理されるスクリプトに直接書かない
  • 環境変数を使う: curl -u "$API_USER:$API_PASS"-H "Authorization: Bearer $TOKEN"
  • 常にHTTPSを使う — 資格情報の傍受を防止する
  • トークンを定期的にローテーション し、漏洩したトークンは直ちに無効化する
  • 可能な限りBearerトークンを優先 — Basic認証よりもスコープや有効期限の設定が可能

ユースケース

開発者が内部サービスにはBasic認証、OAuth 2.0で保護されたエンドポイントにはBearerトークンを使ってAPIリクエストを認証する必要がある場合に使用します。

Try It — Curl to Code Converter

フルツールを開く