LoginSignup
4
1

More than 3 years have passed since last update.

Auth0の概要とRailsでの利用例

Last updated at Posted at 2020-06-18

Auth0とは

言語、フレームワークを問わずに数行のコードを追加するだけで、webサービスやネイティブアプリに認証・認可機能を実現できるサービス。

できること

  • GoogleやFacebookなどのソーシャルアカウント認証
  • メールやSMSを利用したワンタイムパスワード認証
  • 多要素認証
  • パスワードを忘れた場合等の再設定の一連のフロー
  • ユーザー登録時に登録を促す情報の指定
  • アクセスコントロール
  • ログインに関するイベントからのweb hook
  • 複数アプリケーションでのシングルサインオン
  • 異常アクセスの検知やブロック
  • etc.

利用例

  • ログイン認証
  • APIの認可サーバ
  • APIサーバに認証組み込み

ログイン認証

種類

  • ユニバーサルログイン: Auth0がホストするwebページでアプリケーションにログイン
    • ログインと認証が同じドメインで行われ、認証情報がクロスドメインで移動しないため、セキュリティが向上し、フィッシング攻撃や中間者攻撃から保護される
    • Auth0のダッシュボードからログインページの(少々の)UIと動作を変更できるため、アプリケーションコードの変更が不要
    • Classic Universal LoginとNew Universal Loginがあり、カスタマイズ性と動作速度に差がある

New Universal Login(ほぼカスタマイズできない)でGoogle認証のみを指定した例
スクリーンショット 2020-06-18 13.44.19.png

  • 埋め込みログイン: アプリケーション上のwebページでアプリケーションにログイン
    • 認証のみをAuth0に任せるので、アプリケーションと親和性のあるUXを考慮したログインページを作成できる
    • 必然的にクロスオリジン認証になる

javascriptの場合の認証実行例

document
  .getElementById('login')
  .addEventListener('click', async () => {
    await auth0.loginWithRedirect();
  });

実装方法

  • Auth0のダッシュボードにてApplication(と呼ばれるOauthクライアント)を作成する
  • 上記のApplicationにログイン処理後に遷移するのコールバックURLを設定する
  • ログイン認証を付与するwebアプリケーション側に、ログインページへの遷移処理とログイン処理後の処理を記述する

詳細は以下の通り
Quick Start (Railsの例だが、言語に応じた実装方法が表示される)

deviseからの移行

Railsの認証ライブラリのdeviseで利用していたcurrent_userauthenticate_user!をそのまま利用するために以下のモジュールを作成し、application_controller.rbにincludeする。

module Auth0Helper
  private

  def user_signed_in?
    session[:userinfo].present?
  end

  def authenticate_user!
    if user_signed_in?
      @current_user = User.from_omniauth(session[:userinfo]) # from_omniauthはuserを特定するロジック
    else
      redirect_to login_path
    end
  end

  def current_user
    @current_user
  end
end

Web APIの認可サーバ

クラウドサービスでAPIサービスを利用する時の認証認可の仕組みを提供する。
以下はAWSのAPI GatewayからLambda関数を呼び出す際のAPI Gatewayの認証認可のフロー

スクリーンショット 2020-06-18 12.33.59.png

Lambdaを利用したPDFパース処理での利用例
スクリーンショット 2020-06-18 12.48.07.png

実装方法

  • Auth0のダッシュボードにてAPI(と呼ばれるAuth0認証するためのエンドポイント)を作成する
    • このAPIを利用することで、クライアントIDとクライアントシークレットを元にAuth0で認証できる
  • Web APIを呼び出すクライアント側に、上記APIを呼び出す処理を記述する

詳細は以下の通り
Securing AWS HTTP APIs with JWT Authorizers

APIサーバ

実装方法

  • Auth0のダッシュボードにてAPI(と呼ばれるAuth0認証するためのエンドポイント)を作成する
    • このAPIを利用することで、クライアントIDとクライアントシークレットを元にAuth0で認証できる
  • APIサーバ側に、Auth0からのレスポンスの検証処理を記述する

詳細は以下の通り
Building Secure APIs with Rails 6 and Auth0

4
1
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
4
1