Срок действия токена asp net - PullRequest
       2

Срок действия токена asp net

0 голосов
/ 14 декабря 2018

Я использую метод ниже для получения токена от сервера asp net.

public async static Task<bool> GetToken(string username, string password)
{
    var token = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("username", username),
        new KeyValuePair<string, string>("password", password),
        new KeyValuePair<string, string>("grant_type", "password")
    });
    using (var client = new HttpClient())
    {
        client.Timeout = TimeSpan.FromMilliseconds(20000);
        var response = await client.PostAsync(ServerTokenString, token);

        if (response.IsSuccessStatusCode)
        {
            string content = await response.Content.ReadAsStringAsync();
            var tokens = content.Split('"');
            AccessToken = tokens[3];
            TokenType = tokens[7];
            return true;
        }
        return false;
    }
}     

Затем я сохраняю токен и тип токена в строках.Затем я использую этот токен для выполнения своих запросов.Но что, если токен истечет?Мне нужно отправить имя пользователя и пароль?Или есть более простой способ, если клиент уже вошел в систему и срок его действия истек?

1 Ответ

0 голосов
/ 17 декабря 2018

В C # функция может иметь несколько «разновидностей» - в зависимости от типа и количества отправленных параметров она будет вызывать «с таким ароматом».Поскольку мы смотрим на документацию для PostAsync, мы можем видеть следующие "ароматы".(https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.postasync?view=netframework-4.7.2)

PostAsync(Uri, HttpContent, CancellationToken)  

Отправка запроса POST с токеном отмены как асинхронная операция.

PostAsync(String, HttpContent, CancellationToken)   

Отправка запроса POST смаркер отмены как асинхронная операция.

PostAsync(String, HttpContent)  

Отправка запроса POST на указанный Uri в качестве асинхронной операции.

PostAsync(Uri, HttpContent)     

Отправьте POST-запрос на указанный Uri в качестве асинхронной операции.

Если мы внимательно рассмотрим их, то увидим, что первые 2 имеют 3 параметра, а третий параметр в обоих именуется «CancellationToken». (Вы можете прочитать остальную часть документации, чтобы узнать, что они делают.)

Следующие два имеют 2 параметра без токена.

В своем вызове вы переходите к переменным, как показано ниже

var response = await client.PostAsync(ServerTokenString, token);

Поскольку вы передаете два параметра, вы вызовете 3-ю или 4-ю версию в приведенном выше списке. Это означает, что они не являются токенами (даже с «токеном» в именах).


Вы можете изменить свой кодкак это: (адаптировано из https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken?view=netframework-4.7.2)

// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken CToken = source.Token;

var response = await client.PostAsync(ServerTokenString, token, CToken);

Однако, это не принесет пользы.Поскольку вы используете await, PostAsync завершится до того, как наступит время для использования CancellationToken.

CancellationToken используется только в том случае, если процесс выполняется в другом потоке - использование метода await ожидает завершения потока, поэтому вам НИКОГДА это не понадобится.

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