Heroku에서 Rails/Basic 인증을 도입한다.

처음에



프로덕션 환경에서 Basic 인증을 도입하고 싶다고 생각했습니다.
AWS는 한 적이 있지만 Heroku가 아니었기 때문에 이번에 한 일을 기록하고 싶습니다.

Basic 인증이란?



웹사이트에 액세스 제한하는 데 있어서, 간이적으로 제한을 걸 수 있는 방법으로서 들 수 있는 것은 기본 인증(Basic 인증).
기본 인증(Basic 인증)은 웹 서버에 수반되는 기능 중 하나로 파일에 몇 줄의 설명을 하는 것만으로 간단하게 액세스 제한을 걸 수 있습니다.
Basic認証
기본 인증(Basic 인증)이란 웹사이트의 특정 영역, 즉 페이지나 파일에 액세스 제한을 걸 수 있는 인증 방법의 하나.
기본 인증을 거치면 인증을 걸었던 웹 사이트에 액세스하려고 할 때 위 이미지와 같은 인증 대화 상자가 시작되어 사용자 이름 (ID)과 암호를 입력해야합니다.

Basic 인증의 특징



· 장점



① 디렉토리 단위로의 액세스 제한이 가능



②인증 완료 후 브라우저를 닫을 때까지 유효



③ 브라우저가 로그인 정보를 기억



・단점



①보안 취약성



 - ※인용-
기본 인증은 로그인 정보를 입력하여 전송할 때 "Base64"라는 문자 코드를 사용하여 통신합니다.
「Base64」는 간이적인 통신을 할 때의 문자 코드로, 알파벳·숫자·특정의 기호만의 64 종류의 문자가 이용 가능합니다.
즉, 기본 인증으로 입력한 로그인 정보는 「Base64」의 문자 코드로 표현할 수 있는 알파벳・숫자・기호로 통신되어 버립니다.
만약, 베이직 인증을 거친 웹 페이지가 「https」가 아니고, SSL 대응이 되어 있지 않은 「http」통신인 경우, 외부로부터 로그인 정보가 도청되기 쉬워지고 있기 때문에 주의가 필요합니다.

② 크롤러도 액세스할 수 없다



③서버를 넘은 설정을 할 수 없다



④ 스마트폰으로 로그인 정보를 저장할 수 없다



기본 설정 방법(Heroku에 배포)



모든 컨트롤러에서 Basic 인증을 하기 위해서 application_controller.rb에 코드를 추기.
Rails에는 Basic 인증을 하기 위한 이하의 메소드가 준비되어 있다.
'authenticate_or_request_with_http_basic'
이것이 Rails로 간단하게 Basic 인증을 구현해 주는 메소드.

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :basic_auth, if: :production?

  private

  def production?   #←本番環境かローカルを区別する。
    Rails.env.production?
  end

  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

환경 변수에 USER와 PASSWORD를 추가한다.



터미널.
% vim ~/.bash_profile

#「i」を押してインサートモードにいく
#自分で設定したUSERとPASSWORDを以下の様に追記する。

export BASIC_AUTH_USER='USER'
export BASIC_AUTH_PASSWORD='PASSWORD'

#escキーを押し、「:wq」を押して保存

% sudo vim /etc/environment
Password:  #←手持ちPCのパスワード

#「i」を押してインサートモードにいく
#自分で設定したUSERとPASSWORDを以下の様に追記する。

BASIC_AUTH_USER='USER'
BASIC_AUTH_PASSWORD='PASSWORD'

#escキーを押し、「:wq」を押して保存

#heroku configにてHeroku上に反映されているか確認する。

% heroku config                             
=== アプリ名 Config Vars
BASIC_AUTH_USER:          'USER'
BASIC_AUTH_PASSWORD:      'PASSWORD'


username == ENV['BASIC_AUTH_USER'] && password == ENV['BASIC_AUTH_PASSWORD']는 환경 변수로 하는 이유로서 환경 변수로 하지 않고 Github에 커밋 업하면 비밀번호를 한눈에 알 수 있기 때문.

배포 동작 확인



위의 방법으로 기본 인증을 설정할 수 있습니다.

좋은 웹페이지 즐겨찾기