概要
Basic認証とは、HTTP通信の規格に備え付けられているユーザー認証の仕組みです。サーバーと通信できるユーザー名とパスワードをあらかじめ設定し、それに一致するユーザーのみがWebアプリケーションを利用できるようにします。この記事では、RailsアプリケーションにBasic認証を導入する方法を簡単に説明します。
1. Basic認証の設定方法
1.1 コントローラーでの設定
authenticate_or_request_with_http_basic
メソッドを使用して、開発中のRailsアプリケーションにBasic認証を導入します。以下の例では、ユーザー名admin
とパスワードpassword
で認証を行います。
class ApplicationController < ActionController::Base
before_action :basic_auth
private
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == 'admin' && password == 'password'
end
end
end
1.2 すべてのページでBasic認証を適用
上記のコードをApplicationController
に追加することで、アプリケーションのすべてのページでBasic認証が適用されます。
2. セキュリティの向上: 環境変数の利用
コードにユーザー名とパスワードを直接記述すると、公開リポジトリでソースコードを管理している場合、不正にBasic認証を突破されるリスクがあります。この対策として、環境変数を利用します。
2.1 開発環境での環境変数の設定
まず、開発環境の環境変数にユーザー名とパスワードを設定します。
-
ターミナルを開き、
.zshrc
ファイルを編集します。vim ~/.zshrc
-
以下の行を追加して、ファイルを保存します。
export BASIC_AUTH_USER='admin' export BASIC_AUTH_PASSWORD='password'
-
ファイルの変更を反映するために
source
コマンドを実行します。source ~/.zshrc
2.2 Railsアプリケーションでの環境変数の使用
環境変数を読み込むように、basic_auth
メソッドを修正します。
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
3. 動作確認
環境変数が正しく設定されているか確認するために、サーバーを再起動し、任意のページにアクセスしてBasic認証の動作を確認します。間違った情報ではログインできないこと、正しい情報でログインできることを確認しましょう。
4. 本番環境での設定
本番環境でも同様に環境変数を設定します。例えば、HerokuやRenderなどのホスティングサービスを利用している場合、それぞれのサービスのダッシュボードから環境変数を設定します。
4.1 Renderなどのサーバーでの環境変数設定
- Renderのダッシュボードにアクセスし、該当するアプリケーションを選択します。
- メニューの「Environment」を選択し、以下の環境変数を追加します。
-
BASIC_AUTH_USER
:admin
-
BASIC_AUTH_PASSWORD
:password
-
5. Basic認証の制限と注意点
Basic認証は手軽に導入できる認証方式ですが、以下のような制限があります。
- 認証情報はBase64でエンコードされて送信されるため、暗号化されていません。SSL/TLSを使用して通信を暗号化することが推奨されます。
- ログアウトの概念がないため、セッション管理が難しい場合があります。
このガイドを参考にして、開発中のWebアプリケーションやポートフォリオにBasic認証を導入してみました。
※セキュリティ関連のため今回は実際のコードをお見せすることができません💦