RitoLabo

LaravelでBasic認証~全体/一部にアプリケーションから側から気軽に設定する~

  • 公開:
  • 更新:
  • カテゴリ: PHP Laravel
  • タグ: PHP,Laravel,l5-very-basic-auth,5.5,5.4,5.3,5.6

Basic認証を掛ける時は通常、Apacheやnginxなどwebサーバ側で設定を行いますが、Laravelから、いわゆるアプリケーション側からもBasic認証を設定する事が出来ます。

今回は、Basic認証パッケージ「l5-very-basic-auth」を用いて、LaravelでBasic認証を設定します。

アジェンダ
  1. 開発環境
  2. l5-very-basic-auth
  3. インストール
  4. 設定ファイル
  5. サービスプロパイダーへ登録
  6. ルーティング
  7. 動作確認

開発環境

今回の開発環境は以下の通りです。

  • CentOS 7
  • Apache 2.4
  • PHP 7.2/7.1
  • Laravel

Laravelのバージョンについては 、5.6/5.5/5.4/5.3にて動作確認済みです。

Laravelのルートディレクトリを「laravel/」としています。

l5-very-basic-auth

l5-very-basic-auth は、Laravel用のBasic認証パッケージです。パッケージ名に「5」とついていますが、4系でも使えます。(導入・設定方法は5系と異なります)

ちなみにLaravelには標準でauth.basicが提供されていますが、データベースを必要とします。このパッケージはDBを使う事なくBasic認証を導入できるので、その点で気軽に使う事ができます。

インストール

composerでパッケージを導入していきます。laravelのルートディレクトリへ移動し、以下のコマンドを叩きます。

# Laravelのルートディレクトリへ移動
cd /path/to/laravel

# composerコマンドでパッケージのインストール
composer require olssonm/l5-very-basic-auth:5.*

# 実行結果
[demo@localhost laravel]$ composer require olssonm/l5-very-basic-auth:5.*
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals

- Installing
olssonm/l5-very-basic-auth (v5.2): Downloading (100%)
Writing lock file
Generating optimized autoload files

> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/dusk
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: olssonm/l5-very-basic-auth
Package manifest generated successfully.

コマンド末尾、「:」コロンの後には、Laravelのバージョンに応じたパッケージのバージョンを付けます。各バージョンの指定は以下の通りです。

  • 5.1/5.2 → 1.*
  • 5.3 → 2.*
  • 5.4/5.5/5.5/5.6 → 5.*

composer.jsonでパッケージが追加されているのが確認できます。

"require": {
"php": ">=7.1.3",
"fideloper/proxy": "~4.0",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.6.*",
"laravel/tinker": "~1.0",
"olssonm/l5-very-basic-auth": "5.*" // ← ココ
},

設定ファイル

まずは設定ファイルを生成します。下記のartisanコマンドを叩きます。

# Laravelのルートディレクトリへ移動
cd /path/to/laravel

# 設定ファイルの公開
php artisan vendor:publish --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"

# 実行結果
[demo@localhost laravel]$ php artisan vendor:publish --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"
Copied File [/vendor/olssonm/l5-very-basic-auth/src/config.php] To [/config/very_basic_auth.php]
Publishing complete.

laravel/config 配下に very_basic_auth.php が生成されます。

laravel
├─ config
| ├─
very_basic_auth.php

設定を行います。ここでBasic認証で使うユーザ名やパスワードなどを設定します。

laravel/config/very_basic_auth.php
<?php

/**
* Configuration for the "HTTP Very Basic Auth"-middleware
*/
return [
// Username
'user' => 'user_name',

// Password
'password' => 'my_password',

// Environments where the middleware is active. Use "*" to protect all envs
'envs' => [
'*'
],

// Message to display if the user "opts out"/clicks "cancel"
'error_message' => 'You have to supply your credentials to access this resource.',

// Message to display in the auth dialiog in some browsers (mainly Internet Explorer).
// Realm is also used to define a "space" that should share crentials.
'realm' => 'Basic Auth',

// If you prefer to use a view with your error message you can uncomment "error_view".
// This will superseed your default response message
// 'error_view' => 'very_basic_auth::default'
];
user
ユーザ名
password
パスワード
envs
どの環境で動作するかを設定します。デフォルトはアスタリスクで全ての環境が設定されています。環境を絞る場合は配列の形でenvファイルに記述している環境名を記述します。
error_message
Basic認証に失敗した時に表示するメッセージ
error_view
エラーメッセージではなくviewを使う場合はコメントアウトを外します。

サービスプロパイダーへ登録

このパッケージをサービスプロパイダーへ登録します。

laravel/config/app.php
'providers' => [
// l5-very-basic-auth
Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider::class,
],

ルーティング

最後に、ルーティングを設定します。

laravel/routes/web.php
Route::group(['middleware' => 'auth.very_basic'], function() {

Route::get('/', function () { return view('welcome'); });

});

Basic認証を掛けたいルーティングをこの中に入れる事で対象とします。

動作確認

ブラウザからアクセスしてみます。

Basic認証ダイアログ

ダイアログが出力され、Basic認証がかかっている事が確認できました。

まとめ

以上で作業は完了です。このパッケージの良いところは、サーバやDBの設定が不要で、気軽にベーシック認証を導入できるところです。 また、ベーシック認証の導入箇所を自由にルーティングできる事から、使い勝手も良く、便利です。 laravelの最新バージョンにも素早く対応しているので、これからずっと使えるパッケージです。

ちなみにこのパッケージを本番環境でも使用する場合は、ブルートフォース攻撃からのセキュリティを万全にする為にログインの試行回数に制限をかけましょう。(ApacheやNginxのrate-limiters)

気軽に導入出来て便利なので、是非試してみてください。