Railsで作成したアプリケーションへのBasic認証の導入
Basic認証とは
Webサイトへ最も簡単にアクセス制限をかける方法のひとつです。
Basic認証はWebサーバーの機能のひとつでRuby on Rails
の場合、下記に説明する内容を記述をするだけで簡単にアクセス制限をつけられます。
実装対象プログラム・ファイル
- app/controllers/application_controller.rb
ローカル環境
~/.bash_profile本番環境(AWS)
/etc/environment
Basic認証用 環境変数の追加
ユーザー名・パスワードを環境変数として追加する。
ローカル環境
$ vim ~/.bash_profile # .bash_profileを開いたら、キーボード「i」を押下しインサートモードへ # .bash_profileへ下記記述を追加(PASSWORDの値は各人で決めてください。下記は例として`7777`とします。) export BASIC_AUTH_USER='admin' export BASIC_AUTH_PASSWORD='7777' # escキーを押下しインサートモードを終了 #「:wq」と入力し保存し、vimを終了する。 # .bash_profileの読込みのため、下記コマンドを実行し、設定した環境変数を有効にする。 $ source ~/.bash_profile # 有効になっているか下記コマンドで確認する。 $ env | grep BASIC_AUTH_USER # 有効な場合、`admin`と表示される。 $ env | grep BASIC_AUTH_PASSWORD # 有効な場合、`7777`と表示される。
本番環境
$ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP] $ sudo vim /etc/environment # environmentを開いたら、キーボード「i」を押下しインサートモードへ # environmentへ下記記述を追加(PASSWORDの値は各人で決めてください。下記は例として`7777`とします。) BASIC_AUTH_USER='admin' BASIC_AUTH_PASSWORD='7777' # escキーを押下しインサートモードを終了 #「:wq」と入力し保存し、vimを終了する。 # 編集した環境変数を適用するために一旦ログアウトします。 $ exit # 再度ログイン $ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP] # 環境変数が適用されているか下記コマンドを実行し確認する。 $ env | grep BASIC_AUTH_USER # 有効な場合、`admin`と表示される。 $ env | grep BASIC_AUTH_PASSWORD # 有効な場合、`7777`と表示される。
アプリケーションコントローラーへの実装
環境変数への設定が完了したため、環境変数を用いて実装を行う。
controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :basic_auth protect_from_forgery with: :exception private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] end end end
追加した環境変数を用いて、Basic認証が実施可能なユーザー名とパスワードを定義が完了した。
ローカルサーバーをrails s
で起動するか、本番環境へアクセスし、
下記画面のようにユーザー名とパスワード入力画面が表示されれば認証部分の実装ができています。
最後に設定したユーザー名、パスワードを入力し、ルーティングに設定したトップ画面が閲覧できれば成功です。
補足
authenticate_or_request_with_http_basic Ruby on RailsでBasic認証を実装するためのメソッド ブロックへusernameとpasswordを設定することでBasic認証の利用が可能となる。