如何在 MVC.net 中使用 MSAL 存储和检索访问令牌

How to store and retrieve Access Token using MSAL in MVC.net

我正在开发 ASP.Net MVC 经典应用程序。此应用程序获取访问令牌以访问 API 中的资源。一旦它获得访问令牌,然后我想存储它并在需要它时使用它来调用不同控制器中的 API 。但是,我想:

存储、检索和刷新想了解AcquireTokenSilently()。

我们可能会在用户登录 Startup.cs 后获取令牌,然后可以将其保存并检索以访问 API。因此,可能会检查过期令牌,然后静默刷新或获取令牌以访问 API 资源。所以任何流程都是有意义的。

我已经阅读了几个关于 MSAL 的文档,但没有得到清晰的图片,并且对 AcquireTokenSilently()、Refresh() 感到困惑。请参阅下面的代码,我正在访问令牌但我没有存储它。

     private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification)
    {
        notification.HandleCodeRedemption();

        var idClient = ConfidentialClientApplicationBuilder.Create(clientId)
            .WithRedirectUri(redirectUri)
            .WithClientSecret(clientSecret)
            .WithAuthority(authority)
            .Build();
        try
        {

            var apiScope = "api://28178a67-4ae6-43d4-b708-c02785516b1d/asses_as_users api://28178a67-4ae6-43d4-b708-c02785516b1d/AzAdUtility.Get";
            string[] scopes = apiScope.Split(' ');
            var result = await idClient.AcquireTokenByAuthorizationCode(
                scopes, notification.Code).ExecuteAsync();

        }


        catch (Exception ex)
        {
            string message = "AcquireTokenByAuthorizationCodeAsync threw an exception";
            notification.HandleResponse();
            notification.Response.Redirect($"/Home/Error?message={message}&debug={ex.Message}");
        }

    }

更新 下面的 link 指导我在 MVC.NET 经典中实现令牌缓存。我确实遇到了一些问题,但我确实想到了缓存令牌。

注意:当程序从 Visual Studio 停止或浏览器 window 关闭时,该问题与开发环境有关,缓存似乎丢失了。

https://github.com/Azure-Samples/ms-identity-aspnet-webapp-openidconnect

你不存储它。 MSAL 确实如此。它有一个 token cache built in to it. This cache is application specific so that it will need to acquire a token the first time each application is run. You can also use a Broker 可以从与当前登录用户关联的 OS 中提取令牌。