1

我在后端有一个Web API,前端有一个Web应用程序和电话应用程序。 我在所有三种OAuth/OpenId身份验证上使用Auth0。 Web API和Web应用都是用ASP .Net Core 1.1 MVC编写的。在我的Web应用程序控制器的每个API调用请求访问令牌是否正确?

每次我从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), 
        })); 

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

回答

2

您应该只调用一次并重用令牌。当令牌过期时,您应该使用刷新令牌请求新令牌。如果你不使用刷新标记,你应该将用户重定向到登录页面以重新进行身份验证,或者在Web应用上使用某种自动重新验证机制。

+0

应用程序是否应该使用令牌中的过期日期检查过期情况,或者在401或其他授权错误后获取新的令牌。 –

+1

应用程序应该从web api获得401之后的新令牌。必须在web api上检查到期日期。我也稍微更新了我的答案.. – Stan88

相关问题