Azure active directory 如果在UWP中调用authContext.AcquireTokenAsync,则出现Null异常
我正在编写一个带有ADAL身份验证的UWP应用程序。UWP应用程序不会有太多的用户交互。因此,我喜欢使用ClientCredtial(),这样应用程序就可以在没有用户登录的情况下工作 如果我在authContext.AcquireTokenAsync()中使用ClientCredential(),我会收到一条非常奇怪的错误消息“System.ArgumentNullException:'值不能为null.” 它在控制台程序()中工作完美,但只工作一次,但在UWP应用程序中首次成功后将失败。我是说从第二次尝试起就不起作用了。 clientCredential=新的clientCredential(clientId,appKey); 结果=等待authContext.AcquireTokenAsync(ResourceId,clientCredential) 但是,该方法(authContext.AcquireTokenAsync)可以很好地处理其他参数,如客户端id等,如下所示。 结果=等待authContext.AcquireTokenSilentAsync(ResourceId,clientId)Azure active directory 如果在UWP中调用authContext.AcquireTokenAsync,则出现Null异常,azure-active-directory,uwp-xaml,adal,Azure Active Directory,Uwp Xaml,Adal,我正在编写一个带有ADAL身份验证的UWP应用程序。UWP应用程序不会有太多的用户交互。因此,我喜欢使用ClientCredtial(),这样应用程序就可以在没有用户登录的情况下工作 如果我在authContext.AcquireTokenAsync()中使用ClientCredential(),我会收到一条非常奇怪的错误消息“System.ArgumentNullException:'值不能为null.” 它在控制台程序()中工作完美,但只工作一次,但在UWP应用程序中首次成功后将失败。我是说
UWP是否对authContext.AcquireTokenSilentSync()和ClientCredential(clientid,key)有限制?我认为UWP的ADAL有一个bug 但是,有一种解决方法可以避免错误“值不能为null”。 首先,我检查了令牌缓存是否可用。如果可用,将使用现有令牌 至少,它对我有用
TokenCacheItem tItem = authContext.TokenCache.ReadItems().FirstOrDefault();
if (tItem != null) //use the exsting token.
token = tItem.AccessToken;
else // get a new token if not available.
{
result = await authContext.AcquireTokenAsync (resourceid, clientCredential);
token = result.AccessToken;
}
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,令牌)
在控制台应用程序中,您不需要上述解决方案。它可以在不检查缓存的情况下工作