2017-08-10 19 views
1

すべての私のREST APIメソッドは、そのコードで始まる:彼らはASP.NET Web API 2でJWTトークンを検証する定型コードを回避するにはどうすればよいですか?次のように

[HttpPost] 
[Route("Login")] 
public async Task<IHttpActionResult> Login(QueryModel q) 
{ 
    // get JWT Token string form HTTP Header 
    string token = Request.Headers.GetValues("Authorization").FirstOrDefault(); 

    // decode token 
    string json = Jose.JWT.Decode(token, JWTModel.secretForAccessToken); 
    JWTModel jwt = JsonConvert.DeserializeObject<JWTModel>(json); 

    // check if issued from my homepage. 
    if (!jwt.iss.Equals("my-home-page.com")) 
    { 
     return Content(
      HttpStatusCode.Unauthorized, 
      "access token is not from here" 
     ); 
    } 
    // check if it has valid about time 
    long now = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; 
    if (jwt.iat > now || jwt.exp < now) 
    { 
     // request refresh token 
     return Content(
      HttpStatusCode.Unauthorized, 
      "outdated access token" 
     ); 
    } 
    /* ... */ 
} 

どのようにとんでもないと冗長!

簡略化してモジュール化することはできますか?そしてどうやって?

(Node.jsので、私はいわゆるミドルウェアを使用することによってそれを解決することができます。)

答えて

0

私はあなたがDelegatingHandlerを見てお勧めしたり、OWINベースのアプリケーションを実行している場合、あなたはミドルウェア

を作成することができますDelegatingHandler MSDN Link

OWIN Middleware MSDN

+0

私はOWINを使用しませんが、DelegatingHandlerはとてもクールに見えます。私はすぐに自分のコードに適用するつもりです!そして結果を報告します。 –

+0

私は最終的に 'DelegatingHandler'を使って自分のコードを消毒しました! [このドキュメント](https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers#example-checking-for-an-api-key)も役立ちます。 –

関連する問題