Auth0の機能を整理してみた

# 背景・目的
以前、Auth0を使用して下記のことを整理や試してみました。今回は、Auto0の概念や機能の詳細を整理してみます。

- Auth0の基本的な機能やアカウント作成
- API Gateway Lambdaオーソライザーを使用した認証認可

https://qiita.com/zumax/items/9da91f63a07b2d1df3b9

https://qiita.com/zumax/items/d8e30648bc3ca98ff79c

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Applications|アプリケーション、API、およびシングル サインオン (SSO) 統合を管理する<BR><BR>下記の機能を有する<BR>・Applications<BR>・API<BR>・SSO Integrations|
|Authentication|ユーザーがアプリへの認証を行えるようにする ID プロバイダーを管理する<BR><BR>下記の機能を有する<BR>・Database<BR>・Social<BR>・Enterprise<BR>・Passwordless|
| Organizations|取引先の組織を管理し、組織のユーザーがアプリケーションにアクセスする際のエクスペリエンスをカスタマイズする|
|User Management|ユーザーの ID と権限を管理する<BR><BR>下記の機能を有する<BR>・Users<BR>・Roles|
|Branding|下記の機能を有する<BR>・Universal Login<BR>・Custom Domains<BR>・Email Templates<BR>・Email Provider|
|Security|さまざまな種類の攻撃やユーザー アクセスの異常からユーザーを保護するシールドを有効にして、追加のセキュリティ層を構成する<BR><BR>下記の機能を有する<BR>・Attack Protection<BR>・Multi-factor Auth<BR>・Monitoring|
|Actions|ログイン、マシン間、ユーザー登録、パスワードのリセットなどのフローを構成する。<BR>フローで使用されるカスタマイズされたアクションを作成および管理する|
|Auth Pipeline|下記の機能を有する。<BR>・Rules<BR>・Hooks|
|Monitoring|下記の機能を有する。<BR>・Logs<BR>・Streams|
|Marketplace|Auth0 をさらに活用できる統合|
|Extensions|公式およびサードパーティのアドオンを使用して Auth0 プラットフォームを拡張する|
|Settings|・テナントを構成し、Auth0 サブスクリプションと支払いオプションを管理し、テナント管理者とその他のユーザー ロールを制御する<BR>・カスタム ドメイン、署名キー、その他の詳細設定に関連する他のテナント設定を管理する|
|Get Support|・サポートセンターにアクセス<BR>・使用のプランでサポート サービスにアクセスできない場合は、Auth0 コミュニティを参照|
|Multi-tenancy|サーバー上で実行され、複数のユーザー グループがアクセスできるソフトウェアの単一インスタンスを特徴とするアーキテクチャ アプローチ|
|Multi-tenancyでできること|共通の特性を持つユーザーをグループに分割し、アプリケーションへの個別の権限とアクセス レベルを付与できる|
|Multi-tenancyのメリット|さまざまな顧客、事業部門、またはその他の定義されたユーザー グループに合わせてカスタマイズされたエクスペリエンスを作成および維持できる|
|Auth0 Organizations|マルチテナントのユースケースでは、Auth0 Organizations が企業と企業のユーザーにとって理想的なソリューション<BR>エンドユーザーがアクセスできる 1 つ以上のアプリケーションを備えた企業間 (B2B) 実装をサポートする|

# 概要
下記を基に整理します。

https://auth0.com/docs/get-started/auth0-overview/dashboard

> The Auth0 Dashboard is where you manage all aspects of your Auth0 subscription and configuration.

- Auth0 ダッシュボードでは、Auth0 サブスクリプションと構成のあらゆる側面を管理する

## Configure implementation

ダッシュボードセクションの概要と、各セクションで実行できる操作の概要を整理します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a126a46b-5ea9-8d58-d36d-30ae13e54a38.png)


### Applications

> Manage your applications, APIs, and single sign-on (SSO) integrations.
Applications: For each of your apps for which you want to authenticate users with Auth0, register an application.
APIs: For each of your APIs that you want to secure with Auth0, register an API. Create new APIs and manage existing ones.
SSO Integrations: View and enable external services for SSO. Create new SSO integrations and configure, review, and manage integration settings.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/619d44c7-8175-f86d-8dbc-8b22b492b667.png)

