Microsoft 身份验证库 (MSAL) 中的异常旨在帮助应用开发人员对其应用程序进行故障排除。 异常消息未本地化。
处理异常和错误时,可以使用异常类型本身和错误代码来区分不同的异常。 有关错误代码的列表,请参阅身份验证和授权错误代码。
在登录体验期间,可能会遇到有关许可、条件访问(MFA、设备管理、基于位置的限制)、令牌颁发和兑换以及用户属性的错误。
错误类 | 原因/错误字符串 | 处理方式 |
---|---|---|
MsalUiRequiredException |
|
调用 acquireToken() 以提示用户输入用户名和密码,可能还需要同意并执行多重身份验证。 |
MsalDeclinedScopeException |
|
开发人员应该决定是继续使用授予的作用域进行身份验证还是结束身份验证过程。 选项仅为已授予的范围重新提交获取令牌请求,并通过传递 silentParametersForGrantedScopes 和调用 acquireTokenSilent 提供有关已授予了哪些权限的提示。 |
MsalServiceException |
|
此异常类表示与服务通信时的错误,可以来自授权终结点或令牌终结点。 MSAL 从服务器响应中读取错误和 error_description。 通常,通过在代码中或在应用注册门户中修复应用配置来解决这些错误。 服务中断很少会触发此警告,只有等待服务恢复才能缓解此警告。 |
MsalClientException |
|
此异常类表示库本地的常规错误。 可以通过更正请求来处理这些异常。 |
MsalUserCancelException |
|
|
MsalArgumentException |
|
开发人员可以通过以下方式缓解这些错误:更正参数并确保完成了交互式验证、完成回调、设置作用域,并提供了具有有效 ID 的帐户。 |
下面的代码片段显示了捕获无提示 acquireToken
调用错误的示例。
/**
* Callback used in for silent acquireToken calls.
*/
private SilentAuthenticationCallback getAuthSilentCallback() {
return new SilentAuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
Log.d(TAG, "Successfully authenticated");
/* Successfully got a token, use it to call a protected resource - MSGraph */
callGraphAPI(authenticationResult);
}
@Override
public void onError(MsalException exception) {
/* Failed to acquireToken */
Log.d(TAG, "Authentication failed: " + exception.toString());
displayError(exception);
if (exception instanceof MsalClientException) {
/* Exception inside MSAL, more info inside MsalError.java */
} else if (exception instanceof MsalServiceException) {
/* Exception when communicating with the STS, likely config issue */
} else if (exception instanceof MsalUiRequiredException) {
/* Tokens expired or no session, retry with interactive */
}
}
};
}
详细了解 MSAL for Android 中的日志记录。