2
3

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 1 year has passed since last update.

rendaman on ディップ Advent Calendar 2022Advent Calendar 2022

Day 2

【認証】Auth0を用いた開発のいろは

Last updated at Posted at 2022-12-01

はじめに

こんにちは。rendaman0215です。
先日、社内でAuth0を利用した認証基盤を導入しました。
弊社ではOIDCに準拠した認証基盤をセキュアかつ工数をかけずに実現したかったためAuth0を利用しました。
Auth0には様々な機能がありますが、今回は開発時に使用した機能を紹介していきたいと思います。

対象の読者

  • 社内のID管理に導入を検討している方
  • Auth0の日本語ドキュメントがなくて困っている方

登場人物

  • アカウント
    • 課金単位
    • 弊社では全社で1アカウントを使っています
    • このアカウントに紐づくテナントでのMAU単位で料金が上がる
  • テナント
    • アカウントに対して紐づく
    • 各環境(Develop、Staging、Production)
  • テナントメンバー
    • テナントに対して紐づく
    • 開発者ごとに払い出す
    • 権限により各メンバーを操作を制御可能
  • ユーザー
    • テナントに紐づくAuthenticationで認証されるユーザー
    • User Managementで詳細を確認可能

テナントメンバーの権限一覧

Auth0上で選択できる権限一覧は以下の通り。
公式の表で詳細を確認可能となっています。

Role 権限
Admin すべてのリソースへの読み取りおよび書き込みが可能
Editor - Specific Apps 特定のアプリケーションへの読み取りおよび書き込みが可能
Editor - Connections 全種類のコネクションに対し読み取り、書き込み、作成が可能
Editor - Users ユーザー管理操作(ブロック、ブロック解除、MFAのリセット、パスワードのリセット、メタデータの更新、役割の割り当てなど)とログへのアクセスが可能
Viewer - Users ユーザーとログへの読み取りが可能
Viewer - Config シークレット、請求、ユーザー、ログなどの機密情報を除く、すべての構成設定(アプリケーション、API、ルール、セキュリティ設定など)への読み取りが可能
Support Access サポートチケットの発行&閲覧が可能

Application

OpendID ConnectでいうところのRelying Party(認証機能を導入したいアプリケーション)をここで定義します。
Create Applicationから作成できます。
※ 下側にあるAPIsは認可にまつわる機能で、SSO IntegrationsはSSOに関わる機能になるため今回は割愛します。
スクリーンショット 2022-11-03 17.12.19.png
アプリケーションを作成すると、まずSPANativeRegular Web AppMachine to Machineの4つからアプリケーションの種類を選ぶことにあります。
基本的に選んだ種類によってよしなに初期設定がされますが、後からいくらでも設定変更は可能となっています。
ただし、Machine to Machineについては、システム間認可を行うことができる機能のため毛色が異なります。
また、選んだ種類によってQuickStartで表示されるSDKの種類が異なってきます。
Auth0を用いた開発では、SDKを利用することでRP側の開発も圧倒的に楽になるので活用するとよいでしょう。

Authentication

OpendID ConnectでいうところのOpenID Provider(認証機能を提供する機関)をここで定義します。

Database

Auth0のデータベースを利用してユーザを管理する場合こちらからデータベースを作成できます。
また、後述するCustom Database Connection機能を利用する場合もこちらから作成します。
Create DB Connectionから作成できます。
スクリーンショット 2022-11-03 17.28.02.png

Custom Database Connection

弊社では、社内のデータベースにいるユーザを認証対象としたいという要件がありました。
また、そのデータベースも日々更新されるため、Auth0上にユーザをインポートすることはせず、認証時に毎回社内のデータベースを見に行くようにしたかったです。
そこで利用したのがCustom Database Connectionでした。
データベース作成時にUse my own databaseにチェックを入れることで利用できます。
Custom Database Connectionでは、DBの繋ぎ込み部分をDatabase Action Scriptsをという機能を使ってJavaScript自由に定義できます。
Load TemplateからDBの種類によってテンプレートを読み込むことができます。
スクリーンショット 2022-11-03 17.34.58.png

DBとの繋ぎ込み部分はAPI開発

Database Action Scriptsのテンプレートが存在するとはいえ、これはデータベースが外部からアクセスできる場合に限ります。アクセスする可能性のあるIP一覧はAuth0上に記載されるため、セキュリティグループで制御できますが、やはりパブリックサブネットにDBをおくのはなかなか厳しいです。
そこで弊社では、認証クレデンシャルの照合に特化したAPIをDBの前に作成し、Database Action ScriptsからそのAPIに対してリクエストするようにしました。

Social

Google/GMail、AppleID、Twitter、Facebook、Amazonを利用する場合こちらからコネクションを作成できます。
こちらの機能を用いることで簡単にOPとして使用することができます。

Enterprise

SAML、MicrosoftAD、Google Workspace、他のOIDCに準拠したOPを利用する場合こちらからコネクションを作成できます。
MicrosoftADなどでユーザを管理している場合ここから設定することで、簡単にOPとして使用することができます。

Actions

IDトークンのペイロードにカスタムクレームを追加する際に利用します。
フローチャートを用いて、何をする時どのタイミングで何をするかを定義できます。
こちらの手順などを参考に簡単に実装できるようになっています。

Branding

カスタムURL

デフォルトでは、テナント名.リージョン.auth0.comでログイン画面にアクセスしますが、こちらを設定することで任意のURLを定義することができます。

カスタムログイン

ログイン画面のデザインを修正することができます。

カスタムメールプロバイダ

デフォルトでは、自動配信されるメールはAuth0のドメインから配信されますが、設定することで任意のアドレスから配信することが可能になります。
2022/11時点で選べるサービスは以下の通り。
スクリーンショット 2022-11-03 17.48.15.png

カスタムメールテンプレート

カスタムメールプロバイダを設定している場合に利用できる機能です。
自動配信される各種メールのテンプレートを修正できます。

ex) パスワード変更メール、アカウントロックのメール等

Settings

テナント名、ロゴ、環境の種別(Dev、Stage、Prod)、言語などテナント共通の設定ができます。
また、上部に記載した、テナントメンバーの権限もこちらで設定可能です。

Support

こちらからAuth0サポートの方に連絡できます。
基本的に英語でのやりとりになりますが、日本語も一応対応しているとのことでした。
ただし、英語の場合一晩も待てば返事が返ってきますが、日本語の場合は定かではないらしいです。
サポートからの回答は品質も高く、本質的な回答をいただけることが多いです。
また、質問によっては実装レベルで回答してくれました。

まとめ

私自信、数ヶ月使って慣れましたが、英語限定ということもあり初見ではなにがどういう機能なのかわかりませんでした。
今回この記事を見て、みなさんの導入がより楽になればと思います。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?