【问题标题】:Getting information from the Bearer Token in .net core api to do additional authorization on an endpoint从 .net core api 中的 Bearer Token 获取信息以对端点进行额外授权
【发布时间】:2020-09-25 07:32:25
【问题描述】:

我有一个 Angular 客户端,它通过 Auth0 授权用户,然后使用来自 Auth0 的令牌来使用内置于 .net 核心中的 API。 Startup.cs 中的认证是

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.Authority = "removed";
                options.Audience = "removed";
            });

我有一个这样的端点

[Authorize]
[HttpGet("preview/{questionId}")]
[...]
public ActionResult<Question> GetQuestionPreviewById(string questionId)
{
  ...
  return Ok(model);
}

这一切都很好。但是,我想在此端点上添加额外的授权逻辑,这需要知道用户是谁 - 该信息在令牌(sub 字段)上可用,但我: 1.不知道如何从端点到达 2. 不要认为端点是执行此操作的正确位置。

我的直觉告诉我应该有另一个(角度语言)可以添加到端点的守卫,比如

[Authorize]
[AuthorizeOwnershipOfRequestedObject]

但我不知道如何在 .net 中执行此操作。

如何使用提供的令牌在端点上添加额外的授权?

【问题讨论】:

    标签: .net-core asp.net-core-webapi auth0


    【解决方案1】:

    1) 您需要首先将声明分配给特定用户

    2) 在配置服务中添加授权选项以包含策略

    public void ConfigureServices(IServiceCollection services)
    { 
       services.AddAuthorization(options =>
       {
        options.AddPolicy("EmployeeOnly", policy => 
          policy.RequireClaim("EmployeeNumber"));
       });
    }
    

    3) 然后使用 AuthorizeAttribute 属性上的 Policy 属性应用策略以指定策略名称

    [Authorize(Policy = "EmployeeOnly")]
    public IActionResult VacationBalance()
    {
       return View();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多