在我的 Web 应用程序控制器中每次 API 调用时请求访问令牌是否正确?

Is it correct to request access token upon EVERY API call in my web app controllers?

我在后端有一个网络 API,在前端有一个网络应用和 phone 应用。 我在所有三个上都使用 Auth0 进行 OAuth/OpenId 身份验证。 Web API 和 Web 应用都是用 ASP .Net Core 1.1 MVC 编写的。

每次我从网络应用调用网络 API 时,我都会从 Auth0 请求访问令牌。因此,在需要访问我的 API 的每个控制器操作中,我有:

var client = new HttpClient();
                var tokenResponse = await client.PostAsync(tokenEndpoint,
                    new FormUrlEncodedContent(new List<KeyValuePair<string, string>>
                    {
                new KeyValuePair<string, string>("grant_type", "client_credentials"),                
                new KeyValuePair<string, string>("client_id", _auth0Settings.ClientId),
                new KeyValuePair<string, string>("client_secret", _auth0Settings.ClientSecret),
                new KeyValuePair<string, string>("audience", _auth0Settings.ApiIdentifier),
                    }));

这是正确的做法吗?或者我应该只在 Web 应用程序启动时执行一次,然后将访问令牌存储在一个全局变量中,我可以从我的所有控制器调用该变量?

您应该只调用一次并重复使用令牌。当令牌过期时,您应该使用刷新令牌请求新令牌。如果您不使用刷新令牌,您应该将用户重定向到登录页面以重新验证或在网络应用程序上使用某种自动重新验证机制。