エンジニア転職日記

エンジニア転職に向けての日記です

How to Basic認証

概要

Webアプリケーション作成において、Basic認証が必要になりました。

 

shangang7321.hatenablog.com

 

に引き続き、定着のためアウトプットしていきます。

Basic認証とは

Basic認証は、HTTP通信にログイン情報を乗せて送る認証機能です。Basic認証を導入したWebアプリケーションにアクセスすると、ポップアップウィンドウが表示され、ログイン情報を求められます。ログイン機能、といえばRailsにはdeviseというライブラリがありますが、deviseは「ユーザー」の新規登録やログインなど、サービス面を構築するのに対し、Basic認証は公開前のアプリケーションなど、「開発者」の管理のために使います。

 

使い方

メソッド定義

Railsには、Basic認証を実装するためのメソッドがあります。application_controller.rbにbefore_actionとして記述することで、全ての機能に認証をかけることができます。

以下のように記述し、ブロックの内部でusernameとpasswordを設定します。

class ApplicationController < ActionController::Base
  before_action :basic_auth

  private

  def basic_auth
    authenticate_or_request_with_http_basic do |username, password|
      username == 'administrator' && password == 'password'
    end
  end
end

これで、アプリケーションへのアクセス時にusernameとpasswordを要求されるようになりました。usernameの欄にはadministrator、passwordの欄にはpasswordと入力すればアクセスが可能です。

 

環境変数への設定

ここまでの作業でBasic認証を実装することができましたが、このソースコードGithubなどで管理する場合、第三者もログイン情報を知ることができてしまいます。

開発環境、本番環境の双方にて環境変数を設定し、ソースコードからログイン情報が読み取れないように対策していきます。

 

開発環境の環境変数に、ログイン情報を格納します。

% vim ~/.zshrc

# .zshrcを開いたら、「i」とタイプしてインサートモードに移行

# .zshrcの内部に次の記述を追加
export BASIC_AUTH_USER='administrator'
export BASIC_AUTH_PASSWORD='password'
# 記述を追加したら、escキーを押してインサートモードを抜け、「:wq」と入力して保存して終了する

# .zshrcを再読み込みし、定義した環境変数を有効にする
% source ~/.zshrc

これで、ローカル環境の環境変数にログイン情報を格納できました。

次は、application_controller.rbにて、アプリケーションのログイン情報を環境変数で読み込むように設定していきます。

class ApplicationController < ActionController::Base
  before_action :basic_auth

  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

以上で、開発環境におけるログイン情報の環境変数への格納は完了しました。

 

それでは、本番環境にも環境変数を設定していきましょう。

heroku_app % heroku config:set BASIC_AUTH_USER="administrator" 
heroku_app % heroku config:set BASIC_AUTH_PASSWORD="password" 

正しく設定できているか確認します。

heroku_app % heroku config 

以下のように表示されればOKです。

BASIC_AUTH_PASSWORD:      password
BASIC_AUTH_USER:          administrator

変更したコードをコミットし、デプロイします。

heroku_app % git add .
heroku_app % git commit -m “Basic認証を導入”
heroku_app % git push heroku master

 

また、実装してもポップアップウィンドウが表示されない場合はブラウザに情報が保存されてしまっている可能性があるので、シークレットウィンドウモードでアクセスしてみてください。

 

参考

https://www.shadan-kun.com/blog/measure/461/

https://japan.norton.com/basic-authentication-10326