Azure B2C自定义策略下Android MSAL静默请求令牌无缓存账户异常
排查解决思路
- 优先核对自定义策略的签发配置
该错误的核心原因是MSAL Android本地缓存中无法匹配到对应homeAccountId与clientId的账号记录,90%以上的同类场景问题均出自自定义策略配置不规范:
需确认自定义策略RelyingParty部分返回的sub声明为用户唯一稳定标识,不得使用会话级临时值;同时在JwtIssuer技术配置中设置固定的IssuerUri,避免令牌签发者值动态变化。homeAccountId由issuer + sub拼接生成,任意一项值发生变动都会导致缓存匹配失败。 - 校验MSAL Android端配置
确认配置文件中knownAuthorities列表已包含所有用到的自定义策略对应的authority地址,不可仅添加登录用的策略地址。如果是多策略使用场景,需将account_mode设置为MULTIPLE,避免不同策略的账号缓存被互相覆盖。 - 检查账号参数一致性
登录成功后将返回的Account.getHomeAccountId()值持久化存储,发起静默令牌请求前,确认传入的homeAccountId与存储值完全一致,排查拼写错误、多余空格、首尾换行符等低级问题。 - 确认刷新令牌发放配置
检查自定义策略中是否开启了刷新令牌发放权限,在RelyingParty对应的技术配置文件中添加刷新令牌发放的相关规则,确保首次登录后本地可以正常缓存账号和刷新令牌记录。
默认用户流场景下静默请求可正常执行,基本可以排除端侧代码逻辑问题,按上述步骤逐一核对即可快速定位根因。
相关异常堆栈参考:
com.microsoft.identity.client.exception.MsalClientException: No cached accounts found for the supplied homeAccountId and clientId at com.microsoft.identity.client.internal.controllers.MsalExceptionAdapter.msalExceptionFromBaseException(MsalExceptionAdapter.java:51) at com.microsoft.identity.client.PublicClientApplication$18.onError(PublicClientApplication.java:1903) at com.microsoft.identity.client.PublicClientApplication$18.onError(PublicClientApplication.java:1894) at com.microsoft.identity.common.internal.controllers.CommandDispatcher.commandCallbackOnError(CommandDispatcher.java:442) at com.microsoft.identity.common.internal.controllers.CommandDispatcher.access$800(CommandDispatcher.java:83) at com.microsoft.identity.common.internal.controllers.CommandDispatcher$3.run(CommandDispatcher.java:424) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
内容的提问来源于stack exchange,提问作者Mat-Tap
相关产品推荐
相关产品推荐

