ASP.NET Core Web API 是否针对每个请求验证身份验证令牌?

Kar*_*mar 0 c# authentication azure-active-directory asp.net-core-webapi

我的 ASP.NET Core Web API 中有以下配置:

// Adds Microsoft Identity platform (AAD v2.0) support to protect this Api
services.AddMicrosoftIdentityWebApiAuthentication(configuration);

services.AddControllers(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireClaim("email")
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)

我有一个 Angular 客户端应用程序,它AuthToken随每个请求发送 。我不认为 Web API 应该验证AuthToken每个请求,因为这会影响性能,因为它可能会联系 Microsoft 验证端点。

ASP.NET Core Web API 是否针对每个请求验证身份验证令牌?

juu*_*nas 5

是的,每个请求都会验证令牌。但没有“Microsoft 验证端点”,它大多数时候完全在内存中进行验证。

运行时实际发生的情况:

  1. 应用程序启动
  2. 应用程序从“authority-uri/.well-known/openid-configuration”下载元数据(例如: https: //login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration
  3. 此 JSON 包含“jwks_uri”(例如https://login.microsoftonline.com/organizations/discovery/v2.0/keys
  4. 应用程序从该 URL 下载密钥

随后收到请求:

  1. 应用程序使用之前下载的密钥之一来验证签名(它使用令牌标头中“kid”匹配的密钥)
  2. 其他验证完成

如果我没记错的话,元数据默认会在内存中缓存 24 小时。需要时它会自动刷新。

简而言之,大多数时候根本没有对 Microsoft 端点的请求。您的应用程序仅使用一些 CPU 时间来验证内存中的令牌。您的数据库查询很可能会完全掩盖令牌验证的开销。