PAYATHON 2026

Android MSAL 8.1.0 如何排查登录卡住和 redirect URI 不匹配?

数据小陈

结论

先确保同一个构建变体的 applicationId、签名证书、MSAL 配置、Manifest 和 Azure 应用注册使用一致的值。错误信息指出,MSAL 根据当前应用的包名和签名生成的 redirect URI,与配置文件中的 URI 不一致。签名哈希已用 x 脱敏,错误信息中的 URI 也不是示例配置中的原样值,因此现有材料无法确认具体是哪项配置有误。

"broker_redirect_uri_registered": false 时,登录页输入邮箱后一直加载,这是另一个需要排查的现象。把该字段改为 true 无法修复 URI 不匹配。应分别确认 broker 配置和 redirect URI,再检查登录流程。

题目中可见的差异

报错中的包名是 com.hcsc.planethcsc.uat,所贴 Manifest 中的 android:host 则是 com.app.uat。如果这不是脱敏示例,两者就不一致。请先确认应用构建产物的 applicationId,再据此检查 MSAL 配置、Manifest 和 Azure 应用注册。

报错还列出了 MSAL 期望值和实际收到值,两者的签名哈希看起来也不同。哈希已脱敏,无法仅凭占位内容判断差异是由签名证书、编码方式还是构建变体配置不同造成的。

排查步骤

  1. 确认实际构建变体的包名。检查安装包对应的 applicationId,不要只看源代码目录中的包名。重点确认生产、非生产、模拟器和从 Company Portal 安装的包是否使用同一套配置。

  2. 核对签名证书。确认该构建变体最终使用的签名证书,并用它生成或核实 redirect URI 中的签名哈希。调试包、发布包和通过不同渠道安装的包可能使用不同签名;应以出现故障的实际安装包为准。

  3. 逐项比较 redirect URI。将 MSAL 配置中的 redirect_uri、Azure 应用注册中的 Android redirect URI、Manifest 中 BrowserTabActivity 的 intent filter,以及错误信息中的实际值放在一起对照。包名和签名哈希都应与当前构建变体相符。

    题目中的配置示例与报错包名不同,签名哈希也已遮盖。请用未脱敏的本地配置和完整错误信息在项目内核对,不要把占位符写回配置。

  4. 检查 Manifest 和配置文件是否属于同一应用变体。示例中的 intent filter 为:

    <activity
        android:name="com.microsoft.identity.client.BrowserTabActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="com.app.uat"
                android:path="/xxxxx="
                android:scheme="msauth" />
        </intent-filter>
    </activity>

    这里的 host、path 和 scheme 应与当前变体使用的 redirect URI 对应。题目中的 com.app.uat 和 xxxxx 是示例或脱敏值,无法用来验证实际配置。

  5. 分别检查两种 broker 设置下的流程。若 "broker_redirect_uri_registered": true,先解决错误明确报告的 URI 不匹配,再验证重定向能否返回应用。若设为 false 后输入邮箱持续加载,请记录登录时的完整 MSAL 异常或日志,并确认实际安装的包、认证配置和登录方式。现有信息不足以判断卡住的具体原因。

版本信息需要确认

问题标题提到 MSAL 8.1.0 和 MAM 12.0.3;正文中的旧版本信息是 MSAL 6.+、MAM 10.2.1,之后只提到将 SDK 升级到 8.1.0。请确认故障发生时实际打包的 MSAL 和 MAM 版本,以及升级的是哪个依赖,以免根据旧版本的配置或日志判断新构建的行为。

注意事项

排查时保留包名、签名哈希和构建变体之间的对应关系。不同签名生成的 redirect URI 不能混用。分享日志或配置前可以遮盖 client_id、租户标识和签名哈希,但请在本地对照完整值。

备注:内容仅供参考。