You need to enable JavaScript to run this app. Hololens(1/2代)Unity对接Azure AD AcquireTokenAsync反序列化异常咨询
优惠活动
大模型
产品
解决方案
定价
更多

Hololens(1/2代)Unity对接Azure AD AcquireTokenAsync反序列化异常咨询

异常根因说明

这个报错和你的Azure AD认证业务逻辑本身无关,本质是MSAL(Microsoft Identity.Client)运行在Unity IL2CPP后端下的兼容性问题:Unity在反序列化MSAL内部的OAuth2响应对象时,碰到OAuth2ResponseBase类下仅实现get访问器的只读Claims属性,触发了严格的只读成员序列化校验,直接抛出异常。

常见触发场景
  • 参照的旧教程对应的MSAL包版本过旧(3.x及更早分支),该版本的内部OAuth2响应类未给Claims属性补充set访问器,在桌面.NET环境下可正常运行,但在Hololens对应的IL2CPP构建环境中序列化校验逻辑更严格,会直接抛出异常
  • 项目存在多版本MSAL依赖冲突,不同版本的内部OAuth2类定义错配,反序列化时匹配到了无set访问器的旧类定义
  • Unity的IL2CPP代码裁剪规则配置过严,误将MSAL内部类的set访问器成员裁剪删除
问题定位步骤
  • 检查项目NuGet引用列表,确认当前引用的Microsoft.Identity.Client版本,排查是否存在版本错配、多版本并存的问题
  • 打开Unity Player Settings,检查IL2CPP裁剪配置,确认Microsoft.Identity.Client相关程序集是否被纳入裁剪排除白名单
  • 输出完整异常堆栈,确认报错触发位置是否集中在MSAL缓存读取、OAuth2响应反序列化环节,排除业务自定义序列化器误触发的可能
可落地解决方案
  • 优先将MSAL包升级到适配Unity IL2CPP的5.x LTS稳定版本,该版本已经为所有内部OAuth2响应类的属性补充了公开set访问器,可直接消除当前序列化报错
  • 若因兼容性限制无法升级MSAL版本,可在项目的link.xml裁剪规则文件中补充对应保护配置,避免IL2CPP裁剪掉MSAL内部类的成员:
    <linker>
      <assembly fullname="Microsoft.Identity.Client">
        <type fullname="Microsoft.Identity.Client.Internal.OAuth2.OAuth2ResponseBase" preserve="all" />
      </assembly>
    </linker>
    
  • 针对Hololens/UWP场景调整AcquireTokenAsync的交互参数,补充父窗口关联配置,避免走无窗口的隐式交互分支触发的内部序列化异常
  • 临时排查阶段可先禁用MSAL本地token缓存,清除设备上残留的旧版本MSAL写入的本地缓存文件,排除旧格式缓存数据触发的反序列化不兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:15:02