从 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
});
});
我有一个 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
});
});