基于 UserRole ASP.NET Core MVC Web 应用程序的路由页面

问题描述 投票:0回答:1

在我的网络应用程序中,登录后如何根据

UserRole
路由用户?
UserRole
是从 JWT 令牌中检索的,我也将其放入 API 响应中。该令牌是由我的身份验证服务器颁发的。

如何确保路由安全?如果 JWT 被拦截,角色变为 admin,用户是否可以访问管理页面?

我在进行此类开发方面还是新手,因此非常感谢一些见解。

UserDetails userDetails = new UserDetails();
TokenResponse result = await servicex.Login(ProcEmail, ProcPassword);

if (result.Success)
{
    userDetails.SetUserDetailsFromTokenResponse(result, _httpContextAccessor);
    return RedirectToAction("Index", "Dashboard");
}

return View("loginPage");

在我的仪表板控制器中,我尝试了策略,但它返回“HTTP ERROR 401”错误。

public class DashboardController : Controller
{
    //[Authorize(Policy = IdentityData.AdminUserPolicyName)]
    public async Task<IActionResult> IndexAsync()
    {
        return View();
    }
}

我希望基于

UserRole
的路由是安全的

web asp.net-core-mvc
1个回答
0
投票
  1. 用户角色通常代表用户拥有的权限或访问级别,以下是其中涉及的内容:

身份验证:当用户登录时,将检查他们是否是 有效,他们会收到一个令牌(通常是 JWT 令牌),其中包含他们的 有效负载中的 UserRole。

授权:登录后,当用户尝试访问特定权限时 作为应用程序的一部分,系统会检查 UserRole 令牌来确定他们是否具有权限。

基于角色的重定向:基于从以下位置检索的 UserRole 令牌,应用程序逻辑决定哪个页面或控制器 用户应该被重定向到。

  1. 角色验证、令牌验证、HTTP 涉及以及使用策略保护控制器都将努力确保路由安全。

  2. 如果令牌被截获并且角色更改为管理员,用户仍然无法获得访问权限,因为应用程序中设置的机密会对它进行编码,如果角色被修改,令牌签名仍然无法被授权。

在您的代码中,您尝试添加基于角色的授权策略。 401代表未授权,这是意料之中的。因此,我启动了一个示例应用程序,您可以检查它是否有助于您的理解。主要部分是program.cs

//role-based authorization
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("UserOnly", policy => policy.RequireRole("User"));
});

在控制器中

[Route("api/fruits")]
[ApiController]
[Authorize(Policy = "UserOnly")]
public class FruitController : ControllerBase
{
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        var fruits = await Task.FromResult(new string[] { "apple", "bananana", "kiwi" });
        return Ok(fruits);
    }
}

只有授权用户才能获得水果。

还有其他官方授权策略,例如基于声明、基于策略。更多详情可以阅读官方文档 https://learn.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-8.0 .

© www.soinside.com 2019 - 2024. All rights reserved.