とある日、Bearer認証を使っているシステムを、Basic認証がかかっている開発環境に設置する事になりました。
このような場合どちらの認証もAuthorizationヘッダを利用しているので、競合してうまく認証する事が出来なくなります。
すでに本番稼働しているシステムなのでBearerのヘッダ名を根本から変える事はしたくないので、AuthorizationヘッダでのBearer認証も残しつつ、この環境だけ別のヘッダ名にしようと思います。
Laravelでは$request->bearerToken()
でBearerトークンを取得する事ができます。
これは、Illuminate\Http\Concerns
の trait InteractsWithInput
にあります。
なので、ここにちょこっと細工をしてしまえば…。
public function bearerToken()
{
$header = $this->header('X-Authorization', null) ?? $this->header('Authorization', '');
if (Str::startsWith($header, 'Bearer ')) {
return Str::substr($header, 7);
}
}
通常の環境ではAuthorizationヘッダでBearerトークンが送られてくるのでそちらを取得し、
X-Authorizationヘッダが送られてくる環境ではそちらからBearerトークンを取得します。
あとは書き換えたファイルを/venderディレクトリとは違うどこか適当な場所に保存して、composer.jsonのfilesで修正後のファイルを読み込むように、exclude-from-classmapで元ファイルを読み込まないように指定してあげればokです。