[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”进行比较。
假设我在 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”进行比较。