2017-02-21 16 views
2

Hereクレームベースの認証属性をどのように作成したかを説明します。しかし、私はこの仕事の仕方についていくつか疑問を抱いています。 、私は私のコントローラにこの属性を持っていると私は無効なトークン(無効な署名)を送信する場合、要求は自動的に不正として拒否されることを期待していたクレームに基づいて有効なJWTで安全なwebapi

public void Configuration(IAppBuilder app) 
    { 
     if (app == null) 
     { 
      throw new ArgumentNullException(nameof(app)); 
     } 

     app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
     { 
      Authority = ConfigurationManager.AppSettings["Authentication:Authority"], 
      RequiredScopes = ConfigurationManager.AppSettings["Authentication:Scopes"].Split(' ').ToList(), 
      PreserveAccessToken = true 
     }); 
    } 

:私の起動クラスからコードを考えると

属性からのコードが実行されます。

OWINは、まずトークンを検証する必要はありませんか?

トークンが有効かどうか(有効な契約、署名、有効期限切れなど)、クレームを検証した後にのみ行う方法を教えてください。

+0

? – Tinwor

+0

@Tinworこれはトークンのクレームが同一であることを要求します。そのうちの1つが –

答えて

0

ClaimAuthorizationAttributeのリンクされた質問に問題があります。AuthorizeAttributeが提供する組み込みの保護メカニズムをバイパスして、base.IsAuthorized()を呼び出すことはありません。代わりに、単に請求が存在するか否かを見た後にここに戻っての

return token.Claims.Any(c => c.Type.Equals(this.Claim) && c.Value.Equals("True", StringComparison.OrdinalIgnoreCase)); 

あなたは代わりに基本クラスが満たされているので、トークン自体が有効であることを確認することを続けていく必要があり、あまりにも:あなたがreturn文を変更した場合、 ``あなたはまだ、このエラーを取得token.Claims.All`を返すとtoken.Claims.Any`を返す:あなたの前の質問から

var claimValid = token.Claims.Any(c => c.Type.Equals(this.Claim) && c.Value.Equals("True", StringComparison.OrdinalIgnoreCase)); 
if (claimValid) 
    return base.IsAuthorized(); 
else 
    return false; 
+0

と一致するかどうかを確認するだけです。私はこのオプションを考えていましたが、ソースコード(https:// github .com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/AuthorizeAttribute.cs)これはトークンを検証していないことがわかりました... –

+0

@Buda直接ではありませんが、ユーザーは認証されます。ユーザーは有効なトークンを持っていないと –

関連する問題