2017-12-04 3 views
2

authトークンを読み取るカスタム認証スキームを持つWeb APIがあります。多くの理由(トークンの欠落、無効、期限切れ)で認証が失敗(401)する可能性があるため、HTTP応答に失敗の理由を示すことができます。例えば、401 Token has expiredHandleChallengeAsyncにカスタムデータを渡す方法

トークンは、構文解析され、AuthenticationHandler<T>.HandleAuthenticateAsyncで検証されます。その方法の失敗理由をHandleChallengeAsyncに渡すにはどうすればよいですか?

protected override Task<AuthenticateResult> HandleAuthenticateAsync() 
{ 
    AuthenticateResult result = null; 
    var tokenResult = this.ParseToken(this.Request, out var token); 

    if (tokenResult == TokenResult.Normal) 
    { 
    result = AuthenticateResult.Success(this.ticketFactory.CreateAuthenticationTicket(token)); 
    } 
    else 
    { 
    result = AuthenticateResult.Fail("Bad token"); 
    // FIXME: Figure out how to populate the Properties property 
    //result.Properties.Items.Add(nameof(TokenResult), tokenResult.ToString()); 
    } 

    return Task.FromResult(result); 
} 

AuthenticationProperties.Itemsは、このタイプのカスタムデータを保存するのに適しています。しかし、AuthenticationPropertiesオブジェクトをHandleAuthenticateAsyncの中に作成し、それをAuthenticateResultオブジェクトに添付する方法を理解できません。方法はありますか? https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication/AuthenticationBuilder.cs#L44

インスタンスフィールドとして失敗の理由を設定することができますので、すべての要求は、ハンドラの独自のインスタンスを取得します:あなたは、ソースコードで、ここで見ることができるよう

答えて

2

認証ハンドラは、過渡的なスコープです。

関連する問題