- アプリケーション、API、およびシングル サインオン (SSO) 統合を管理する
    - Applications
        - Auth0 でユーザーを認証するアプリごとに、アプリケーションを登録する
    - API
        - Auth0 で保護する API ごとに、API を登録する
        - 新しい API を作成し、既存の API を管理する
    - SSO Integrations
        - SSO の外部サービスを表示して有効にする
        - 新しい SSO 統合を作成し、統合設定を構成、確認、管理する


### Authentication
> Manage the identity providers through which you allow users to authenticate to your apps.
Database: Securely store and manage identifier/password credentials either in an Auth0 datastore or in your own database. Connect to existing databases using template-based JavaScript scripts that run on Auth0's server during every authentication. Gradually migrate an existing database of legacy credentials to Auth0 as users authenticate (no password reset required).
Social: Configure social identity providers (such as Facebook, X, and Github) through which your users can log in.
Enterprise: Configure enterprise identity providers (such as Active Directory, SAML, and Office 365) through which your users can log in using their enterprise credentials.
Passwordless: Allow your users to sign up and log in using one-time passcodes (delivered by email or SMS) or one-click links, instead of passwords.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/26cad834-7591-b460-0a12-7822906cccce.png)


- ユーザーがアプリへの認証を行えるようにする ID プロバイダーを管理する
    - Database
        - Auth0 データストアまたは独自のデータベースのいずれかに、識別子/パスワード資格情報を安全に保存および管理する
        - 認証のたびに Auth0 サーバー上で実行されるテンプレートベースの JavaScript スクリプトを使用して、既存のデータベースに接続する
        - ユーザーの認証時に、従来の資格情報の既存のデータベースを Auth0 に徐々に移行する (パスワードのリセットは不要)
    - Social
        - ユーザーがログインできるソーシャル ID プロバイダー (Facebook、X、Github など) を構成する
    - Enterprise
        - ユーザーがエンタープライズ資格情報を使用してログインできるようにするエンタープライズ ID プロバイダー (Active Directory、SAML、Office 365 など) を構成する
    - Passwordless
        - ユーザーがパスワードの代わりにワンタイム パスコード (電子メールまたは SMS で配信される) またはワンクリック リンクを使用してサインアップおよびログインできるようする

### Organizations
> Manage the organizations you do business with, and customize the experience their users have when accessing your applications.
- 取引先の組織を管理し、組織のユーザーがアプリケーションにアクセスする際のエクスペリエンスをカスタマイズする

### User Management	
> Manage your users' identities and permissions.
Users: View and create user profiles, perform password resets, block and delete users, and more.
Roles: Create and manage roles for your apps. Roles contain collections of permissions and can be assigned to users.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a0ec7bbf-35ee-4fc1-71a5-53f8ce46d314.png)


- ユーザーの ID と権限を管理する
    - Users
        - ユーザー プロファイルの表示と作成、パスワードのリセットの実行、ユーザーのブロックと削除などを行う
    - Roles
        - アプリのロールを作成および管理する
        - ロールには権限のコレクションが含まれており、ユーザーに割り当てることができる


### Branding
> Universal Login: Create and customize a login page to which you can direct users to authenticate.
Custom Domains: Create a custom domain to maintain a consistent experience for your users.
Email Templates: Use templates to create welcome, password reset, and account verification email-based workflows.
Email Provider: Designate and configure your custom email provider information.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/340f2d96-c772-bb77-1233-29b2d213fab0.png)

- Universal Login
    - ユーザーを認証に誘導できるログイン ページを作成およびカスタマイズする
- Custom Domains
    - カスタム ドメインを作成して、ユーザーの一貫したエクスペリエンスを維持する
- Email Templates
    - テンプレートを使用して、ウェルカム、パスワード リセット、アカウント確認の電子メール ベースのワークフローを作成する
- Email Provider
    - カスタム電子メールプロバイダー情報を指定して構成する

### Security
> Configure extra layers of security by enabling shields that protect your users against different types of attacks and user access anomalies.
Attack Protection: Manage settings for bot, IP throttling, brute-force, and breached password attacks.
Multi-factor Auth: Require additional factors during the login process to prevent unauthorized access.
Monitoring: Monitor threat intelligence events with one of our data visualization and alerting integrations.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/29ed507f-55f2-218b-54e9-000683e943b3.png)

- さまざまな種類の攻撃やユーザー アクセスの異常からユーザーを保護するシールドを有効にして、追加のセキュリティ層を構成する
    - Attack Protection
        - ボット、IP スロットリング、ブルート フォース攻撃、パスワード侵害の設定を管理する
    - Multi-factor Auth
        - 不正アクセスを防ぐために、ログインプロセス中に追加の要素を要求する
    - Monitoring
        - カスタム電子メールプロバイダー情報を指定して構成する

