正确实现TokenCache

时间:2017-09-01 13:53:27

标签: asp.net-mvc asp.net-mvc-5 azure-active-directory microsoft-graph

我将Microsoft Graph API集成到MVC 5 Web应用程序中,以及根据本文使用ADAL Open ID Connect:

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 个答案:

答案 0 :(得分:1)

您需要提供自己的实现来将缓存内容存储在所需的存储中(无论是数据库,文件等)。为此,您将使用TokenCache类的SetBeforeAccessSetAfterAccessSetBeforeWrite扩展方法设置委托。

https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop/blob/master/active-directory-b2c-wpf/TokenCacheHelper.cs

中有一个实现将缓存内容写入/读取文件的示例(对于.NET WPF应用程序)