我很难理解这一点,也找不到更具体的解决方案。问题如下,我有一个带有许多端点的API,所有端点都使用Authorize和一个用Jwt生成的令牌。我尝试做的是,控制器使用一个独占令牌,我不确定是否可能。也就是说,如果用户有权访问此令牌,则不允许他在其他现有端点中使用它。我还希望不必修改[Authorize]头的其余部分,因为有很多端点。
可以吗?如果不太麻烦的话,你能告诉我怎么处理这个不方便的地方吗?
谢谢大家!
我和你们分享一些实际的代码:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme => JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
RequireExpirationTime = false,
ValidateIssuer = false,
ValidateAudience = false,
ValidAudience = "FULLAPI",
ValidIssuer = "FULLAPI",
IssuerSigningKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecurityKey))
};
});
尝试使用政策和计划,但没有得到我想要的工作。
2条答案
按热度按时间vhmi4jdf1#
可以定义多个身份验证方案。
像这样使用。
xxe27gdn2#
这是一种更简洁的方法,无需修改现有的
[Authorize]
属性。首先,将
AddJwtBearer
修改如下-方法之一是将所有端点分组,并使用具有特定端点组的键进行Map,然后在创建令牌时将该键放入声明中。
现在您可以访问
controller
和action
名称以及令牌上下文,您可以直接检查声明并验证密钥对于当前请求的端点是否有效,如果令牌不满足要求,则发送未授权响应。