### Actions
> Configure flows such as login, machine-to-machine, user registration, and password resets. Create and manage customized actions used in flows.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cc8de4f8-9f66-59b8-e896-e4213ca1bb72.png)

- ログイン、マシン間、ユーザー登録、パスワードのリセットなどのフローを構成する。
- フローで使用されるカスタマイズされたアクションを作成および管理する

### Auth Pipeline
> Rules: Configure custom JavaScript snippets that are executed in Auth0 as part of each user authentication transaction. You can call external APIs, filter which users can log in to your application, use an AllowList, configure geolocated access, and so on.
Hooks: Customize the behavior of Auth0 when you use Database Connections by configuring Node.js code that is executed against extensibility points (which are comparable to webhooks that come with a server).

- Rules
    - 各ユーザー認証トランザクションの一部として Auth0 で実行されるカスタム JavaScript スニペットを構成する
    - 外部 API の呼び出し、アプリケーションにログインできるユーザーのフィルタリング、AllowList の使用、地理位置情報アクセスの構成などを行うことができる
- Hooks
    - 拡張ポイント (サーバーに付属の Webhook に相当) に対して実行される Node.js コードを構成することで、データベース接続を使用するときの Auth0 の動作をカスタマイズする


### Monitoring
> Logs: View log data of actions taken in the dashboard by administrators and user logins.
Streams: Create and manage log event streaming to external data analysis services.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/633349c0-1e4d-5da2-309a-520bb69e3bd4.png)


- Logs
    - 管理者およびユーザーのログインによってダッシュボードで実行されたアクションのログ データを表示する
- Streams
    - 外部データ分析サービスへのログ イベント ストリーミングを作成および管理する

### Marketplace
> Explore integrations that help your business do more with Auth0.

- ビジネスで Auth0 をさらに活用できる統合


### Extensions
> Extend the Auth0 platform with official and third-party add-ons.
- 公式およびサードパーティのアドオンを使用して Auth0 プラットフォームを拡張する


### Settings
> Configure your tenants, manage your Auth0 subscription and payment options, control your tenant administrators and other user roles. Manage other tenant settings related to your custom domains, signing keys, and other advanced settings.

- テナントを構成し、Auth0 サブスクリプションと支払いオプションを管理し、テナント管理者とその他のユーザー ロールを制御する
- カスタム ドメイン、署名キー、その他の詳細設定に関連する他のテナント設定を管理する

### Get Support	
> Go to our Support Center. If your plan does not have access to support services, see the Auth0 Community.

- サポートセンターにアクセス
- 使用のプランでサポート サービスにアクセスできない場合は、Auth0 コミュニティを参照


## Link Multiple Tenants to a Single Subscription
> Multi-tenancy is an architectural approach featuring a single instance of software that runs on a server and is accessible by multiple groups of users. With multi-tenancy, you can segment users with shared characteristics into groups and grant them separate permissions and levels of access to your application. This allows you to create and maintain tailored experiences for different customers, business units, or other defined groups of users.

- マルチテナンシーは、サーバー上で実行され、複数のユーザー グループがアクセスできるソフトウェアの単一インスタンスを特徴とするアーキテクチャ アプローチ
- マルチテナントを使用すると、共通の特性を持つユーザーをグループに分割し、アプリケーションへの個別の権限とアクセス レベルを付与できる
- これにより、さまざまな顧客、事業部門、またはその他の定義されたユーザー グループに合わせてカスタマイズされたエクスペリエンスを作成および維持できる


> In Auth0, the best method for implementing multi-tenancy is Auth0 Organizations. If necessary, other legacy solutions can be used to accommodate distinct business use cases. If you offer a business-to-business (B2B) product or service, setting up multi-tenancy for your business users may be beneficial for your use case.

- Auth0 では、マルチテナンシーを実装するための最適な方法は Auth0 Orgnizationsである
    - 必要に応じて、他の従来のソリューションを使用して、異なるビジネス ユース ケースに対応できる
- B2B (B2B) 製品またはサービスを提供する場合、ビジネス ユーザー向けにマルチテナンシーを設定すると、ユースケースに有益な場合がある

> The sections below outline the options available for implementing multi-tenancy in Auth0.

> This article uses the software architecture term "tenant" to refer to a group of users who can access your application. When referring to your Auth0 instance, the term "Auth0 tenant" is used.

