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リクエストを認証する必要がある場合に使用します。