Как сохранить токен доступа для внешнего API на главном сервере ASP. NET? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть ASP.NET Core 3.1 веб-сервер, который, помимо прочего, выступает в качестве посредника между внешним Angular приложением и внешней API службой. Предполагается, что он запрашивает данные у службы API, которые затем доставляет во внешний интерфейс. Для отправки запросов к этому API необходим токен доступа OAuth 2. Чтобы быть понятным, это сервер, который аутентифицирует себя для доступа к данным, доступным по лицензии publi c, а не указывает c для отдельных пользователей на моем сервере.

В настоящее время я планирую использовать его два типизированных HttpClient класса (на основе этой статьи ) и один контроллер для предоставления конечных точек. Один тип HttpClient будет иметь метод для аутентификации сервера и получения маркера доступа для возврата, используя секрет клиента, который знает сервер. Другой клиент будет предоставлять методы для извлечения определенных данных c из внешнего API с использованием токена доступа, полученного первым клиентом. Наконец, контроллер будет использовать второй HttpClient, чтобы получить данные для возврата на свои конечные точки.

Что ускользает от меня, так это то, как управлять токеном доступа, предоставленным первым HttpClient. Я полагаю, что было бы лучше получить его только тогда, когда это необходимо, а затем сохранить его, пока он не закончится, и затем запросить новый. Как мне это сделать, или какая-то альтернатива?

1 Ответ

1 голос
/ 09 марта 2020

Имейте клиентский класс 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 устаревают c, так что подключения используются повторно, подробнее: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...