2017-09-14 14 views
0

Xamarin FormsプロジェクトでWebAPIを呼び出すためにADALトークンを使用しています。しかし、ADALトークンは1時間後に失効し、httpコールはUnauthorizedをスローします。正しく処理する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}")); 
関連する問題