### Auth0 Organizations
> For most multi-tenant use cases, Auth0 Organizations is the ideal solution for you and your users. Auth0 Organizations supports business-to-business (B2B) implementations that have one or more applications that end-users can access.

- ほとんどのマルチテナントのユースケースでは、Auth0 Organizations が貴社と貴社のユーザーにとって理想的なソリューション
- Auth0 Organizationsは、エンドユーザーがアクセスできる 1 つ以上のアプリケーションを備えた企業間 (B2B) 実装をサポートする

> Common features of B2B implementations include:
> - A product that is licensed to another business for use by their employees.
> - Multiple organizations that require their own federation and lightweight branding of the authentication experience.
> - Separate levels of application access for different groups of users.

- B2B 実装の一般的な機能には次のようなものがある
    - 従業員が使用するために別の企業にライセンスされている製品
    - 独自のフェデレーションと認証エクスペリエンスの軽量ブランディングを必要とする複数のOrganizations
    - ユーザーのグループごとに異なるレベルのアプリケーション アクセスを提供する

> With Auth0 Organizations, you can create unique groups of users and tailor their experiences with role-based access control, customized login pages and email templates, and more.

- Auth0 Organizations を使用すると、下記を使用してエクスペリエンスをカスタマイズできる
    - 独自のユーザー グループを作成
    - ロールベースのアクセス制御
    - カスタマイズされたログイン ページ
    - 電子メール テンプレート


### Legacy solutions
Legacy solutionsは下記をご確認ください。

https://auth0.com/docs/get-started/auth0-overview/create-tenants/multi-tenant-apps-best-practices#legacy-solutions

## Create Applications
> An application in Auth0 can be a native app that executes on a mobile device, a single-page web app that executes on a browser, or a regular web application that executes on a server.

- Auth0 のアプリケーションは、下記の実装が可能
    - モバイル デバイス上で実行されるネイティブ アプリ
    - ブラウザ上で実行されるシングルページ ウェブ アプリ
    - サーバー上で実行される通常のウェブ アプリケーション


> When you create an application in the Auth0 Dashboard, Auth0 assigns it a client ID which is an alphanumeric string that is the unique identifier for your application. You will use this ID in your application code when you call Auth0 APIs. You can't modify the client ID.

- Auth0 ダッシュボードでアプリケーションを作成すると、Auth0 によって、アプリケーションの一意の識別子である英数字の文字列であるクライアント ID が割り当てられる
- Auth0 API を呼び出すときに、アプリケーション コードでこの ID を使用する
- クライアント ID は変更できない

> Another important piece of information is the client secret. It must be kept confidential at all times. If anyone gains access to your application's client secret, then they can impersonate your application and access protected resources. It is important that you select the correct application type to help Auth0 check for certain security risks.

-  client secretは、機密性を高くしなければならない
-  誰かがアプリケーションのクライアント シークレットにアクセスすると、アプリケーションになりすまして保護されたリソースにアクセスが可能
-  Auth0 が特定のセキュリティ リスクをチェックできるように、正しいアプリケーション タイプを選択することが重要

### app types
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/60637ab5-fc00-a6e2-933d-e31b88e2a477.png)

> - Native Applications: These applications include mobile, desktop, or hybrid apps running natively on a device (e.g., i0S, Android).
> - Single-Page Web Applications: These applications include JavaScript apps that perform most of their user interface logic in a web browser, communicating with a web server primarily using APIs (e.g., AngularJS + Node.js or React).
> - Regular Web Applications: These applications are traditional web applications that perform most of their application logic on the server (e.g., Express.js, ASP.NET).
> - Machine-to-Machine Applications: These applications include non-interactive applications, such as command-line tools, daemons, IoT devices, or services running on your back-end.

下記の4つが選べる

- Native Applications
    - デバイス (i0S、Android など) でネイティブに実行されるモバイル、デスクトップ、またはハイブリッド アプリが含まれる
- Single-Page Web Applications
    - ユーザー インターフェイス ロジックのほとんどを Web ブラウザーで実行し、主に API (AngularJS + Node.js または React) を使用して Web サーバーと通信する JavaScript アプリが含まれる
- Regular Web Applications
    - アプリケーション ロジックのほとんどをサーバー上で実行する従来の Web アプリケーション(Express.js、ASP.NET など)
- Machine-to-Machine Applications
    - これらのアプリケーションには、コマンド ライン ツール、デーモン、IoT デバイス、バックエンドで実行されているサービスなどの非対話型アプリケーションが含まれる

