我有一个ASP.NET Core应用程序,这个Web需要调用另一个第三方API,它是使用OAuth2进行身份验证的。它需要通过传递/token和client_secret来调用这个第三方API的client_id端点,授予类型是client_credentials。然后使用接收到的承载令牌进行后续请求,从第三方API检索数据。
根据我的研究,这个需求可以使用HttpClient实现,并从.NET Core控制器调用第三方API (或者在控制器访问的服务类中)。
我的问题是,是否有其他方法/更好的方法来满足这一要求?我在上述方法中需要考虑的一个问题是,它将为每个请求调用第三方/token端点。可以在Startup.cs类中执行某些实现吗?
发布于 2021-06-18 22:34:22
看看IdentityModel。它为HttpClient提供了扩展方法来处理client_credentials (和其他) OAuth流,缓存令牌(直到它过期),所以您不会在每个请求中敲碎/token端点,并在需要时刷新令牌。

您需要在Startup类中配置它,如果需要动态配置HttpClient,则需要实现HttpClient。
services.AddAccessTokenManagement(options =>
{
options.Client.Clients.Add("identityserver", new ClientCredentialsTokenRequest
{
Address = "https://demo.identityserver.io/connect/token",
ClientId = "m2m.short",
ClientSecret = "secret",
Scope = "api" // optional
});
});https://stackoverflow.com/questions/68039801
复制相似问题