Как я могу хранить токен и получать к нему доступ через Web API? - PullRequest
0 голосов
/ 11 июля 2019

Я работаю над веб-приложением на приборной панели, которое использует grant_type=client_credentials для получения токенов на предъявителя для получения доступа к своим ресурсам.

Планируется, что контроллеры MVC будут выполнять вызовы API от имени клиентского браузера.

Ajax-запросы от браузера попадут на контроллеры MVC, а затем будут выполнены вызовы API. Затем результаты передаются клиенту в виде JSON и обрабатываются в реакции.

Клиент никогда не должен связываться напрямую с API и не должен входить в систему, чтобы увидеть панель инструментов.

Когда приложение загружается впервые, оно запрашивает у сервера токен, используя учетные данные клиента, хранящиеся в appsettings.json. Я могу получить токен, но я не знаю, где хранить и получить к нему доступ по всему миру. Мне нужен глобальный доступ к этому токену, чтобы примерно через 20 минут я мог отправить refresh_token запрос на сервер и использовать его во всех последующих вызовах API для получения данных.

Могу ли я сохранить его в HttpContext и использовать оттуда?

В настоящее время я запрашиваю токен следующим образом:

public class TokensController : ControllerBase
    {
        public IConfiguration Configuration { get; }

        public TokensController(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        // Get Token
        public static async Task<Token> GetToken(Uri authenticationUrl, Dictionary<string, string> authenticationCredentials)
        {
            HttpClient client = new HttpClient();
            FormUrlEncodedContent content = new FormUrlEncodedContent(authenticationCredentials);
            HttpResponseMessage response = await client.PostAsync(authenticationUrl, content);

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
                throw new ApplicationException(message);
            }

            string responseString = await response.Content.ReadAsStringAsync();
            Token token = JsonConvert.DeserializeObject<Token>(responseString);

            return token;
        }

        public IActionResult GetAccessToken()
        {

            Dictionary<string, string> authenticationCredentials_np = Configuration.GetSection("SomeEnvironment:Credentials").GetChildren().Select(x => new KeyValuePair<string, string>(x.Key, x.Value)).ToDictionary(x => x.Key, x => x.Value);
            Token token_np = GetToken(new Uri(Configuration["SomeEnvironment:URL"]), authenticationCredentials_np).Result;

            return Ok(token_np);
        }

    }

Есть предложения / мысли?

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