1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails Basic認証導入

Last updated at Posted at 2021-02-24

はじめに

個人でアプリケーション開発を行った時の必要最低限の認証機能を実装しました。
今回はその機能を簡単に実装できるように記載しました。

実行環境

pc: macOS Catalina
shell: zsh
rails: 6.0.0
ruby: 2.7.2

Basic認証とは?

Basic認証は、アプリケーションを使用できるユーザーを限定することです。

HTTP通信の規格に備え付けられているユーザー認証の仕組みのことをいいます。
サーバーとの通信が可能なユーザーとパスワードをあらかじめ設定し、それに一致したユーザーのみが、アプリケーションを利用できることです。

アプリケーションを本番環境を整えると、全世界誰でもアクセスができる状態になります。
その為ユーザーに制限をかけることで、ユーザー名・パスワードを知っている人のみ使用ができます。

導入方法

Basic認証はGemやAPIを使用しないで簡単に実装することが可能になります。
詳しくは以下になります。
1、app/controllers/application_controller.rbにauthenticate_or_request_with_http_basicメソッドを記述する。
2、開発環境に環境変数を設定する
以上

本番環境の場合は
3、本番環境の環境変数を設定する

Basic認証導入

まずは、Basic認証を使用できるように以下のコードを記述します。

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

環境変数の設定

次に、開発環境の環境変数を設定します。
ターミナルの以下の順番で処理を実行してください。

1: vim ~/.zshrc
2: インザートモードで以下を記述します。
   export BASIC_AUTH_USER='ユーザー名'
   export BASIC_AUTH_PASSWORD='パスワード'
3: escキー
4: :wq
5: Enterキー
6: source ~/.zshrc

これで環境変数の設定が完了しました。

本番環境で設定する場合(Heroku)

以下のコマンドをターミナルで実行してください。

# 以下で本番環境の環境変数設定ができます
heroku config:set BASIC_AUTH_USER="ユーザー名"
heroku config:set BASIC_AUTH_PASSWORD="パスワード"

# 正しく設定できているか確認できるコマンドは以下です
heroku config

解説

なぜ、application_controllerに実装するのか?
application_controllerはコントローラーの共通になるからです。
application_controllerに実装することで全てのコントローラーにBasic認証を要求することができます。
そして、before_actionを設定することでログイン前に実行できるようになります。

application_controller.rb
class ApplicationController < ActionController::Base
    before_action :basic_auth
    # before_actionを使用することで優先して処理をできるようにしています。

    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
  # ENV['BASIC_AUTH_USER'] && password == ENV['BASIC_AUTH_PASSWORD']は環境変数から設定した
  # ユーザー名・パスワードを呼び出すためのコードになります。
end

まとめ

Basic認証は少ないコードで実装ができ便利ですが、安全性に関しては高い訳ではありません。
HTTP通信で定義されている為、ユーザー名・パスワードがそのまま漏洩するリスクもあります。
それに誰でも簡易に実装できるがために、オリジナルアプリに導入してもスコアがもらえることは無いでしょう。
ログアウト機能という概念が無いため、より性能を高めるためには複数のサーバーをまたいだ認証なため実装が困難になります。
そのため、画期的とは言えないでしょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?