使用 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_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 |
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 方法 (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 來接受提示值。 在此情況下,使用者會看到簡短的快顯視窗,但不會提示使用者輸入認證。