2016-10-05 7 views
0

SessionにWeb APIからJWTトークンと更新トークンを格納しているASP.NET MVCアプリケーションがあります。私の質問は、JWTトークンが期限切れになったときに何をすべきかということです。私はそれを見たように私の2つのオプションがある:.NET MVCアプリケーションでJWTの有効期限を処理する

  1. JWT-トークンを使用して、Web APIにリクエストを作ってみると、それは許可されていない401を返した場合、JWT-トークンをリフレッシュしてみてください。

  2. タイマーを使用してJWTトークンが期限切れになる前に自動的にリフレッシュします。

これらの2つの方法のどちらを使用する利点はありますか。どのように簡単にプログラムで実装できますか?たとえば、オプション1を使用する場合は、APIへの呼び出しごとにtryとcatchを使用する必要がありますか?

+0

*なぜ*トークンJWT-とセッションの私のWeb APIからリフレッシュトークンを記憶している:私は、JWTの有効期限が近づいている場合も、チェックのHttpClientファクトリメソッドと基本コントローラクラスを作成しましたセッションに保管していますか? –

答えて

1

APIの呼び出し回数を最小限に抑えるため、オプション2に行くことにしました。

 public HttpClient GetHttpClient(string baseAdress) 
     { 
      var client = new HttpClient(); 
      client.BaseAddress = new Uri(baseAdress); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      string token; 
      if (Session["access_token"] != null) 
      { 
       var jwthandler = new JwtSecurityTokenHandler(); 
       var jwttoken = jwthandler.ReadToken(Session["access_token"] as string); 
       var expDate = jwttoken.ValidTo; 
       if (expDate < DateTime.UtcNow.AddMinutes(1)) 
        token = GetAccessToken().Result; 
       else 
        token = Session["access_token"] as string; 
      } 
      else 
      { 
       token = GetAccessToken().Result; 

      } 
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 
      Session["access_token"] = token; 
      return client; 
     } 
関連する問題