簡體   English   中英

.NET 核心:用於 controller 身份驗證的自定義承載過濾器

[英].NET Core : custom bearer filter for controller authentication

我是新手,想在控制器上進行簡單的承載身份驗證。 所以我擴展了Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseAuthorization();
    app.UseAuthentication();
}

並創建了過濾器:

public class BearerAuthenticationFilter : ActionFilterAttribute, IAuthenticationFilter
{
    private readonly string _bearerToken = ConfigurationManager.AppSettings["Token"];
    public bool AllowMultiple { get; }

    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        //...
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        //...
    }
}

public class AuthenticationFailureResult : IHttpActionResult
{
    //...     
}

但是 controller 忽略了過濾器中的代碼。

我究竟做錯了什么? 我找不到任何關於如何實現不記名身份驗證的好而簡單的教程......

Controller:

[ApiController]
[BearerAuthenticationFilter]
[Route("api/Test")]
public class TestController : ControllerBase
{
   //...
}

編輯:我實現了@Tony Houdek 的更改,但是在我運行 Controller 之后它仍然沒有做任何事情。 我也無法在BearerAuthenticationFilter中啟動調試器。

我的猜測是您沒有全局注冊過濾器,因此它不會自動應用於所有 controller 操作,您可以在注冊控制器時全局注冊它,例如:

services.AddMvc(options =>
{
    options.Filters.Add(new BearerAuthenticationFilter());
});

或者您可以使用 BearerAuthenticationFilter 屬性為特定控制器/操作顯式應用過濾器(不要忘記從過濾器類中的 Attribute class 派生):

[BearerAuthenticationFilter]
[ApiController]
[Route("api/Test")]
public class TestController : ControllerBase
{
    //...
}

您可以在此處閱讀有關操作過濾器的更多信息: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM