ユーザーログイン
- Hosted Lock: Auth0 のインフラストラクチャでホストされる Lock ウィジェットのインスタンスを使用します。
- Embedded Lock: アプリケーションの Web ページ内に Lock ウィジェットを埋め込みます。Lock ウィジェット自体にはいくつかのカスタマイズオプションがあり、ページ上のそれ以外の HTML は完全に自由に制御できます。
- Custom UI: ログイン画面用に完全に独自の Web ページを開発します。カスタム HTML フォームはサーバーに送信され、サーバー側で Authentication API を使用してユーザーを認証します。Custom UI を使用すべきケースの詳細については、Customize Classic Login Pages with Lock or SDK を参照してください。
Home Realm Discovery (HRD) を自動化する
-
プログラムで IdP を判別する: Auth0 で認証トランザクションを開始するときに、必要に応じて
connectionパラメータを送信できます。この値は、Dashboard で定義されているいずれかの接続に直接対応します。/authorizeエンドポイントを呼び出して Hosted 版の Lock を使用する場合は、接続名を含むconnectionクエリ文字列パラメータを渡せます。一方、Embedded Lock を使用している場合は、auth0.show({connections: ['{yourConnection}']});と記述するだけです。connectionの値を取得する実用的な方法はいくつかあります。その 1 つが vanity URL を使う方法です。たとえば、社内従業員はhttps://internal.yoursite.comを使い、外部契約者はhttps://external.yoursite.comを使います。
-
メールドメインを使用する: Lock では、メールドメインを使って認証リクエストを振り分けることができます。Auth0 のエンタープライズ接続は
domainsにマッピングできます。接続にこの設定がある場合、対応するドメインのメールアドレスを入力すると、パスワード入力欄は自動的に無効になります。なお、1 つの接続に複数のドメインを関連付けることもできます。
セッション管理
- アプリケーションセッション: 1 つ目は、アプリケーション内のセッションです。アプリケーションでユーザー認証に Auth0 を使用していても、ユーザーがそのアプリケーションにログイン済みであることは、引き続きアプリケーション側で管理する必要があります。一般的な Web アプリケーションでは、これは Cookie に情報を保存することで実現します。
- Auth0 セッション: 2 つ目は、Auth0 のセッションです。Auth0 もセッションを保持し、ユーザー情報を Cookie に保存します。次回ユーザーが Auth0 Lock 画面にリダイレクトされたときには、そのユーザー情報が保持されています。
- Identity Provider セッション: 最後のレイヤーは Identity Provider です。たとえば Facebook や Google です。これらのプロバイダーでのサインインを許可している場合、ユーザーがすでにそのプロバイダーにサインインしていれば、再度サインインを求められることはありません。必要に応じて、自分の情報を Auth0、ひいてはアプリケーションと共有するための権限を与えるだけで済む場合があります。
ユーザーのローカルアプリケーションセッションの有効期間はどのように制御できますか? また、それを Auth0 から制御できますか?
Web アプリは、ユーザーのローカルアプリケーションセッションを完全に制御できます。具体的な実装方法は、通常、使用している Web スタック (たとえば ASP.NET) によって異なります。とはいえ、どの方法でも最終的には 1 つ以上の Cookie を使ってセッションを制御します。開発者は、Auth0 から返される JWT ID Token の有効期限を使ってセッションの有効期間を制御することも、まったく考慮しないこともできます。ID Token 自体をセッション状態に保存し、その有効期限が切れた時点でユーザーセッションを終了させる開発者もいます。ローカルセッションの有効期限を決める際にトークンの有効期限を使う理由は、Auth0 Dashboard からユーザーセッションの期間を一元的に制御できるためです。
- OIDC 認証フローを開始: ユーザーのブラウザーが、OIDC フローを開始するためのリクエストを Auth0 に送信します。
- SSO Cookie を設定: Auth0 がユーザー情報を保存するための Cookie を設定します。
- コードを交換して ID Token を返す: Auth0 は Web サーバーにリクエストを返し、コードを返します。Web サーバーはそのコードを ID Token と交換します。
- 認証 Cookie を設定してレスポンスを送信: Web サーバーはブラウザーにレスポンスを返し、ユーザーのセッション情報を保存するためのアプリケーション認証 Cookie を設定します。
- 以後のすべてのリクエストで認証 Cookie が送信される: アプリケーション認証 Cookie は、ユーザーが認証済みであることの証明として、以後のすべてのリクエストで送信されます。
Auth0 の SSO セッションはアプリケーションのセッションにどのような影響を与えますか?
Auth0 は独自のシングルサインオンセッションを管理しています。アプリケーションは、自身のローカルセッションを維持する際に、その SSO セッションを利用するか無視するかを選択できます。Lock ウィジェットには、Auth0 の SSO セッションが存在するかどうかを検出し、同じユーザーとして再度ログインするかをユーザーに確認する特別な機能もあります。
ユーザーのログアウト
- アプリケーションセッション: セッションをクリアして、Web アプリケーションからユーザーをログアウトさせる必要があります。
- Auth0 セッション: Auth0 からもユーザーをログアウトさせる必要があります。これを行うには、ユーザーを
https://{yourDomain}/v2/logoutにリダイレクトします。この URL にリダイレクトすると、Auth0 がそのユーザーに設定したすべての Cookie がクリアされます。 - Identity Provider セッション: 一般的ではありませんが、Facebook や Google など、利用している Identity Provider からユーザーを強制的にログアウトさせることもできます。これを行うには、ログアウト URL に
federatedクエリ文字列パラメーターを追加します:https://{yourDomain}/v2/logout?federated。
returnTo クエリ文字列パラメーターを追加します: https://{yourDomain}/v2/logout?returnTo=http://www.example.com。なお、returnTo URL は Allowed Logout URLs に追加しておく必要があります。実装方法の詳細については、Logout を参照してください。
ログアウトフロー (federated logout を除く) は次のとおりです。

