.NET Core:用于控制器身份验证的自定义承载过滤器
.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
{
//...
}
但是控制器忽略了来自过滤器的代码。
我做错了什么?我找不到任何关于如何实现不记名身份验证的好的简单教程...
控制器:
[ApiController]
[BearerAuthenticationFilter]
[Route("api/Test")]
public class TestController : ControllerBase
{
//...
}
编辑:
我实施了@Tony Houdek 的更改,但在我 运行 控制器之后它仍然不执行任何操作。我也无法在 BearerAuthenticationFilter
.
中启动调试器
我的猜测是你没有全局注册过滤器,所以它不会自动应用于所有控制器操作,你可以在注册控制器时全局注册它,例如这样:
services.AddMvc(options =>
{
options.Filters.Add(new BearerAuthenticationFilter());
});
或者您可以使用 BearerAuthenticationFilter 属性为特定 controllers/actions 显式应用过滤器(不要忘记从过滤器 class 中的属性 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
我是新手,想在控制器上进行简单的承载身份验证。所以我扩展了 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
{
//...
}
但是控制器忽略了来自过滤器的代码。
我做错了什么?我找不到任何关于如何实现不记名身份验证的好的简单教程...
控制器:
[ApiController]
[BearerAuthenticationFilter]
[Route("api/Test")]
public class TestController : ControllerBase
{
//...
}
编辑:
我实施了@Tony Houdek 的更改,但在我 运行 控制器之后它仍然不执行任何操作。我也无法在 BearerAuthenticationFilter
.
我的猜测是你没有全局注册过滤器,所以它不会自动应用于所有控制器操作,你可以在注册控制器时全局注册它,例如这样:
services.AddMvc(options =>
{
options.Filters.Add(new BearerAuthenticationFilter());
});
或者您可以使用 BearerAuthenticationFilter 属性为特定 controllers/actions 显式应用过滤器(不要忘记从过滤器 class 中的属性 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