APIキーをチェックするカスタムポリシーを実装したnetcore 2.2プロジェクトが機能しています。
startup.csに私はこのようにこのポリシーを追加しています
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
私のAppKeyRequirementでは、AuthorizationHandlerから継承し、次のように着信リクエストのキーを解決します
protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement)
{
var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource;
var query = authorizationFilterContext.HttpContext.Request.Query;
if (query.ContainsKey("key") && query.ContainsKey("app"))
{ // Do stuff
これはnetcore 3.1では機能しません
次のエラーが発生します。
タイプ「Microsoft.AspNetCore.Routing.RouteEndpoint」のオブジェクトをタイプ「Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext」にキャストできません。
コア3以上でこれを行う正しい方法は何ですか?
Kirk Larkinが指摘したように、.net 3.0以降での正しい方法は、IHttpContextAccessorをAuthハンドラーに挿入して使用することです。
この時点での私の質問は、これをどのように注入するのですか?これをstartup.csで渡すことはできません。少なくとも方法はわかりません。
どんなアイデア/ヒントも大歓迎です。