LoginSignup
1
0

More than 3 years have passed since last update.

curlの"-u"オプションで引き渡される認証情報をヘッダーに直接設定したい

Last updated at Posted at 2020-11-28

先日プロダクトのアップデートを管理しているJenkinsサーバに対して新たにAPIを送るよう実装する機会があり、その際にインフラチームから共有いただいたAPIの呼び出し方法が下記のようなものでした。

curl -k -X GET "https://hogehoge.jp/job
?token=${api_job_token}" -u ${api_user_name}:${api_user_token}

"-u"オプションって?

Specify the user name and password to use for server authentication. Overrides -n, --netrc and --netrc-optional.
If you simply specify the user name, curl will prompt for a password.

参照:https://curl.se/docs/manpage.html#-u

curl先のサーバーで行われる認証に対し、ユーザ名とパスワードを引き渡しているオプションが-uオプションになります。

"curl"経由じゃなくて直接ヘッダーに認証情報を設定したい。。。

今回のケースではcurlからではなくて、ヘッダーなどのリクエスト内容を直接規定する方法でJenkinsAPIへリクエストを送る必要がありました。下記のようにすることで、-uオプションを利用して設定されるBasic認証情報をヘッダに設定することができます。(利用言語はPHP7.3)

private static function createHttpRequestForJenkins(): HttpRequest {
    // Basic認証情報を設定
    $encoded_user_info = base64_encode('user_name:password');
    $request_header = [
        'Content-type'  => 'application/json',
        'Authorization' => "Basic $encoded_user_info",
    ];
    ......
}

Basic認証では引き渡すユーザ名とパスワードはbase64形式でエンコードされる必要があるため、base64_encodeを使って認証情報を設定します。
エンコード済みの認証情報をヘッダーのAuthorization要素として指定をすることで、リクエスト先サーバにBasic認証情報を送信することができます。その際、エンコードされた情報はBasic+半角空白を接頭辞として持つ必要があります。
参照:https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC

上記のままでもリクエストを送る上では問題ないのですが、createHttpRequestForJenkinsではリクエストを送ることだけ知っていて欲しかったので、最終的には下記のようにして実装を行いました(メソッドの実装内容は割愛します)。

private static function createHttpRequestForJenkins(): HttpRequest {
    $request_header = ApiRequestHeader::createContentTypeApplicationJsonHeader()
    // basic認証情報を設定
    ->withBasicAuth('user_name', 'password');
    ......
}

まとめ

curl -uはシンプルに認証情報をヘッダーに設定できる便利なオプションですが、いざ自分で同様の情報をヘッダーに設定する際に"?"となってしまったのでまとめてみました。どなたかのお役に立てば幸いです。

1
0
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
1
0