2025/11/04
Auth0機能
Auth0を利用した任意タイミングでの多要素認証
アプリケーション開発において、セキュリティ強化は最重要課題の一つですが、過度な認証要求はユーザー体験を損なう原因となります。この「セキュリティ」と「ユーザー体験」のトレードオフを解消する効果的な技術がAuth0の「ステップアップ認証機能」です。通常は基本的な認証でアクセスを許可しつつ、決済や個人情報の変更といった機密性の高い操作時にのみ、多要素認証などの追加認証を動的に要求します。これにより、本当に必要な場面でだけで認証強度を引き上げることが可能になります。本コラムでは、顧客IDの認証・認可に必要となる機能をクラウドサービスとして提供するAuth0のステップアップ認証に焦点を当て、その概要から認証シーケンス、具体的な実装例までを解説し、実践的な導入方法を紹介します。
概要
ステップアップ認証とは、ユーザーがアプリケーションを利用する中で、追加の認証を要求することで認証強度を高める仕組みです。例えば、普段のサービス利用はIDとパスワードのみで可能とし、個人情報の変更や決済といった重要な操作の直前に、多要素認証(MFA)などを求めることで、セキュリティを段階的に強化します。
ステップアップ認証は認証・認可の標準的な仕組みである OIDC (OpenID Connect)を基盤として実装されます。
最初のログインでは「閲覧権限」など基本的なスコープを持つアクセストークンのみを発行します。ユーザーが個人情報変更やクレジットカード決済、送金実行のような重要な操作をしようとした際に「変更権限」のスコープでは利用できないよう制限をかけます。個人情報を変更するためには、一度多要素認証をユーザーに求め、より強力な「変更権限」のスコープを持つアクセストークンを新たに発行させるようにします。
シーケンス
具体的な流れは以下の通りです。
-
初期認証とトークン発行:
ユーザーが最初にログインすると、閲覧など一般的な操作のみを許可する基本的な「閲覧権限」のスコープを持つアクセストークンが発行されます。
- 追加認証の要求:
ユーザーが、より機密性の高いデータの変更を要求すると、アプリケーションは、その操作に必要な上位の「変更権限」のスコープを付与したトークンを要求します。 - ステップアップ認証の実行:
Auth0では、この上位スコープの要求をトリガーとして、Auth0 Actions という機能が実行されます。事前に設定しておくことで、このタイミングでMFAなどの追加認証をユーザーに要求できます。 -
新しいトークンの発行:
ユーザーが追加認証をクリアすると、要求された「変更権限」のスコープを含む新しいアクセストークンが発行されます。
- 1 アクション/ライブラリーメニューの「アクションを作成」ボタンを押し、「初めから構築する」を選択して新規にアクションを作成します。この際トリガーは”Login / Post Login”を設定します。
- 2 アクションのロジックを記載します。今回はログイン時に「変更権限」のスコープが指定されていた場合は多要素認証を実行させるアクションを記載します。下記コードを参考に入力してください。
実装例
実装は、主に以下の3つのステップで進めていきます。各ステップの具体的な設定やコード例を交えながら、ご説明いたします。
Step1. Auth0でのAPIとスコープの設定
Step2. MFAを要求するアクションの作成
Step3. クライアントアプリケーションの実装
Step1. Auth0でのAPIとスコープの設定
はじめにAuth0のダッシュボード上で、保護対象のAPIを定義します。そして、通常アクセス用のスコープと、ステップアップ認証が必要な「変更権限」のスコープを作成していきます。
1-1. シングルページアプリケーションの作成
アプリケーションメニューの「+アプリケーションを作成」ボタンからシングルページアプリケーションを作成します。
1-2. APIの作成
APIメニューの「APIの作成」ボタンからAPIを作成します。作成後パーミッションの設定において、2つのスコープを追加します。
「閲覧権限」のスコープ write:data
「変更権限」のスコープ read:data
API/パーミッション設定例
Step2. MFAを要求するアクションの作成
次に、本実装の核となる部分です。上位スコープがリクエストされたことを検知し、MFAによる追加認証をユーザーに強制するロジックを、Auth0 Actionsというサーバーレス機能を用いて記述します。
2-1. 多要素認証の設定
セキュリティ/多要素認証メニューで実施したい認証方式について有効化を行います。
2-2. アクションの設定
アクション/ライブラリーの設定例
<コード例>
exports.onExecutePostLogin = async (event, api) => {
// リクエストのクエリパラメータからスコープを取得する
const requestedScopes = event.request.query?.scope?.split(' ') || [];
// MFAを強制する機密性の高いスコープのリスト
const sensitiveScopes = ["write:data"];
// 要求されたスコープの中に、機密性の高いスコープが含まれているかチェックして、存在するならMFAを実行
const requiresMfa = sensitiveScopes.some(scope => requestedScopes.includes(scope));
if (!requiresMfa) {
return;
} else {
api.multifactor.enable("any");
}
};
2-3. ログインフローへの追加
アクション/トリガーメニューの「post-login」ボタンを押下します。画面右側の「アクションを追加」バーに先ほど追加したアクションが追加されています。このアクションをドラッグ&ドロップし、多要素認証が必要な箇所に挿入します。
Step3. クライアントアプリケーションの実装
最後に、クライアントアプリケーション側での実装です。
これまでの設定で、「変更権限」のスコープ(write:data)が要求された際にMFAが実行されるバックエンドの仕組みが整いました。このステップでは、ユーザーが機密性の高い操作を行った際に、その(write:data)スコープをリクエストして認証フローを開始するフロントエンド部分を実装します。
以下のコードは、Auth0のSDKを利用して、特定の操作時に「変更権限」のスコープ(write:data)を含んだ認証を要求するAPIコールの一例です。このscopeの指定が、Step2で作成したアクションのトリガーとなります。
<特定の処理を実行するときのMFA実行APIコール例>
//SDKの読み込み
<script src="https://cdn.auth0.com/js/auth0-spa-js/2.3/auth0-spa-js.production.js"></script>
<script>
//各種パラメータの設定
const DOMAIN = "dev-xxxxxxxxxxxxxx.jp.auth0.com";
const CLIENTID = "自身で作成したアプリケーションのクライアントID";
const AUDIENCE = "APIのオーディエンス";
const REQUIRED_SCOPES_FOR_THIS_PAGE = ["openid", "profile", "email", "write:data"]; // write:dataを入れる
const REDIRECT = "認証完了後のリダイレクトページ";
(async () => {
//auth0Clientの初期化
const auth0Client = await auth0.createAuth0Client({
domain: DOMAIN,
clientId: CLIENTID,
authorizationParams: {
audience: AUDIENCE,
redirect_uri: REDIRECT
}
});
//authrization endpointの実行(SDKの内部処理で実行される)
await auth0Client.loginWithRedirect({
authorizationParams: {
scope: REQUIRED_SCOPES_FOR_THIS_PAGE.join(' '),
acr_values: 'http://schemas.openid.net/pfi/2021/04/acr/mfa'
}
});
}
</script>
おわりに
本コラムでは、Auth0のステップアップ認証機能を利用して、アプリケーションの特定操作時にのみ多要素認証を要求する実装方法を、具体的な設定からコード例まで交えて解説しました。
この技術を用いることで、普段の操作ではユーザーに負担をかけることなく、決済や個人情報更新といった重要な場面でのみセキュリティを強化することが実現できます。特にAuth0 Actionsを活用すれば柔軟に認証フローをカスタマイズできるため、既存のアプリケーションにも比較的容易に高度なセキュリティを組み込むことが可能です。
Auth0を用いた任意タイミングでの多要素認証実装にご興味がある方は、弊社までお問い合わせください。
【
Auth0機能
】
最新のコラム

2025/11/04

2025/10/15


