ROUTE 3390

備忘録的な用途で書いていますが、どなたかの役に立つ事があれば嬉しいです。

HTTP Authorizationヘッダを環境変数にセットする

Apacheを利用している場合、デフォルト状態だと
Authorizationヘッダの中身を環境変数には入れてくれません。

プログラム上で認証処理を行いたい場合は、下記のようにRewriteRuleを使って
環境変数に格納してあげる必要があります。

.htaccess

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

例は.htaccessですが、httpd.confでやってもいいと思います。


HTTP Authorizationヘッダというのは、HTTP通信において
認証を行うための値を格納する場所です。

BASIC認証とかだと、ユーザーが入力したユーザーIDやパスワードは
HTTPのAuthorizationヘッダに含まれて送信されるんです。


BASIC認証に限らずとも、認証を行うための値をやり取りする場合はこのヘッダを利用するのが一応マナーになっているらしいです。
(マナーというかHTTPプロトコルの設計?)


例えば特定のクライアントからしか叩かせたくないAPIを作る場合、
きっとWebエンジニア相手に
「認証キーはSasakureなんでそれをAuthorizationヘッダに入れてリクエストして下さい。」
とか言えばすぐ伝わるんだと思います。


リクエストCGIの例

#!/usr/bin/perl

use strict;
use warnings;

my $ua = LWP::UserAgent->new;
$ua->timeout(10);
my $req = HTTP::Request->new( GET => 'http://xx.xx.xx.xx/index.cgi');
$req->header( 'Authorization' => 'Sasakure' );
$ua->request($req);

exit;


index.cgiでは
$ENV{HTTP_AUTHORIZATION}によって「Sasakure」が取得出来るようになる。