MSAL.net 或用于后端应用程序的 Graph SDK

MSAL.net or Graph SDK for backend applications

我正在后台创建后端服务 运行,无需用户直接交互。它是用 .NET 4.8 编写的,并作为 windows 服务运行。 该应用程序将与 Graph API 的几个端点(/users 和 /groups)交互,这意味着创建我自己的 HttpClient 很容易,因为调用的端点数量有限。 应用程序应根据客户端机密从 Azure 获取访问令牌。 我一直在使用 ConfidentialClientApplicationBuilder 并使用 Microsoft.Identity.Client 命名空间的 AcquireTokenForClient() 方法,从 Azure 获取有效的访问令牌,可用于进一步调用 Graph,但问题是,我没有得到a refresh_token 在AcquireTokenForClient() 的响应中,据我所知没有内置刷新机制?

        private async Task<string> AcquireAccessTokenAsync()
        {
            try
            {
                var app = ConfidentialClientApplicationBuilder.Create("MyClientId")
                    .WithClientSecret("MyClientSecret")
                    .WithAuthority(new Uri("MyAuthority"))
                    .Build();
                var acquireResult = await app.AcquireTokenForClient("RequiredScopes").ExecuteAsync();
                return acquireResult.AccessToken;
            }
            catch (MsalClientException ex)
            {
                Console.WriteLine(ex);
                throw new ApplicationException("Failed to acquire access token from Azure.");
            }
        }

感觉使用 Graph SDK(Graph 客户端)对于任务来说有点矫枉过正,这就是我尝试使用 MSAL .NET 库的原因。但是,在构建需要集成到 Microsoft Graph 的后端服务时,应该使用什么库呢?它如何支持令牌刷新机制?

在进一步调查了Client SDK并进行了一些测试后,SDK似乎会通过缓存在内部处理缓存中是否存在有效的有效令牌,否则会发出新的令牌请求。 在没有用户交互的情况下,没有用于应用程序服务的客户端凭据流的刷新令牌。