Auth0(クラウド統合認証プラットフォーム)について調査

Web

はじめに

「AWS Cognito」、「Firebase」と調査をしていたが、かゆいところに手がとどかない感じだったがようやく至れり尽くせりのサービスを発見。
(とはいえ、価格帯を考慮に入れた場合は「Firebase」が良さそう。「AWS Cognito」はUIがわかりにくいわ、ドキュメントはわかりにくいわでイマイチな印象。)

Auth0 (クラウド統合認証プラットフォーム) とは

  • 以下のような形態のアプリケーションに対して、認証・認可のサービスをクラウドで提供している
    • Webアプリ
    • モバイル
    • API
  • いわゆるIDaaS (Identity as a Service)ベンダー
  • ユーザー認証/認可/セキュリティを用意に実現することが可能

Auth0が提供するログインページの種類

大きく2つの形態が選択できる

Classicログインページ

  • "Lock.js" と呼ばれる JavaScriptライブラリベースのログインページ
  • 自分のサービス提供ドメイン 内からログインページを提供
  • 以下の方法で利用可能
    • Githubからダウンロード
    • NPMやYARNでインストール

Newログインページ

  • JavaScriptを使用してはいない
  • Auth0の管理ドメイン 内からログインページを提供
    • ただし、手を加えれば 自分のサービス提供ドメイン 内から提供するようにカスタマイズすることは可能
  • HTMLで提供されており、軽量で速い

ログインページのカスタマイズについて

軽微なログインページのカスタマイズ

簡単なデザイン変更はダッシュボードページから即座に可能。

  • ログ
  • 文字色
  • 背景色

大幅なログインページのカスタマイズ

デフォルトで提供されているログインページのHTMLを直接書き換えることも可能

  • 一応重要度を理解して触ってもらうためか、「トグルボタン」をスイッチさせないとHTML編集ができないUIとなっている

ログインページの表示言語のカスタマイズ

Newログインページ に関しては、適切な言語設定表示に切替可能。
切替可能な言語の一覧は、こちらのページで公開されている。 ( https://auth0.com/docs/universal-login/i18n )

ログインページの言語切替の仕組みは以下のルールに基づいて行われる。

  • 「設定ページ」からサポートする言語設定を複数選択可能。
    • 複数選択したサポート言語のうち、いずれか1つがデフォルトサポート言語となる
    • デフォルトでは英語のみサポートする設定となっている
    • 「日本語」だけを提供したい場合は「日本語」のみをサポートする言語として選択すればよい

ブラウザがアクセスしてきた際に上記のサポート言語のいずれかから適切な言語を選択する。

  1. ログインページURLへのリダイレクト時に付与された ui_locales クエリ文字列を条件に検索。( ex : ui_locales=ja
  2. ブラウザが送信する Accept-Language リクエストヘッダ情報を条件に検索。
  3. 上記いずれを使ってもサポート言語が見つからない場合はデフォルトサポート言語を利用。

認証フロー(既存のレガシーWebアプリケーションが認証状態に至るまでの流れ)

定番の「OAuth2」の認証フローと同様。
既存のレガシーWebアプリケーションを修正しないといけない点は「2」の 未ログイン状態の場合には"Auth0"へリダイレクトさせる 部分と、「6」の 「Auth0」認証後にリダイレクトされ受け取った「認可コード(code)」の値、クライアントID、クライアントシークレットの3つを使って"Auth0"に問い合わせをを行う という点。

JWT などの理解をする必要がなく、「クライアントシークレット」さえもれなければセキュリティは保たれるので安全に実現したい場合には最適。

認証フローで登場するURLとパラメータ情報詳細

実装よりの話となり、以下のページの資料を参照。(やはり「OAuth2」を理解していれば同じようなパラメータ構造となっている事がわかる)

SalesforceがAuth2に対応しているかを追加で調査するための観点

SalesforceがAuth0を使った認証方式に対応しているか不明なので、Salesforceの認証を設定するためのページがあれば以下の点を確認してみることをおすすめする。

  1. 当フローREgular Web App の部分がSalesforceのサーバー として考える
  2. おそらくSalesforce上には以下の設定項目があるはず。(なければAuth2が実現できない)
    • "Auth0 Tenant" へのリダイレクトのための認可コードリクエスト用URL
    • クライアントID
    • クライアントシークレット
    • クライアントID、クライアントシークレット、受け取った認可コードの検証リクエスト用URL

強烈な機能

ユーザ情報の管理は「Auth0」の内部DBに保持している。

ただし、内部DBを使わずレガシーシステムで保持しているDBをユーザ情報の管理DBとして利用することも可能。
この場合、「Auth0」がレガシーシステムDBに対して直接接続しにくる。

以下のようなDBに対応。

  • MySQL
  • Oracle
  • PostgreSQL
  • Sql Server
  • MoongoDB
  • (以下省略)

Web