iOS中的ADAL令牌缓存失败

时间:2017-04-29 00:02:26

标签: xamarin.ios adal

我是"突然" (在更新之后?)在我的iOS Xamarin应用程序中使用ADAL(Microsoft.IdentityModel.Clients.ActiveDirectory)库进行身份验证时遇到了2个新问题。

我已经尝试将版本恢复到以前的工作状态,或者升级到最新的稳定版本,但问题仍然存在。这是我正在使用的代码。

    public async System.Threading.Tasks.Task<AuthenticationResult> Authenticate(string authority, string resource, string clientId, string returnUri)
    {
        var authContext = new AuthenticationContext(authority);

        if (authContext.TokenCache.ReadItems().Any())
            authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
        var authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(returnUri),
            new PlatformParameters(UIApplication.SharedApplication.KeyWindow.RootViewController));
        return authResult;
    }

第一个问题是,当成功验证库时,无法缓存返回的令牌。在调用AcquireTokenAsync()期间,我在Debug窗口中观察到以下输出: -

AcquireTokenHandlerBase.cs: === Token Acquisition started:
    Authority: https://login.windows.net/xxx.onmicrosoft.com/
    Resource: XXXX
    ClientId: XXXX
    CacheType: null
    Authentication Target: User

TokenCache.cs: Looking up cache for a token...
TokenCache.cs: No matching token was found in the cache
TokenCache.cs: Storing token in the cache...
TokenCache.cs: An item was stored in the cache
AcquireTokenHandlerBase.cs: === Token Acquisition finished successfully. An access token was retuned:

然后似乎尝试将令牌写入缓存,但我在调试窗口中看到以下内容: -

TokenCachePlugin.cs: Failed to remove cache record: -34018
TokenCache.cs: Serializing token cache with 1 items.
TokenCachePlugin.cs: Failed to save cache record: -34018[0:] Bearer eyJ0eXAiOiJ…

然后,下次启动应用程序并调用此方法时,我会观察到以下输出: -

 - AuthenticationContext.cs: ADAL PCL.iOS with assembly version '3.13.9.1126', file version '3.13.9.1126' and informational version 'eddfa8ebda9e734efdc42ea6d41ea98bc7c998f3' is running...
xxxxxxx-7318-4ec7-xxxx-7xxxxxxx42c2 - AcquireTokenHandlerBase.cs: === Token Acquisition started:

    Authority: https://login.windows.net/xxx.onmicrosoft.com/
    Resource: XXXX
    ClientId: XXXX
    CacheType: null
    Authentication Target: User

TokenCache.cs: Looking up cache for a token...
TokenCache.cs: No matching token was found in the cache

似乎没有关于如何解释这个我可以找到的更多信息?事情是这个代码以前工作正常,但我认为它已经停止工作可能是在我的Mac上升级到XCode。我正在使用VS2017在Parallels VM上进行开发。

因此,每次启动应用程序时,我都需要再次登录。我在其他地方看到过此报道,但尚未找到解决方案。 “CacheType:null”输出中是否有线索?

第二个问题是,当用户在登录屏幕上选择“取消”时,对AcquireTokenAsync()的调用似乎不会返回 - 即“return authResult;”行永远不会被命中 - 除非我实际成功进行身份验证。这是预期的,还是我可能在两个实例中都错误地使用了库?

0 个答案:

没有答案