我正在与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.
}
尽管它似乎有效,但由于很多原因,它感觉不对。这不仅仅是魔法值,而且事实上,这个特定的错误代码可以用于其他错误模式。
是否有更可靠的方法来确定访问令牌是否已过期?
注意:我明白,我可以使用过期间隔,并检查系统时间。我宁愿不走这条路,因为它也不完全可靠,并且为跨设备漫游该信息引入了额外的复杂性。