MSAL.js でのプロンプトの動作
MSAL.js では、ログインまたはトークン要求のメソッドの一部としてプロンプト値を渡すことができます。 アプリケーションのシナリオに基づいて、要求オブジェクトの prompt パラメーターを設定することで、要求に対する Microsoft Entra プロンプトの動作をカスタマイズできます:
import { PublicClientApplication } from "@azure/msal-browser";
const pca = new PublicClientApplication({
auth: {
clientId: "YOUR_CLIENT_ID"
}
});
const loginRequest = {
scopes: ["user.read"],
prompt: 'select_account',
}
pca.loginPopup(loginRequest)
.then(response => {
// do something with the response
})
.catch(error => {
// handle errors
});
サポートされているプロンプト値
Microsoft ID プラットフォームで認証を行うときは、次のプロンプト値を使用できます。
パラメーター | 動作 |
---|---|
login |
その要求でユーザーに資格情報の入力を強制させ、シングル サインオンを無効にします。 |
none |
ユーザーに対話形式のプロンプトが表示されないようにします。 シングル サインオンを使ってサイレントに要求を完了できない場合は、Microsoft ID プラットフォームから login_required または interaction_required エラーが返されます。 |
consent |
ユーザーがサインインした後で OAuth 同意ダイアログをトリガーし、アプリへのアクセス許可の付与をユーザーに求めます。 |
select_account |
セッション内の全アカウントを一覧表示するアカウント選択エクスペリエンス、またはまったく別のアカウントを選択するためのオプションを提供することで、シングル サインオンを中断します。 |
create |
外部ユーザーがアカウントを作成できるようにするサインアップ ダイアログをトリガーします。 詳しくは、「セルフサービス サインアップ」をご覧ください |
サポートされていないプロンプト値の場合、MSAL.js は invalid_prompt
エラーをスローします。
invalid_prompt_value: Supported prompt values are 'login', 'select_account', 'consent', 'create' and 'none'. Please see here for valid configuration options: https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_common.html#commonauthorizationurlrequest Given value: my_custom_prompt
既定のプロンプト値
MSAL.js が使う既定のプロンプト値を次に示します。
MSAL.js のメソッド | 既定のプロンプト | 許可されるプロンプト |
---|---|---|
loginPopup |
該当なし | Any |
loginRedirect |
該当なし | Any |
ssoSilent |
none |
該当なし (無視) |
acquireTokenPopup |
該当なし | Any |
acquireTokenRedirect |
該当なし | Any |
acquireTokenSilent |
none |
該当なし (無視) |
Note
prompt はプロトコル レベルのパラメーターであり、必要な認証動作を ID プロバイダーに通知することに注意してください。 MSAL.js の動作には影響を与えず、MSAL.js はサービスが最終的に要求を処理する方法を制御できません。 ほとんどの場合、Microsoft Entra は要求を尊重しようとします。 これが不可能な場合は、エラー応答を返すか、指定されたプロンプト値を完全に無視する可能性があります。
prompt=none での対話型の要求
通常、サイレントで要求を行う必要がある場合は、サイレントの MSAL.js メソッド (ssoSilent
、acquireTokenSilent
) を使い、login_required または interaction_required エラーは対話型メソッド (loginPopup
、loginRedirect
、acquireTokenPopup
、acquireTokenRedirect
) で処理します。
ただし、プロンプト値 none
を対話型の MSAL.js メソッドと共に使って、サイレント認証を実現できる場合もあります。 たとえば、一部のブラウザーでは、サードパーティの Cookie の制限のため、Microsoft Entra ID とのアクティブなユーザー セッションがあっても、ssoSilent
要求は失敗します。 これを解決するには、プロンプト値 none
を loginPopup
などの対話型要求に渡すことができます。 その後、MSAL.js は Microsoft Entra ID に対してポップアップ ウィンドウを開き、Microsoft Entra ID は既存のセッション Cookie を使うことでプロンプト値を尊重します。 この場合、ユーザーには簡単なポップアップ ウィンドウが表示されますが、資格情報の入力を求めるメッセージは表示されません。