Asp.Net 核心 2 验证持有者令牌



我正在努力寻找一种确切的方法来验证我的OAuth bearer令牌,该令牌在请求发送到正在处理的 API 时传递,这是一个Asp.Net core项目。

这里的目的是提取持有者令牌并Validate它,如果一切正常,则继续请求。

到目前为止,我的发现遇到了以下内容

  • JWT熊令牌授权,主要谈论access_token

  • Asp.Net 核心安全中间件

  • 处理此问题的自定义授权属性。

我不太确定如何才能实现验证?是否应该提取持有者令牌,然后创建自定义验证方法?

理想情况下,希望 [Authorize] 属性来处理此问题。

请提出建议?

最后,经过更多的研究,我终于发现自定义AuthorizationHandler是一个更合适的解决方案,假设使用自定义Authorize属性,这在 Core 中没有建议 Asp.Net。

设置很简单,我能够从标头中提取我的Bearer令牌,以便使用 OAuth 进行进一步授权。

这是我的方法:

public class CustomAuthorizationHandler: IAuthorizationHandler
{
   public Task HandleAsync(AuthorizationHandlerContext context)
   {
       var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
       string authHeader = authFilterCtx.HttpContext.Request.Headers["Authorization"];
       if (authHeader != null && authHeader.Contains("Bearer"))
       {
          var token = authHeader.Replace("Bearer", "");
          // Now token can be used for further authorization
       }
       throw new NotImplementedException();
    }
}

最后在Startup.cs中注册处理程序

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IAuthorizationHandler, CustomAuthorizationHandler>();
}
我认为

将以下代码片段放入 ConfigureServices(( 应该能够在安装 Microsoft.AspNetCore.Authentication.JwtBearer NuGet 包后验证您的access_token:

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                //options.SaveToken = true;
                options.MetadataAddress = ValidationEndPoint;
                options.RequireHttpsMetadata = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    ValidateLifetime = true,
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidIssuer = tokenIssuer,
                    ValidAudiences = new[] { clientId },
                    ValidAudience = null
                };
            });
        services.AddAuthorization(options =>
        {
            options.AddPolicy("MyPolicy", policy =>
            {
                policy.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
                policy.RequireAuthenticatedUser();
            });
        });

记得把应用程序。使用身份验证((应用程序。UseAuthorization(( 在 Configure(( 方法中。并将 [授权] 添加到控制器 API。

相关内容

最新更新