- Initiate Logout Flow: ログアウトフローはブラウザーから開始されます。たとえば、ユーザーが Logout リンクをクリックすると、Web サーバーにリクエストが送信されます。
- Clear user’s local session: ユーザーの アプリケーションセッション / Cookie がクリアされます。
- Redirect browser to Auth0 Logout: ユーザーのブラウザーが Auth0 のログアウト URL にリダイレクトされます。
- Clear SSO Cookie: Auth0 がユーザーの SSO Cookie をクリアします。
- Redirect to post-logout URL: Auth0 はリダイレクトレスポンスを返し、ユーザーのブラウザーを
returnToクエリ文字列パラメーターで指定された URL にリダイレクトします。
アクセス制御
- Auth0 Authorization Extension を設定して使用する。
- Active Directory グループを使用する。これは、Active Directory グループを Authorization Extension で定義したグループにマッピングすることで、Authorization Extension と組み合わせて使用できます。
- ルール を利用して、ユーザープロフィールにメタデータを追加する。
- ルール 内から外部サービスを呼び出す。
Authorization extension
現時点で Authorization Extension は、主に粗い粒度の認可を実現するために設計されています。たとえば、ユーザーのグループ所属に基づいてアプリケーションへのアクセスを制御する場合です。今回の例ではこのように利用していますが、必ずしもきめ細かなアクセス制御 (たとえば、ユーザーがアプリケーション内で特定の操作を実行できるかどうか) を行うために設計されているわけではありません。
Admin グループに割り当てられ、タイムシートを承認できるようになります。Authorization Extension では、グループを既存のグループ所属にマッピングできます。
すべてのタイムシート管理者は、Active Directory 上の Timesheet Administrators グループに割り当てられ、Timesheet Application 内の Admin グループに自動的にマッピングされます。
Authorization Extension をインストールすると、バックグラウンドで ルール が作成され、次の処理が行われます。
- ユーザーのグループ所属を判定する。
- ユーザーのグループ所属情報を
app_metadataの一部として保存する。 - ユーザーのグループ所属を発行されるトークンに追加する。
- ユーザーに現在のアプリケーションへのアクセス権が付与されていることを確認する。

Timesheet Admins グループ内のすべての Active Directory ユーザーが、先ほど作成した Admin グループにマッピングされるようにします。


Timesheet Admins グループのメンバーシップを管理するだけで、それらのユーザーはアプリケーション内の Admin グループに自動的にマッピングされます。
詳しくは、Authorization Extension documentation を参照してください。
アプリケーションで権限を適用する
authorization クレームを追加する Auth0 ルールも作成されます。ユーザーのグループは、authorization クレームの groups というサブクレームとして追加され、そのユーザーが所属するすべてのグループが配列としてこのクレームに含まれます。以下は、グループが含まれた ID Token の JSON ペイロードの例です。
authorizationクレームからユーザーが所属するグループを抽出する必要があります。次に、それらのグループをほかのユーザー情報とあわせてユーザーのセッションに保存し、その後それらを参照することで、ユーザーがグループへの所属に基づいて特定の操作を実行する権限を持っているかどうかを判断できます。
実装例については、ASP.NET Coreを参照してください。