gpt4 book ai didi

c# - 为什么我应该始终为我的 Authorize 属性定义 JwtBearerDefaults.AuthenticationScheme?

转载 作者:行者123 更新时间:2023-12-04 13:09:35 29 4
gpt4 key购买 nike

我有一个简单的 JWT 身份验证示例,您可以在其中找到它 here

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
如您所见,我添加了 JwtBearerDefaults.AuthenticationSchemeAuthenticationStartup/ConfigureServices方法所以我应该可以使用 [Authorize] 独立 如下
[Authorize]
public sealed class WeatherForecastController : BaseController
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
但我不知道为什么它不起作用! (我已经用 postman 测试过)。我 必须通过 AuthenticationSchemes 定义它.
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public sealed class WeatherForecastController : BaseController
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
任何人都可以指导我如何使用 Authorize独立属性 没有 AuthenticationSchemes特别是当我在 ConfigureServices 中定义它时?我设置错了什么?

最佳答案

您的代码没有 app.UseAuthentication()包括。所以这意味着没有身份验证中间件。
默认身份验证方案仅由身份验证中间件用于自动验证请求并构建当前主体。当您使用 [Authorize]单独地,未设置身份验证方案并且授权过滤器将不起作用。基于该过滤器构建的过滤器 IAuthorizeData ( AuthorizeAttributeIAuthorizeData )是 AuthorizeFilter这需要明确设置方案。
这就是为什么另一个 [Authorize(...)]一些方案集有效但不是 [Authorize] .
所以你应该使用认证中间件来使用[Authorize]方便,无需指定方案。AuthorizeFilter将使用 IPolicyEvaluator在内部验证请求,这里是 PolicyEvaluator.AuthenticateAsync 的默认实现- 你可以看到它检查 AuthenticationSchemes 的可用性.

关于c# - 为什么我应该始终为我的 Authorize 属性定义 JwtBearerDefaults.AuthenticationScheme?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66939641/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com