我是为JWT使用[Authorize]标头,还是在公共端点内部进行检查



我正在为我正在构建的网站制作一个独立的API。网站从身份验证服务器获取JWT令牌/刷新令牌,并使用在其授权头中使用令牌调用此API

_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 

在API启动我有代码(我没有写这部分,所以我不确定是否有必要(

services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.TokenValidationParameters = tokenValidation.GetTokenValidationParameters();
});

令牌验证是实现CCD_ 1的服务。

因此,在这种背景下,这是我的问题。当网站向API发出HTTP请求时,我是否仍使用Authorize属性?我的理解是,每个请求都必须发送一个令牌,所以我不确定网站如何通过API进行身份验证。另一种选择是使每个端点";"公共";但是在每一个处验证令牌。我希望这是有道理的。

编辑:

我也应该问问。这是使用本线程中讨论的自定义[授权]标头或策略的合适位置吗?

编辑2:

我很笨。这个代码确实有效。通过在授权中包含令牌验证参数,任何具有[authorize]标头的端点都将自动检查令牌并对其进行验证。因此,此代码正在运行,我在代码的其他地方出现了一个小错误(控制器名称错误(。请忽略这个问题。

默认情况下,除非使用[Authorize]进行修饰,否则所有端点都可以访问。可以说,对于安全的API来说,更好的方法是设置一个全局默认值,要求所有请求都得到授权,然后特别豁免任何应该允许匿名访问的端点。

来自文件:

services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});

相关内容

最新更新