0
我使用ADAL
標記在Xamarin Forms
項目中調用我的WebAPI。但是ADAL
令牌在1小時後過期,http
調用會引發未授權。正確處理HttpStatusCode =未授權使用ADAL令牌
我想在未授權狀態收到時刷新令牌。我閱讀了一些例子說使用DelegatingHandler
,但我不知道DelegatingHandler
是什麼,以及如何將它與HTTP client
一起使用。
我使用ADAL
標記在Xamarin Forms
項目中調用我的WebAPI。但是ADAL
令牌在1小時後過期,http
調用會引發未授權。正確處理HttpStatusCode =未授權使用ADAL令牌
我想在未授權狀態收到時刷新令牌。我閱讀了一些例子說使用DelegatingHandler
,但我不知道DelegatingHandler
是什麼,以及如何將它與HTTP client
一起使用。
根據你的描述,我檢查了這個問題。對於使用DelegatingHandler
,你可以參考下面的代碼片段:
CustomMessageHandler:
public class CustomMessageHandler: DelegatingHandler
{
private string _accessToken;
private string _refreshToken;
public CustomMessageHandler(string accessToken, string refreshToken)
{
_accessToken = accessToken;
_refreshToken = refreshToken;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);
var response= await base.SendAsync(request, cancellationToken);
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
/* TODO:
* 1. Retrieve the new access_token via the refresh_token
* 2. Update the current field _accessToken
* 3. Retry the previous failed request
*/
}
return response;
}
}
用法:
HttpClient client = new HttpClient(new CustomMessageHandler("{your-access-token}", "{your-refresh-token}"));
當你收到一個令牌,它後面的到期時間,如果令牌即將過期並且使用刷新令牌請求新請求,則每次發出請求時都會進行檢查 –