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

Authentication 在我的web应用程序控制器中每次调用API时请求访问令牌是否正确?,authentication,oauth-2.0,asp.net-core-mvc,openid,asp.net-core-webapi,Authentication,Oauth 2.0,Asp.net Core Mvc,Openid,Asp.net Core Webapi,我在后端有一个web API,在前端有一个web应用程序和电话应用程序。 我使用Auth0对这三个服务器进行OAuth/OpenId身份验证。 web API和web应用程序都是用ASP.Net Core 1.1 MVC编写的 每次从web应用程序调用web API时,我都会从Auth0请求一个访问令牌。因此,在需要访问我的API的每个控制器操作中,我都有: var client = new HttpClient(); var tokenResponse = aw

我在后端有一个web API,在前端有一个web应用程序和电话应用程序。 我使用Auth0对这三个服务器进行OAuth/OpenId身份验证。 web API和web应用程序都是用ASP.Net Core 1.1 MVC编写的

每次从web应用程序调用web 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),
                    }));
var-client=new-HttpClient();
var tokenResponse=wait client.PostAsync(tokenEndpoint,
新FormUrlEncodedContent(新列表
{
新的KeyValuePair(“授权类型”、“客户端凭据”),
新的KeyValuePair(“客户机id”,\u auth0Settings.ClientId),
新的KeyValuePair(“客户端密码”、\u auth0Settings.ClientSecret),
新的KeyValuePair(“受众”、\u auth0Settings.apidentifier),
}));

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

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

应用程序应该使用令牌内的到期日期检查是否过期,或者在401或其他授权错误后获取新令牌。应用程序应该在401之后从web api获取新令牌。必须在web api上检查到期日期。我也稍微更新了我的答案。。