[Authorize] 属性如何知道用户是否具有角色?

How does [Authorize] attribute know if a user has a role?

假设我在 ASP.NET 核心 MVC 应用程序中有一个有效的身份验证和授权实现,并且在一个操作上我有 [Authorize(Roles = "Admin")] 属性。我刚刚登录,我即将调用该操作。

调用该操作时,[Authorize(Roles = "Admin")] 属性在哪里查看用户是否具有 "Admin" 角色? "Admin" 存储在哪里?

如果您使用 ASP.NET 身份的默认实现,角色将存储在 table AspNetRoles 中,用户角色分配将存储在 AspNetUserRoles table.

Authorize 属性在执行操作之前执行。 查看以下 link 以获取有关请求管道的更多详细信息:Filters in ASP.NET Core

这可能取决于您使用的身份验证类型。我一直只使用 JwtBearer 身份验证方案。

在那种情况下,这些信息通常被编码到访问令牌中(由您的应用程序或其他身份提供者),您的客户端将其与您的请求以及令牌中的其他个人数据一起发送。

我最近找到了问题的答案。 Koppa Péter 的回答在这里最接近,但事实证明我需要更多细节。

[Authorize(Roles = "Admin")] 属性检查编码访问令牌中 Role 声明的值,并将其与“Admin”进行比较。