首页 > 其他分享 >在 .NET 8.0 中,授权策略

在 .NET 8.0 中,授权策略

时间:2024-08-11 14:06:19浏览次数:9  
标签:8.0 string 授权 var new NET public

在 .NET 8.0 中,授权策略(Authorization Policies)是一种强大的机制,用于定义和应用复杂的授权规则。授权策略可以基于用户角色、声明、自定义要求等来控制对资源的访问。

以下是如何在 .NET 8.0 中配置和使用授权策略的步骤:

  1. 安装必要的 NuGet 包
    确保你已经安装了 Microsoft.AspNetCore.Authorization 包,这个包通常已经包含在 ASP.NET Core 项目中。

  2. 配置授权策略
    在 Program.cs 或 Startup.cs 中配置授权策略:

using Microsoft.AspNetCore.Authorization;

var builder = WebApplication.CreateBuilder(args);

// 添加授权服务
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
options.AddPolicy("Over21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21)));
});

// 注册自定义要求处理程序
builder.Services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();

builder.Services.AddControllers();

var app = builder.Build();

// 启用授权中间件
app.UseAuthorization();

app.MapControllers();

app.Run();
CopyInsert
3. 创建自定义要求和处理程序
创建一个自定义要求(Requirement)和一个处理程序(Handler)来处理这个要求:

using Microsoft.AspNetCore.Authorization;

public class MinimumAgeRequirement : IAuthorizationRequirement
{
public int MinimumAge { get; }

public MinimumAgeRequirement(int minimumAge)
{
    MinimumAge = minimumAge;
}

}

public class MinimumAgeHandler : AuthorizationHandler
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumAgeRequirement requirement)
{
var ageClaim = context.User.FindFirst(c => c.Type == "Age");
if (ageClaim != null && int.TryParse(ageClaim.Value, out int age) && age >= requirement.MinimumAge)
{
context.Succeed(requirement);
}

    return Task.CompletedTask;
}

}
CopyInsert
4. 在控制器中应用授权策略
在控制器或操作方法上应用授权策略:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;

[ApiController]
[Route("api/[controller]")]
public class AdminController : ControllerBase
{
[HttpGet]
[Authorize(Policy = "AdminOnly")]
public IActionResult Get()
{
return Ok("Admin access granted");
}

[HttpGet("over21")]
[Authorize(Policy = "Over21")]
public IActionResult GetOver21()
{
    return Ok("Access granted for users over 21");
}

}
CopyInsert
5. 配置用户声明
在生成 JWT 时,确保包含必要的声明,例如年龄声明:

public string GenerateJwtToken(string userId, int age, string issuer, string audience, string key)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var claims = new[]
{
    new Claim(JwtRegisteredClaimNames.Sub, userId),
    new Claim("Age", age.ToString()),
    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};

var token = new JwtSecurityToken(
    issuer: issuer,
    audience: audience,
    claims: claims,
    expires: DateTime.Now.AddMinutes(30),
    signingCredentials: credentials);

return new JwtSecurityTokenHandler().WriteToken(token);

}
CopyInsert
通过以上步骤,你可以在 .NET 8.0 中配置和使用授权策略,以实现复杂的授权逻辑。

标签:8.0,string,授权,var,new,NET,public
From: https://www.cnblogs.com/zy8899/p/18353327

相关文章

  • AI在医学领域:nnSynergyNet3D高精度分割肝硬化肝脏体MRI图像
    关键词:肝硬化肝脏分割、协同深度学习模型、跨模态泛化    肝硬化是慢性肝病(CLD)的最后阶段,是一个重大的全球性健康问题。2019年,它是全球死亡原因的第11位,占全球死亡人数的2.4%。尽管病毒性肝炎仍然是终末期肝病的主要原因,但与代谢功能障碍相关的脂肪肝病(MASLD)预计将由于......
  • 【云原生之kubernetes实战】在k8s环境下部署Note Mark笔记工具
    【云原生之kubernetes实战】在k8s环境下部署NoteMark笔记工具一、NoteMark介绍1.1NoteMark简介1.2NoteMark特点1.3NoteMark使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.2k8s存储介绍三、检查k8s环境3.1检查工作节点状态3......
  • 【K8s】专题九:Kubernetes 常用命令汇总
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录写在前边一、集群相关1、查看集群信息2、查看集群服务3、查看集群组件4、查看集群版本5、查看集群API版本二、节点相关1、查看节点状态2......
  • 【Tarjan SCC 加边使得所有图联通 至少选取多少个点能图联通 】Network of Schools加
    [P2812校园网络【USACO]NetworkofSchools加强版大意:1.图G=(V,E)选几个点可以到达所有的点2.连多少条边可以让任意一个点出发到达其他所有点1思路:1.Tarjan跑一遍求SCC那些出度为0的点就是出发的所有点即din0的点的数量2.计算dout0的点的数量和din0的点的数量取max......
  • Kubernetes-POD的健康检查
    目录简介什么是探针LivenessProbe(存活探针)ReadinessProbe(就绪探针)StartupProbe(启动探针)什么时候使用探针?何时使用存活探针(LivenessProbe)何时使用就绪探针(Read inessProbe)何时使用启动探针(StartupProbe)容器探测方法exechttpGettcpSocket容器探测使用livenessProbe使用exec使......
  • Kubernetes-POD的健康检查
    目录简介什么时候使用探针?何时使用存活探针(LivenessProbe)何时使用就绪探针(Read inessProbe)何时使用启动探针(StartupProbe)容器探测方法exechttpGettcpSocket容器探测使用livenessProbe使用exec使用httpGet使用tcpSocketreadinessProbe使用exec使用httpGet使用tcpSocket使用start......
  • IOS-增强现实的--NET-开发者指南-全-
    IOS增强现实的.NET开发者指南(全)原文:.NETDeveloper'sGuidetoAugmentedRealityiniOS协议:CCBY-NC-SA4.0一、设置您的环境首先,我们需要确保你已经安装了一些你需要的东西;之后,我们可以开始编写基本的增强现实应用并将其部署到您的iOS设备上。这是你需要的东西的清......
  • .NET8 中空引用处理以及DDD相关概念
    作为一名.NET开发者,小白很开心看到.NET版本更新后,.NET语法越来越有意思,写起来也越来越有趣。很多新的语法,虽然变化不小,但是对小白这位从.NETFramework就开始写.NET的程序员来说,那也是信手拈来。但是小白发现string都开始变为可空的时候,那还是认真的翻阅了一下相关的资料,以免不......
  • win11解决无法安装.net framework 3.5(包括.net2.0和3.0)
    下载.sxs资源包:https://wwf.lanzoub.com/iEJKd26s4xqf解压到任意盘以管理员身份运行cmd,输入以下命令并回车dism.exe/online/enable-feature/featurename:NetFX3/Source:C:\softwares\sxs11控制面板查看安装成功与否......
  • 以DenseNet为例进行AI算法部署集成
    以DenseNet为例进行AI算法部署集成AI越用越广,但落地使用的时候各种bug多多,这里提供一些离线集成的导引方便大家学习,后面也会尝试更新一些webapi的集成方式,请期待后续的博客简单性能表格下列表格为一些简单的部署数据搜集,通过部署器进行离线集成,可以看到可以大大降低资源......