1

我根据本文整合微软图形API为5 MVC的Web应用程序,以及使用ADAL开放ID连接:正确实施TokenCache

https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapp-openidconnect-v2/

我想知道,如何我可以提供不依赖于会话状态的TokenCache的实现吗?我应该向AcquireTokenForClientAsync提供什么参数?现在,我只是提供一个类的新实例来满足方法的签名。我宁愿刷新令牌自动处理,正如我在别处读过的。但是,如果您为TokenCache参数提供null,则令牌缓存不会自动处理?以下是我如何获取令牌并在每次调用它时提供新的TokenCache()的示例。

ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(
    AuthConstants.ClientId, 
    String.Format("https://login.microsoftonline.com/{0}/v2.0", AuthConstants.TenantId), 
    AuthConstants.RedirectUri, 
    new ClientCredential(AuthConstants.ClientSecret), 
    null, 
    new TokenCache()); 

AuthenticationResult authResult = await daemonClient.AcquireTokenForClientAsync(new string[] { "https://graph.microsoft.com/.default" }); 

return authResult.AccessToken; 

回答

1

您需要提供自己的实现来将缓存的内容存储在您想要的存储(数据库,文件等)中。为此,您将使用TokenCache类的SetBeforeAccess,SetAfterAccessSetBeforeWrite扩展方法设置代表。

实现写作的一个例子/读取高速缓存的内容的文件都可以(对于.NET WPF应用程序的情况下)在https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop/blob/master/active-directory-b2c-wpf/TokenCacheHelper.cs

+0

谢谢你,当你提供这个实现令牌缓存的,不令牌的刷新自动发生?在框架尝试刷新它之前,如何知道令牌有效多久? –