You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目升级MSAL 1.5.0后登录验证异常求助

解决MSAL 1.5.x登录时的"Expected BEGIN_OBJECT but was STRING"错误

我之前在升级MSAL版本时也碰到过一模一样的问题,这个错误本质是MSAL期望服务器返回JSON格式的响应,但实际收到了纯字符串(比如错误提示、空白内容或者非JSON的HTML页面)。结合你的场景,我整理了几个实用的排查和解决步骤:

1. 先检查Azure AD应用的核心配置

  • 重定向URI必须完全匹配:确认Azure Portal里配置的重定向URI和你AndroidManifest中的android:scheme完全一致(大小写、拼写都不能错)。MSAL 1.x对重定向URI的校验非常严格,一旦不匹配,回调时可能返回非JSON的错误响应。
  • 权限配置是否正确:检查应用的API权限,确保添加了必要的权限(比如User.Read),如果是企业级应用,还要确认管理员已经完成权限同意。权限缺失时,Azure AD可能返回纯文本的错误提示,导致MSAL解析失败。

2. 排查网络环境问题

  • 代理干扰:如果你的测试环境使用了代理,可能会篡改或截断Azure AD的响应,导致MSAL拿到非JSON内容。可以尝试关闭代理直接测试,或者配置代理规则允许MSAL访问Azure的端点(login.microsoftonline.com、graph.microsoft.com等)。
  • 抓包验证响应内容:用Charles或Fiddler抓一下登录请求的响应,看看返回的到底是什么。如果是HTML错误页、纯文本提示,那问题出在服务器端,需要对应调整应用配置或网络策略。

3. 清理MSAL缓存和应用数据

旧版本MSAL的缓存格式可能和1.5.x不兼容,导致解析异常。你可以:

  • 直接在手机的应用设置里清除当前应用的数据;
  • 或者通过代码主动清理缓存,示例代码如下:
// 初始化PublicClientApplication
PublicClientApplication pca = PublicClientApplication.createSingleAccountPublicClientApplication(
        getContext(),
        R.raw.auth_config // 你的auth_config.json资源
);

// 获取当前账户并移除缓存
pca.getCurrentAccountAsync(new IPublicClientApplication.CurrentAccountCallback() {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount) {
        if (activeAccount != null) {
            pca.removeAccount(activeAccount, new IMultipleAccountPublicClientApplication.RemoveAccountCallback() {
                @Override
                public void onRemoved() {
                    // 缓存清理完成,重新发起登录
                }

                @Override
                public void onError(@NonNull MsalException exception) {
                    // 处理清理错误
                }
            });
        }
    }

    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable IAccount currentAccount) {}

    @Override
    public void onError(@NonNull MsalException exception) {}
});

4. 检查依赖冲突

你排除了com.microsoft.device.display依赖,这本身没问题,但要确保没有其他依赖版本冲突。运行以下命令查看依赖树,确认MSAL的所有子依赖都是1.5.5版本:

./gradlew app:dependencies

如果发现有其他版本的MSAL相关依赖,需要通过exclude或者强制版本的方式统一。

5. 尝试调整MSAL版本

1.5.x系列可能存在某些已知的解析bug,你可以:

  • 降级到你原本计划升级的1.5.0版本测试;
  • 或者直接升级到最新的稳定版(比如2.x版本,但注意2.x有API变动,需要对应调整代码)。

内容的提问来源于stack exchange,提问作者RAlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:13:10