.NET7之MiniAPI(特別篇) :Preview5優化了JWT驗證(下)

Preview5對策略驗證的方式沒有改變,只不過內置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份驗證和授權》的驗證方式基本相同,都是生成和驗證使用的驗證參數要一致,用繼承AuthorizationHandler的子類來作每次請求的驗證。

在具體的路由上,用RequireAuthorization("Permission")來配置策略名稱,以達到請求轉向驗證。

不多說了,看代碼實現,可以《.NET6之MiniAPI(十):基于策略的身份驗證和授權》作個比較。

using?Microsoft.AspNetCore.Authorization;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;var builder = WebApplication.CreateBuilder(args);#region?添加策略驗證參數
builder.Authentication.AddJwtBearer(opt =>
{????opt.TokenValidationParameters = new TokenValidationParameters{ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("1234567890abcdefg")),ValidateIssuer = true,ValidIssuer = "http://localhost:5274",ValidateAudience = true,ValidAudience = "http://localhost:5274",ClockSkew = TimeSpan.Zero,RequireExpirationTime = true,}; ;
});//添加策略名和注與策略驗證服務
builder.Services.AddAuthorization(options =>{//添加策略名稱options.AddPolicy("Permission", policyBuilder => policyBuilder.AddRequirements(new PermissionRequirement()));}).AddSingleton(new List<Permission> { new Permission { RoleName = "admin", Url = "/Policy", Method = "get" } }).AddSingleton<IAuthorizationHandler, PermissionHandler>();var app = builder.Build();
//登錄,生成token
app.MapGet("/login",?()?=>
{//用JWTSecurityTokenHandler生成tokenreturn new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(issuer: "http://localhost:5274",audience: "http://localhost:5274",claims: new Claim[] {new Claim(ClaimTypes.Role, "admin"),new Claim(ClaimTypes.Name, "桂素偉")},notBefore: DateTime.UtcNow,expires: DateTime.UtcNow.AddSeconds(500000),signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes("1234567890abcdefg")),SecurityAlgorithms.HmacSha256)));
});
app.MapGet("/policy", (ClaimsPrincipal user) => $"Hello 用戶:{user.Identity?.Name}, 角色:{user.Claims?.Where(s => s.Type == ClaimTypes.Role).First().Value}. This is a policy!").RequireAuthorization("Permission");
app.Run();#region?策略驗證功能
public class PermissionRequirement : IAuthorizationRequirement
{
}
//權限的實體集合
public class Permission
{public string? RoleName { get; set; }public string? Url { get; set; }public string? Method { get; set; }
}
//權限驗證類
public class PermissionHandler : AuthorizationHandler<PermissionRequirement>
{private readonly List<Permission> _userPermissions;public PermissionHandler(List<Permission> permissions){_userPermissions = permissions;}protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement){if (context.Resource is DefaultHttpContext){var httpContext = context.Resource as DefaultHttpContext;var questPath = httpContext?.Request?.Path;var method = httpContext?.Request?.Method;var isAuthenticated = context?.User?.Identity?.IsAuthenticated;if (isAuthenticated.HasValue && isAuthenticated.Value){var role = context?.User?.Claims?.SingleOrDefault(s => s.Type == ClaimTypes.Role)?.Value;if (_userPermissions.Where(w => w.RoleName == role && w.Method?.ToUpper() == method?.ToUpper() && w.Url?.ToLower() == questPath).Count() > 0){context?.Succeed(requirement);}else{context?.Fail();}}}return Task.CompletedTask;}
}
#endregion

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285627.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

業務多變的公司上云后蒸蒸日上

一、云服務器與傳統服務器的對比 1&#xff09;、傳統服務器 傳統服務器是一個獨立的硬件設備,可以理解成是一臺放在機房的高配置電腦,可根據需求安裝各種操作系統以及配置各種環境,性能也比較強大。 2&#xff09;、云服務器 云服務器是構建在硬件服務器集群之上&#xff0c;…

2016福州大學軟件工程第四次團隊作業-系統設計成績匯總

第四次團隊作業——系統設計打分統計結果如下&#xff1a; 學號組別團隊分數貢獻比例個人分數031401433606notconnected141613.83031402606606notconnected141413.33031402618606notconnected141814.34031402629606notconnected141413.33031402631606notconnected141914.590314…

[轉]在C#中像Python一樣編寫TensorFlow機器學習代碼

機器學習是一個令人激動人心的領域&#xff0c;一直有新的技術突破。研究人員不斷推動機器智能的提升&#xff0c;教機器如何聽說讀寫——這些曾經是我們人類專屬的技能。機器學習的首選語言是Python&#xff0c;最受歡迎的庫是Google的TensorFlow。幾乎所有的代碼示例都是用Py…

【土地評價與土地管理】教案 第一章:土地評價要素的選擇

文章目錄 1.1 土地構成要素與其農業利用1、光能條件2、熱量條件3、降水條件1.1 土地構成要素與其農業利用 1、光能條件 ? 光能是綠色植物進行光合作用和生物運動發展的主要能源 ? 太陽輻射、日照時數 ? 太陽輻射量隨地域和季節變化較大,導致了土地利用的多樣性和土地資源…

Blazor University (33)表單 —— EditContext、FieldIdentifiers

原文鏈接&#xff1a;https://blazor-university.com/forms/editcontext-fieldidentifiers-and-fieldstate/EditContext、FieldIdentifiers 和 FieldState請注意&#xff0c;對于那些希望了解 Blazor 如何“在后臺”工作的人來說&#xff0c;這是一個高級主題。無需了解此信息即…

Flutter之Container的寬度如何設置為手機屏幕寬度

1、問題 Container的寬度如何設置為手機屏幕寬度 2、解決辦法 width: MediaQuery.of(context).size.width,Row(children: [Container(height: 40,width: MediaQuery.of(context).size.width,// width: double.infinity,color: Colors.red,child: Row(children: [Containe…

團隊項目開發篇章8

例會時間&#xff1a;2016.11.3 整理&#xff1a;姬索肇 例會照片 每個人的工作 任務分配 我們今天與王鹿鳴學長和李云濤學長針對團隊開發過程中遇到的問題進行了討論&#xff0c;非常感謝學長們的熱心幫助&#xff0c;同時我們也被他們強大的編程能力所折服~ 在這里為學長們點…

MongoDB常用命令

啟動MongoDB$mongod --fork --logpath/data/log/r3.log--fork 允許mongod后臺運行&#xff0c;但是必須指定日志記錄文件路徑&#xff08;Enables a daemon mode that runs the mongos process in the background.&#xff09;--logpath 指定日志記錄文件路徑 導出Collections$…

【地理信息系統GIS】教案(七章全)第一章:地理信息系統概述

文章目錄 第一節 GIS基本概念第二節 GIS的組成第三節 GIS的功能第四節 GIS的發展第一節 GIS基本概念 1.1 GIS基本概念 1、信息 是用文字、數字、符號、語言、圖象、圖形等介質來表達事件、事物或現象等的內容、數量和特征,從而向人們(或系統)提供關于現實世界新的事實和知…

C# 讀寫ini文件 保存信息

/// <summary> /// 獲取本地信息 /// </summary> /// <returns></returns> private List<MHistoryKewWord> GetLocalHistoryKeyWords(){List<MHistoryKewWord> list new List<MHistoryKewWord>();var fs new FileStream("dat…

表達式的動態解析和計算,Flee用起來真香

前言在很多項目中經常會出現需要動態解析表達式和計算的場景&#xff0c;比如一些自動審核規則&#xff0c;或者是一些變量的值通過維護的公式在運行過程中動態算出&#xff1b;由于場景需求&#xff0c;都需要比較靈活的配置對應的表達式&#xff0c;然后希望在需要的時候能根…

C語言九十五之實現經典的反轉數組(通過指針或數組下標操作)

?作者簡介&#xff1a;大家好我是碼瑪莎拉蒂&#xff0c;CSDN博客專家&#x1f947;&#x1f947;&#x1f947; &#x1f4c3;個人主頁&#xff1a;個人主頁 &#x1f525;系列專欄&#xff1a;C語言試題200例 &#x1f4ac;推薦一款模擬面試、刷題神器&#x1f449; 點擊跳轉…

Linux下使用shell實現上傳linux下某個目錄下所有文件到ftp

首先我們需要搞清楚單個文件怎么上傳&#xff0c;把這個單文件上傳到ftp上的實現命名為一個:upload_to_ftp_command.sh 之后&#xff0c;需要弄清楚怎么實現遍歷一個目錄下的所有文件的&#xff0c;把這個遍歷某個目錄下的文件實現命名為&#xff1a;foeach_directory_and_uplo…

【地理信息系統GIS】教案(七章全)第二章:地理信息系統數據結構及數據獲取

文章目錄 第一節 地理空間及其表達第二節 空間數據采集第三節 屬性數據采集第四節 空間數據格式轉換第五節 空間數據質量第一節 地理空間及其表達 1.1 地理空間 地理空間上至大氣電離層,下至地幔莫霍面,是生命過程活躍的場所,也是宇宙過程對地球影響最大的區域。 地理信息…

[轉]Mysql數據庫開發的36條原則

前言 這些原則都是經歷過實戰總結而成 每一條原則背后都是血淋淋的教訓 這些原則主要是針對數據庫開發人員&#xff0c;在開發過程中務必注意 總是在災難發生后&#xff0c;才想起容災的重要性&#xff1b; 總是在吃過虧以后&#xff0c;才記得曾有人提醒過。 一、核心原則…

Kamp;R練習題6-1統計關鍵詞出現的次數

這道練習題訓練了&#xff1a; 1.結構體數組 2.二分查找 3.指針操作 ---- 都不難。但非常基礎&#xff0c;我認為非常好&#xff0c;做完了記到博客上來&#xff0c;題目見k&R&#xff0c;實現例如以下&#xff1a; /** Practice of struct array. K&R 6-1* author : w…

大話領域驅動設計——表示層及其他

概述表示層又稱用戶界面層&#xff0c;包含應用程序的頁面、組件等UI元素。服務層提供項目的HTTP API接口&#xff0c;包含MVC Controller和相關組件。ABP框架雖然在表示層提供了不少組件&#xff0c;但是這些和DDD本身沒有多少關系。而且隨著前后端分離架構的流行&#xff0c;…

C語言九十六之實現經典的字符串反轉(通過指針或下標操作)

?作者簡介&#xff1a;大家好我是碼莎拉蒂&#xff0c;CSDN博客專家&#x1f947;&#x1f947;&#x1f947; &#x1f4c3;個人主頁&#xff1a;個人主頁 &#x1f525;系列專欄&#xff1a;C語言試題200例 &#x1f4ac;推薦一款模擬面試、刷題神器&#x1f449; 點擊跳轉進…

Windows10家庭中文版沒有本地策略選項完美解決方案

Win+R,在運行中輸入:secpol.msc,查看安全設置是否打開,如下圖所示。 組策略對于優化和維護Windows系統來說十分重要。眾所周知,Windows 10家庭版中并不包含組策略,對于使用家庭版Windows的朋友來說,十分不方便。 通常情況下,如果策略組沒有打開的話,在安裝CAD等軟件時…

JavaScript總結(六)

使用DOM操縱樣式表 ? 操縱元素的Style樣式屬性&#xff08;所有的均對于CSS的內聯式&#xff09; 對于每個CSS樣式&#xff0c;Style對象都包含了一個相對應的屬性&#xff0c;只需要用到style屬性即可&#xff1b; Div.style.color "red"; //給div元素設置字體顏色…