从 ASP.NET Core Web API 应用程序访问 OAuth2 端点

Access OAuth2 endpoint from an ASP.NET Core Web API application

我有一个 ASP.NET 核心 Web API 应用程序,此 Web API 需要调用另一个使用 OAuth2 进行身份验证的第 3 方 API。需要通过传递client_id和client_secret来调用此第3方API的/token端点,授权类型为client_credentials。然后使用收到的不记名令牌发出后续请求以从第 3 方检索数据 API .

根据我的研究,可以使用 HttpClient 实现此要求,并从 .NET Core Web API 控制器(或理想情况下在服务 API 中调用第 3 方 API =34=] 被控制器访问)。

我的问题是是否有另一种 way/better 方法来实现此要求?我对上述方法的一个担忧是它会为每个请求调用第 3 方 /token 端点。是否可以在 Startup.cs class 中进行一些实施?

看看IdentityModel。它为 HttpClient 提供扩展方法来处理 client_credentials (和其他)OAuth 流程,缓存令牌(直到它过期),所以你不会在每个请求和刷新时锤击 /token 端点需要时的令牌。

您需要在您的 Startup class 中配置它,或者如果您需要动态配置 HttpClient 则实施 ITokenClientConfigurationService

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
    });
});