2017-09-14 59 views
0

我使用ADAL標記在Xamarin Forms項目中調用我的WebAPI。但是ADAL令牌在1小時後過期,http調用會引發未授權。正確處理HttpStatusCode =未授權使用ADAL令牌

我想在未授權狀態收到時刷新令牌。我閱讀了一些例子說使用DelegatingHandler,但我不知道DelegatingHandler是什麼,以及如何將它與HTTP client一起使用。

+1

當你收到一個令牌,它後面的到期時間,如果令牌即將過期並且使用刷新令牌請求新請求,則每次發出請求時都會進行檢查 –

回答

0

根據你的描述,我檢查了這個問題。對於使用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}"));