Android 上的 ADAL 在发布模式下不保留令牌,但在调试模式下工作正常

ADAL on Android Does Not Persist Tokens in Release Mode but Works Fine in Debug Mode

我 Xamarin.Forms (v2.2.0.31) 目标 Android 在 Visual Studio 2015 年使用 ADAL 3.13.1。

当我使用调试配置加载应用程序时,它按预期工作。登录后,Active Directory 身份验证库 (ADAL) 使用令牌缓存,即使我完全关闭应用程序并返回它也是如此。

但是,当我在发布模式下打开完全相同的项目时,它再次提示我输入凭据。

当我附加 Log Cat 时,当我在 DEBUG 模式下访问我的 Web API 时,它显示以下内容... 缓存类型:Microsoft.IdentityModel.Clients.Activedirectory.TokenCache(1 项)

当我在 RELEASE 模式下访问我的 Web API 时,Log Cat 显示以下内容... 缓存类型:Microsoft.IdentityModel.Clients.Activedirectory.TokenCache(0 项) ...然后它再次提示输入凭据。

只有在完全关闭应用程序后才会发生这种情况,否则它必须保留在内存中。我是否必须在 Android 清单中启用特殊权限才能使持久令牌缓存在发布模式下工作?

编辑:好的,问题与 Android 项目属性 > Android 选项 > 链接器选项卡中的链接行为有关。在发布模式下,我只链接 SDK 程序集以减少 space 但显然 ADAL 使用反射并且它排除了一些需要的文件。所以我将其更改为 None 并且它可以工作(但它使我的应用程序非常臃肿)。有没有办法使这项工作仍然 link SDK 程序集?

更多关于 linking 行为的信息... https://developer.xamarin.com/guides/android/advanced_topics/linking/

链接库出现问题。好像没修好。

尝试跳过链接这些: Microsoft.IdentityModel.Clients.ActiveDirectory;Microsoft.IdentityModel.Clients.ActiveDirectory.平台;System.Runtime.Serialization;

特别是,我认为跳过 System.Runtime.Serialization 会起作用。

干杯, 最大值

这是 DataContractSerialization 的一个已知问题。当 ADAL 无法写入缓存 blob 时,它只会吞下异常。 https://bugzilla.xamarin.com/show_bug.cgi?id=37491