Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET核心服务器中存储外部API的访问令牌?_C#_Asp.net Core_Oauth 2.0_Storage - Fatal编程技术网

C# 如何在ASP.NET核心服务器中存储外部API的访问令牌?

C# 如何在ASP.NET核心服务器中存储外部API的访问令牌?,c#,asp.net-core,oauth-2.0,storage,C#,Asp.net Core,Oauth 2.0,Storage,我有一个ASP.NET Core 3.1web服务器,它充当前端应用程序和外部API服务之间的中间人。它应该从API服务发出数据请求,然后将数据发送到前端。要对此API发出请求,它需要一个OAuth 2访问令牌。明确地说,是服务器对自己进行身份验证,以访问公共许可下可用的数据,而不是特定于我的服务器上的单个用户 我目前计划使用两个类型化的HttpClient类(基于)和一个控制器来公开端点。一个类型化的HttpClient可以使用服务器知道的客户机机密来验证服务器并检索要返回的访问令牌。另一个客

我有一个
ASP.NET Core 3.1
web服务器,它充当前端应用程序和外部
API
服务之间的中间人。它应该从API服务发出数据请求,然后将数据发送到前端。要对此API发出请求,它需要一个
OAuth 2
访问令牌。明确地说,是服务器对自己进行身份验证,以访问公共许可下可用的数据,而不是特定于我的服务器上的单个用户

我目前计划使用两个类型化的
HttpClient
类(基于)和一个控制器来公开端点。一个类型化的HttpClient可以使用服务器知道的客户机机密来验证服务器并检索要返回的访问令牌。另一个客户端将使用第一个客户端检索的访问令牌,提供从外部API检索特定数据的方法。最后,控制器将使用第二个
HttpClient
获取要在其端点上返回的数据


我想知道的是如何管理第一个
HttpClient
提供的访问令牌。我想最好只在需要时检索它,然后存储它直到用完,然后请求一个新的。如何执行此操作,或者使用其他方法?

拥有一个API客户端类,该类使用您的访问客户端进行身份验证,然后存储访问令牌,然后使用该类进行API调用

public class ApiAccessClient
{

    public ApiAccessClient(string clientSecret)
    {
        ClientSecret = clientSecret;
    }

    public async Task Authenticate()
    {
        // Authentication code
        var response = await AuthClient.GetAsync(ClientSecret);
        AccessToken = "Access_Token";
    }

    public string MakeApiCall()
    {
        // Use access token
        return null;
    }

    private readonly string ClientSecret;

    private string AccessToken;

    private static HttpClient AuthClient;

    private static HttpClient AccessClient;

}

注意HTTP客户端是静态的,因此可以重用连接,请阅读更多信息:

谢谢,这看起来是一种合理的方法。不过,我要指出,由于
ASP.NET Core 2.1
如果已经在使用Core提供的
HttpClientFactory
,那么这篇文章的前提是错误的,无论是直接使用还是通过对类型化客户端的依赖注入,就像我所做的那样。看见