分享方式:


使用 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 身分識別平台進行驗證時,可使用下列提示值:

參數 行為
login 強制使用者在該要求上輸入認證,否定單一登入。
none 確保無論如何都不會對使用者顯示任何互動式提示。 如果無法透使用過單一登入以無訊息方式完成要求,Microsoft 身分識別平台就會傳回 login_requiredinteraction_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 N/A 任意
loginRedirect N/A 任意
ssoSilent none N/A (忽略)
acquireTokenPopup N/A 任意
acquireTokenRedirect N/A 任意
acquireTokenSilent none N/A (忽略)

注意

請注意,prompt 是通訊協定層級參數,可向識別提供者發出所需的驗證行為訊號。 這不會影響 MSAL.js 行為,而且 MSAL.js 無法控制服務最終處理要求的方式。 在大部分情況下,Microsoft Entra ID 會嘗試接受要求。 如果無法這樣做,可能會傳回錯誤回應,或完全忽略指定的提示值。

具有 prompt=none 的互動式要求

一般而言,當您需要提出無訊息要求時,請使用無訊息 MSAL.js 方法 (ssoSilentacquireTokenSilent),並使用互動式方法處理任何 login_requiredinteraction_required 錯誤 (loginPopuploginRedirectacquireTokenPopupacquireTokenRedirect)。

不過,在某些情況下,提示值 none 可以與互動式 MSAL.js 方法一起使用來達成無訊息驗證。 例如,由於某些瀏覽器中的第三方 Cookie 限制,儘管在採用 Microsoft Entra ID 的作用中使用者工作階段,ssoSilent 要求都會失敗。 補救方式是您可將提示值 none 傳遞至互動式要求,例如 loginPopup。 MSAL.js 會接著將快顯視窗開啟至 Microsoft Entra ID,而 Microsoft Entra ID 會利用現有的工作階段 Cookie 來接受提示值。 在此情況下,使用者會看到簡短的快顯視窗,但不會提示使用者輸入認證。

下一步