shimmyShow Webアプリ開発ブログ

プログラミングスクールTECH::CAMPを73期を卒業し、紙媒体で実施されている教育の根本を変えていくためのサービスを開発中。当ブログを読めば誰でも当該サービスを開発できるようにするため軌跡を記録中。

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で起動するか、本番環境へアクセスし、
下記画面のようにユーザー名とパスワード入力画面が表示されれば認証部分の実装ができています。
最後に設定したユーザー名、パスワードを入力し、ルーティングに設定したトップ画面が閲覧できれば成功です。
f:id:erwinmarvin:20201008231531p:plain

補足

authenticate_or_request_with_http_basic Ruby on RailsでBasic認証を実装するためのメソッド ブロックへusernameとpasswordを設定することでBasic認証の利用が可能となる。