1.环境.net core mvc 7.0
2.前台页面想通过JWT中的角色,对不同按钮或div进行权限设置,如禁用,请教一个靠谱的方法
asp.net core mvc前台页面想通过JWT中的角色,对不同按钮或div进行权限设置
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 吃不了席 2024-09-04 20:12关注
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
要实现ASP.NET Core MVC中基于JWT(JSON Web Tokens)的身份验证和权限控制,您可以通过创建一个自定义中间件或者在视图中应用过滤器来处理JWT令牌中的角色信息。
方法一:创建自定义中间件
步骤1: 创建自定义中间件
首先,确保您的项目已安装了
Microsoft.AspNetCore.Authentication.JwtBearer
库,这是用于处理JWT令牌的。如果没有安装,可以使用NuGet包管理器添加:dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
接下来,在项目的
Startup.cs
文件中,注册自定义中间件以处理JWT令牌。这里是一个简单的示例,它将根据JWT中的用户ID来决定是否启用某个按钮或显示特定内容:using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; public class MyCustomJwtMiddleware { private readonly RequestDelegate _next; private readonly JwtSecurityTokenHandler _handler; public MyCustomJwtMiddleware(RequestDelegate next) { _next = next; _handler = new JwtSecurityTokenHandler(); } public async Task Invoke(HttpContext context) { var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(' ')[1]; if (token != null) { var jwt = await _handler.ReadJwtTokenAsync(token); // 根据JWT中的用户ID判断是否启用按钮 // ... await _next(context); } else { context.Response.StatusCode = 401; context.Response.ContentType = "application/json"; await context.Response.WriteAsync("{}"); } } } public static void UseMyCustomJwtMiddleware(this IApplicationBuilder app) { app.Use(async (context, next) => { await next.Invoke(); if (!context.Request.IsAuthenticated) { return; } var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(' ')[1]; if (token == null) { context.Response.StatusCode = 401; context.Response.ContentType = "application/json"; await context.Response.WriteAsync("{}"); return; } var jwt = await context.RequestServices.GetService<IJwtService>().DecodeToken(token); // 校验JWT并获取用户ID string userId = jwt.Claims.First(c => c.Type == ClaimTypes.NameIdentifier)?.Value; // 检查是否有权限访问当前页面 // ... await next.Invoke(); }); }
步骤2: 在控制器方法上应用过滤器
然后,在需要检查权限的控制器方法上应用
UseMyCustomJwtMiddleware
方法:[ApiController] [Route("[controller]")] public class YourController : ControllerBase { [HttpGet] public IActionResult Get() { if (!IsUserAuthorized()) { return Unauthorized(); } // 其他业务逻辑... return Ok("Hello World!"); } private bool IsUserAuthorized() { var user = HttpContext.User.Identity as ClaimsIdentity; if (user == null || !user.HasClaim(c => c.Type == ClaimTypes.NameIdentifier)) { return false; } var userId = user.FindFirstValue(ClaimTypes.NameIdentifier); // 这里是检查用户是否具有权限的逻辑... return true; } }
方法二:在视图中应用过滤器
对于更复杂的应用场景,您还可以考虑在视图中直接应用过滤器。这通常是在前端JavaScript中完成的,因为前端不需要处理身份验证问题。例如,在HTML模板中应用过滤器:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>View with JWT Authorization</title> </head> <body> <!-- 视图渲染在此处 --> </body> </html>
在视图中,您可以动态加载包含权限检查逻辑的JavaScript函数,并在需要时调用它们:
<script> function checkAccess() { // 假设我们有一个名为`CheckAccess`的函数,它可以返回布尔值 const accessAllowed = CheckAccess(); if (accessAllowed) { // 如果允许访问,则执行其他操作 console.log("Access granted"); } else { // 如果不允许访问,则显示错误消息或跳转到登录页面 alert("Access denied"); } } window.onload = () => { checkAccess(); }; </script>
总结
这两种方法都可以让您在ASP.NET Core MVC中利用JWT身份验证和权限控制。选择哪种方法取决于您的具体需求和技术栈偏好。希望这个解答对你有所帮助!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 电视版的优酷可以设置电影连续播放吗?
- ¥50 复现论文;matlab代码编写
- ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
- ¥15 数字图像的降噪滤波增强
- ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
- ¥15 MSR2680-XS路由器频繁卡顿问题
- ¥15 VB6可以成功读取的文件,用C#读不了
- ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
- ¥15 C++ 句柄后台鼠标拖动如何实现
- ¥15 有人会SIRIUS 5.8.0这个软件吗