2017-08-25 4 views
1

認証ポリシーを使用する場合、どのポリシーが成功しなかったかを理解することは可能ですか?ASPNETコアでどの要件ポリシーが失敗したかを特定

理想的には、ミドルウェアパイプライン内のデータを変更して、403がAPIコンシューマに返される理由をより明確にしたいと考えています。

現時点で返されているのは403です。禁止されています。

[Authorize] // Azure auth 
[Authorize(Policy="SessionIsValid")] // Ensure transaction sessions are valid 
public class TaskController : Controller 
{ /** code removed for brevity */ } 

Statup.csのconfigureメソッドで失敗したポリシーの理由を理解することはできますか?

app.Use(async (context, next) => 
{ 
    await next(); 

    if (context.Response.StatusCode == 403) 
    { 
     // which policy failed? need to inform consumer which requirement was not met 
     await next() 
    } 

}); 

答えて

2

ASPNETコアドキュメントから

リソースプロパティの使用は、フレームワーク固有のものです。 Resourceプロパティの情報を使用すると、認可ポリシーが特定のフレームワークに制限されます。 Resourceプロパティをasキーワードを使用してキャストし、他のフレームワークで実行したときにInvalidCastExceptionsでコードがクラッシュしないようにキャストが成功したことを確認する必要があります。

マイ実装

context.Fail(); 

    if (context.Resource is Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext mvcContext) {   
     mvcContext.HttpContext.Response.StatusCode = 403; 
     await mvcContext.HttpContext.Response.WriteAsync($"Forbidden; No valid Transaction Session Id for {context.User.Identity.Name}");       
    }  
関連する問題