Asp.Net Core 2验证承载令牌

时间:2019-07-09 13:27:49

标签: c# asp.net-core oauth authorization bearer-token

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

此处的目的是提取承载令牌并Validate,如果一切正常,则继续请求。

到目前为止,我的发现涉及以下

  • JWT拥有令牌授权,主要讨论access_token

  • Asp.Net核心安全中间件

  • 用于处理此问题的“自定义授权”属性。

我不确定我如何实现验证?我应该提取承载令牌然后创建自定义验证方法吗?

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

请提出建议?

2 个答案:

答案 0 :(得分:1)

经过更多研究之后,我终于发现自定义AuthorizationHandler是更合适的解决方案,因为假定使用自定义Authorize属性在Asp.Net Core中不建议使用。

设置简单,我可以从标头中提取我的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>();
}

答案 1 :(得分:0)

我认为在安装 Microsoft.AspNetCore.Authentication.JwtBearer NuGet 包后,将以下代码片段放在 ConfigureServices() 中应该能够验证您的 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();
            });
        });

记得将 app.UseAuthentication()app.UseAuthorization() 放在 Configure() 方法中。并将 [authorize] 添加到您的控制器 API。