【发布时间】:2020-12-29 11:48:53
【问题描述】:
我正在尝试限制对控制器的访问。使用角色,我创建了一个具有角色的用户,但是我遇到了未经授权的异常。
[Authorize(Roles = ApiRoles.Consumer)]
[Route("api/[controller]")]
public class StripePaymentsController : Controller
{
//Omitted for simplicity
}
当我尝试访问控制器上的任何方法时,我得到一个 403,但是,如果我删除 Authorize 属性一切正常。
我的印象是这可以开箱即用。例如,我的用户在数据库中具有角色,当我尝试访问时,我会假设它会使用我的用户管理器来检查用户是否具有正确的角色。
我可以看到我的 JWT 对 rol 有一个声明,我假设这意味着角色。
我想知道如果我手动将我的角色添加到 JWT 可能会起作用吗?
编辑:即使我在角色声明中添加角色,它仍然无法授权。
授权过滤器如何在后台工作? W 如何使用我是否需要从 JWT 编写自定义映射来授权角色?
【问题讨论】:
-
1) 我必须在中间件中添加一个
ClaimsIdentity,才能取消声明和令牌并使用HttpContext.User.AddIdentity添加它们。这使它们可用,但令牌签名在到达带有[Authorize]的端点之前不会被验证。 2)我必须实现JwtBearerEventsOnTokenValidated,以便在验证令牌时将用户分配给HttpContext.User。我正在从 WebAPI 升级到 Core,所以有些事情可能会有所不同。到目前为止,您对 JWT/上下文/索赔处理有什么看法?
标签: c# authentication .net-core