Я взаимодействую с Microsoft Health Cloud API и успешно запросил токен доступа и токен обновления. Связь с RESTful API работает по назначению, хотя мне сложно разобраться, как надежно определить токен с истекшим сроком доступа.
У меня есть следующий код:
fire_and_forget read_profile()
{
HttpClient httpClient{};
httpClient.DefaultRequestHeaders().Authorization({ L"bearer", access_token_ });
try
{
auto const response{ co_await httpClient.GetStringAsync({ L"https://api.microsofthealth.net/v1/me/Profile" }) };
// Raise event passing the response along.
// Code left out for brevity.
co_return;
}
catch (hresult_error const& e)
{
if (e.code() != 0x80190191) // Magic value for "unauthorized access (401)"
{
throw;
}
// This is an "unauthorized access (401)" error. Continue with requesting a new
// access token from the refresh token.
// Code left out for brevity.
}
Хотя это, кажется, работает, оно кажется неправильным по многим причинам. Это не только магическое значение, но и тот факт, что этот конкретный код ошибки может использоваться для других режимов ошибок.
Есть ли более надежный способ определить, истек ли токен доступа?
Примечание: я понимаю, что могу использовать интервал истечения и проверять системное время. Я бы предпочел не идти по этому пути, поскольку он также не совсем надежен и создает дополнительную сложность для роуминга этой информации между устройствами.