2017-08-22 21 views
0

私はいくつかのカスタムロジックを持つ.netコアAuthenticationHandlerを作ろうとしています。私はページに要求を行うたびに、認証ハンドラのすべてが正常に実行されますが、エンドコントローラのコードを実際に実行せずに200を返します。私はこの簡単なバージョンにそれを蒸留しました。AuthenticationHandlerが途中でリクエストを終了しています

Startup.cs:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddAuthentication("Dummy") 
     .AddScheme<AuthenticationSchemeOptions, DummyAuthHandler>("Dummy", null); 
    ... 

マイハンドラ:

public class DummyAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions> 
{ 
    public DummyAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, 
     ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : 
      base(options, logger, encoder, clock) 
    { 
    } 

    protected override Task<AuthenticateResult> HandleAuthenticateAsync() 
     => Task.FromResult(AuthenticateResult.Success(
       new AuthenticationTicket(new ClaimsPrincipal(), "Dummy"))); 

    protected override Task HandleChallengeAsync(AuthenticationProperties properties) 
     => Task.CompletedTask; 
} 

私は要求の処理を続行するためのフレームワークを伝えるために必要な方法の一つが欠けています考えて、とていませんよ私の認証ハンドラがページのリダイレクトを望んでいると思うだけです。たぶん、どこかでnext()への呼び出しを追加する必要がありますか?

答えて

0

thisthisのおかげ... ClaimsIdentityは私が最初の場所でHandleChallengeAsyncを必要と思った理由である、= FalseのにisAuthenticated返していました、それを割れ。固定ハンドラーの外観は次のとおりです。

public class DummyAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions> 
{ 
    public DummyAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, 
     ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : 
      base(options, logger, encoder, clock) 
    { 
    } 

    protected override Task<AuthenticateResult> HandleAuthenticateAsync() 
     => Task.FromResult(AuthenticateResult.Success(
       new AuthenticationTicket(new ClaimsPrincipal(
        new ClaimsIdentity("abc")), "Dummy"))); 
} 
関連する問題