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

时间:2016-08-10 20:00:08

标签: android oauth-2.0 xamarin.forms adal

我有针对Android的Xamarin.Forms(v2.2.0.31),它在Visual Studio 2015中使用ADAL 3.13.1。

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

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

当我连接Log Cat时,它在DEBUG模式下访问我的Web API时显示以下内容... CacheType:Microsoft.IdentityModel.Clients.Activedirectory.TokenCache(1 items)

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

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

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

有关此处链接行为的更多信息...... https://developer.xamarin.com/guides/android/advanced_topics/linking/

2 个答案:

答案 0 :(得分:1)

链接库存在问题。似乎没有修复。

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

特别是,我认为只需跳过System.Runtime.Serialization即可。

干杯, 最大

答案 1 :(得分:0)

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