.net core 限制AddJwtBearer验证.net core 3.1中的ID令牌

.net core 限制AddJwtBearer验证.net core 3.1中的ID令牌,.net-core,oauth-2.0,.net Core,Oauth 2.0,我在.net core 3.1应用程序中实现了令牌验证,如下所示: services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => { options.Authority = Configuration["AuthorityUrl"]; options.Audience =

我在.net core 3.1应用程序中实现了令牌验证,如下所示:

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
        {
            options.Authority = Configuration["AuthorityUrl"];
            options.Audience = Configuration["Audience"];
            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = "preferred_username"
            };
        });

我现在的主要问题是安全威胁,我认为如果用户传递ID令牌,身份验证就会成功传递,这是错误的,因为资源服务器应该只接受访问令牌。这种行为正确吗?如果是,如何将验证限制为仅访问令牌。

您的API的任务是验证令牌的属性,并且API通常为下面的项目2和3配置固定值:

  • 签名
  • 发行人
  • 听众
  • 到期日
  • 范围
如果您检查受众(并且您应该),则id令牌的使用自然会失败,其中典型值如下所示:

  • 访问令牌的受众=api.mycompany.com
  • id令牌的受众=mywebclientid
API还应检查所需的作用域—授权服务器不在id令牌中包含作用域—因为作用域仅由API用于保护数据区域


此外,一些提供者会在令牌中提供声明,告诉您其类型,尽管这是特定于供应商的。例如,安全性提供了一个“目的”声明-请参见。

您的API的任务是验证令牌的属性-并且API通常配置为以下第2项和第3项的固定值:

  • 签名
  • 发行人
  • 听众
  • 到期日
  • 范围
如果您检查受众(并且您应该),则id令牌的使用自然会失败,其中典型值如下所示:

  • 访问令牌的受众=api.mycompany.com
  • id令牌的受众=mywebclientid
API还应检查所需的作用域—授权服务器不在id令牌中包含作用域—因为作用域仅由API用于保护数据区域


此外,一些提供者会在令牌中提供声明,告诉您其类型,尽管这是特定于供应商的。例如,Curity提供了一个“目的”声明-请参见。

您是对的,我也使用了Curity两年,它的目的声明帮助我发现了其他提供商,但没有发现其他提供商。谢谢你的帮助你是对的,我也使用了2年的安全,它有目的的索赔,帮助我发现,但不是其他供应商。谢谢你的帮助