3
属性の代わりにインラインでポリシーのすべてのハンドラーを実行することは可能ですか?
ほとんどのAPIでは、次のように認証を行うだけです。 [Authorize(Policy = "Foo")] public MyApi() 私はこのポリシーをNuGetから取得していますが、変更できません。 一部のAPIでは、このポリシーが常に必要なわけではありません。これは、いくつかの構成に基づいて実行時に理解する必要があります。これをインラインで実行し、セットアップされているすべてのハンドラーが実行されるようにする方法を教えてください。 何度も検索した後、を作成しIAuthorizationService、それを使用してを呼び出すことがわかりましたAuthorizeAsync。これは私が望んでいるようですが、今実行している問題は、すべてのハンドラーAuthorizationFilterContextがコンテキスト上のリソースとしてに依存していることです。これは、AuthorizationAsyncの呼び出しではなく、属性を介してAuthorizationが行われたときに自動的に行われるようです。この場合、手動で渡す必要があります。私のコードは今このようになります: public MyApi() { var allowed = await _authorizationService.AuthorizeAsync(User, null, "Foo").ConfigureAwait(false); } これは私のすべてのハンドラを正しく通過するようですが、がないために機能しませんAuthorizationFilterContext。 1)これはそもそも正しいアプローチですか、またはこれをインラインで実行する他の方法がありますか?これをラップする独自のポリシーを作成する方法がおそらくあり、そこで構成を確認できると思いますが、単純なインラインアプローチがある場合は、それを優先します。 2)この方法が有効である場合、AuthorizationFilterContext?手動で作成してみましたが、コンテキストからより多くのデータを渡さないと、これは実際には正しくないようですが、良い例やドキュメントが見つかりません。 new AuthorizationFilterContext(new ActionContext(HttpContext, HttpContext.GetRouteData(), new ActionDescriptor()), new IFilterMetadata[] { });