## Auth0 Teams
> Auth0 Teams provides a single point of visibility and control over your Auth0 resources by providing centralized governance, compliance, and secure collaboration at scale. Teams membership sits on top of the tenant membership account.

> The main team member role is referred to as the Team Owner and has visibility into all tenants within their Auth0 Account. As an Auth0 Team Owner, you can manage a single tenant or multiple tenants.

> The following features are currently available as part of Auth0 Teams:
> - Visibility and control of Teams members
> - Visibility into Tenants with relevant details
> - Visibility and control of Tenant members
> - Ability to enforce Single Sign-On with your own Identity provider
> - Ability to restrict tenant creation
> - Ability to manage subscription and billing details for self-service subscriptions

- Auth0 Teams は、大規模な一元化されたガバナンス、コンプライアンス、安全なコラボレーションを提供することにより、Auth0 リソースを一元的に可視化し、制御できるようにする
- Teams メンバーシップは、テナント メンバーシップ アカウントの上に位置する
- 主要なチーム メンバーの役割はチーム所有者と呼ばれ、Auth0 アカウント内のすべてのテナントを参照できる
- Auth0 チームの所有者は、単一のテナントまたは複数のテナントを管理できる
- 現在、下記の機能がAuth0 Teamsの一部として利用可能
    - Teams メンバーの可視性と制御
    - 関連する詳細を含むテナントの可視化
    - テナントメンバーの可視性と制御
    - 独自の ID プロバイダーを使用してシングル サインオンを強制する機能
    - テナントの作成を制限する機能
    - セルフサービスのサブスクリプションのサブスクリプションと請求の詳細を管理する機能

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/57070eb6-bf89-8488-497c-9a8857e70d21.png" width=400 />

※ 出典：[Auth0 Teams](https://auth0.com/docs/get-started/auth0-teams)

> Auth0 Teams currently supports a single Teams instance for all tenants attached to either your subscription or Enterprise contract.

- Auth0 Teams は現在、サブスクリプションまたはエンタープライズ契約にアタッチされているすべてのテナントに対して単一の Teams インスタンスをサポートしている

> Team Owners manage and configure the tenants and tenant administrators within the Teams instance.
- チーム所有者は、Teams インスタンス内のテナントとテナント管理者を管理および構成する

### Team Member Management
> Team Owners can manage and configure Auth0 Teams. Auth0 creates at least one Owner when we provision Teams. We recommend at least two Team Owners, especially if you limit tenant creation to Team Owners.

- チーム所有者は、Auth0 チームを管理および構成できる
- Auth0 は、Teams をプロビジョニングするときに少なくとも 1 人の所有者を作成する
- 特にテナントの作成をチーム オーナーに制限する場合は、少なくとも 2 人のチーム オーナーを推奨


> As a Team Owner, you can add, change, and remove team members. The supported roles apart from a Team Owner are Report Viewer and Contributor.

- チーム所有者は、チームメンバーを追加、変更、削除できる
- チーム所有者以外でサポートされている役割は、レポート閲覧者とContributor

#### Team membership roles
##### Team Owner
> Members with this role have full access to the team dashboard (list of all tenants, tenant creation restriction, team members management) and can access specific tenants of which they are a member.

- このロールを持つメンバーは、チーム ダッシュボード (すべてのテナントのリスト、テナント作成の制限、チーム メンバーの管理) への完全なアクセス権を持ち、メンバーとなっている特定のテナントにアクセスできる

##### Report Viewer
> Members with this role can view Quarterly Snapshots. The Report Viewer role is available to select enterprise customers that are managed by the Digital Technical Account Manager (DTAM).

- この役割を持つメンバーは、クォータースナップショットを表示できる
- レポート閲覧者の役割は、デジタル テクニカル アカウント マネージャー (DTAM) によって管理されている一部の企業顧客が利用できる

##### Contributor
> Members with this role can view and access specific tenants of which they are a member.

- このロールを持つメンバーは、自分がメンバーとなっている特定のテナントを表示およびアクセスできる


# 考察
今回は、Auth0 Overviewを整理してみました。次回以降はアプリケーションの実装を試してみます


# 参考

https://qiita.com/zumax/items/9da91f63a07b2d1df3b9

https://qiita.com/zumax/items/d8e30648bc3ca98ff79c

https://auth0.com/docs/get-started/auth0-overview/dashboard

https://auth0.com/docs/get-started/auth0-overview/create-tenants