發表文章

目前顯示的是 1月, 2023的文章

淺談有狀態跟無狀態的認證(登入)_Stateful vs Stateless Authentication

圖片
  在前幾篇我們知道JWT主要用於授權(Authorization) 而非使用者的身分認證(Authentication) 身分認證(Authentication) 就是指透過帳號或者使用者名稱跟密碼來驗證當前使用者的身分 講白話一點就是 用戶登入的功能 授權(Authorization) 代表當使用者登入後是否有足夠權限訪問特定某些資源 而通常web api回傳若無足夠授權 大多返回401 Unauthorized Stateful vs Stateless Authentication Stateful  傳統的登入機制也就是具有狀態的(Session-Based Authentication) 又可被稱作cookie-based Auth 使用者clinet端的Browser當進行LOGIN 表單提交後 會在Server端去建立與保存Session 再藉由cookie攜帶著session id 返回到Clinet端(session id會保存在前端cookie當中) 接著當登入後的用戶要訪問資源就會 攜帶包含session id的cookie再打到server端請求 Stateless 又稱 Token-Based Authentication (例如:JWT) 使用者clinet端的Browser當進行LOGIN 表單提交後 會於server針對跟身分認證有關的屬性(信箱,帳號,權限,通常不會包含密碼)作加密處理 並返回給clinet端一個token(jwt) clinet接受後可能會保存於cookie或local storage 而且生成的這個token並不需要保存於server只存於clinet!(server完全不需要保存任何狀態) 利於分散式架構的部屬 接著當登入後的用戶要訪問資源就會將token封裝在http header當中 在發送請求給server做處理 server端接收到後會使用自己的私鑰來對請求文件做解密,用相同密碼來驗證JWT。 解密成功而且資料也仍在有效期限內則代表用戶確實已登入 若JWT描述的此用戶權限確實允許訪問特定資源就返回給clinet。 Ref: https://github.com/facg3/Stateless-vs-stateful-authentication https://ithelp.ithome.com.tw

採購單位職能與系統相關導入的方向

圖片
針對供應商的供應鏈資訊獲取 可能某公司某品牌有哪些供應商 可以到 importyeti https://www.importyeti.com/ 比方可以找蘋果的料件供應廠商 他這個平台會去收集和做完整數據化分析顯示 或者換找福特汽車 也可以顯示一些海運還是空運的不同年月長條圖資訊趨勢 一般系統化可以著手部分 可能針對流程導入系統整合卡控  KPI量化或某些數據可視化(有哪些計算公式數據百分比) 有哪些報表(無紙化)的產生 採購部門角色在公司中的定位 很像家裡的家庭主夫/婦 只要有需要購物就需要錙銖必較 錢花在刀口 也很像超商應有盡有 更像宅急便 也要想辦法把原物料追供應商貨運回公司 所以採購這個角色在公司其實身兼如下職責 廠商開發 供應商的陌生開發:要去找尋合適價格優而且品質不差的供應商 甚至交款日可以較晚(涉及到半成品有委外諸如此類的狀況)等等 沒買過的一定堅守貨比三家找到更佳的(交期快、價格便宜)廠商來做交易 料況追蹤 採購單一送出採購就需要去追廠商到底有沒有準時交貨 議價 採購跟廠商購買可能去做半成品或料件等成本 價格壓低等等藉此來提升獲利 採購通常會面臨到的困難 交期短、急單多、客製化多 公司期望可以不要斷料 甚至可以找到最便宜的料 採購的5R 1.Right Time 適時 要在適當時間進行採買(不可太早也不能太晚) 廠商是否可以準時達交 一些評估基準 採購進貨準時達交率 採購L/T天數降低 (L/T:Lead time前置時間,指採購從訂貨日開始到供應商送貨間的時間長短,是指一段作業流程區間,也有別稱為採購提前期;交期則是確切的交貨時間。舉例來說,於我司的客戶而言,交期是公司與客戶談定的交貨時間,但從開始於我司下訂,到我司交付客戶貨物的這段期間,都可稱為L/T。) 2.Right Quality(適值) 進貨的品質要OK 不良率不可以太高 一些評估基準 進料退貨批次率 進貨特採率 3.Right Quantity(適量) 廠商可能凹要買1000個才有打折但我們可能是針對有單才購買相應量來製造 若買多了存放在倉儲太久可能會壞掉諸如此類狀況 一些評估基準 進貨超收批次比率 進貨短交批次比率 存貨天數目標達成率 MOQ料件改善件數(Minimum Order Quantity,最少下單數量/最少訂購量) 4.Right Price(適價) 一些評估基準 實際採

.Net Core Web Api_筆記34_服務生命週期解析

圖片
  以下圖中Instance若背景色(深淺) 不同則代表不同獨立的Service Instance 物件實體 生命週期: Transient:每次被請求都會創建新的實體 Transient objects are always different; a new instance is provided to every controller and every service. 通常針對比較輕量無狀態保存需求的服務很適合配置這類生命週期 Scoped:每次Web請求會創建一個新實體,直到web請求結束就銷毀。 Scoped objects are the same within a request, but different across different requests. 每一個請求都會建立一次獨立的服務物件實體,參與單一個請求中所有middleware,mvc控制器 通常會針對EFCore Context ,資料庫上下文的存取服務制定此生命週期 Singleton:一旦被創建實體就會持續一直用,直到應用停止才銷毀。 Singleton objects are the same for every object and every request. 被建立的服務類別會被存在內存當中,並於整個應用中被重複利用。 通常會針對物件實體化成本較高的服務配置為Singleton生命週期,讓他只初始化一次。 ServiceType Class In the capacityof same HttpRequest Different Http Request AddSingleton The same Instance of repository served The same Instance of repository served AddScoped Same Instance Different Instance AddTransient Every time New Instance Every time New Instance

.Net Core Web Api_筆記33_採用JWT的授權

圖片
  用戶首次登入時,透過傳輸賬號密碼驗證身份,驗證成功後,Server產生的 Token 回應使用者。使用者後續請求只需要傳送 Token,服務器只需對 Token 進行校驗來確認身份。 在此一樣新增一個新專案來做JWT 實作 這邊在此模板的Controller上加上這個修飾[Authorize] 主要代表針對當前這個控制器下所有Action預設都是被套用權限授權控管的 都需要登入後判定有無權限才可存取 跟上一篇一樣操作 那一樣至 微軟github範本去搜查 https://github.com/dotnet/AspNetCore.Docs/blob/860ce848ef/aspnetcore/grpc/authn-and-authz/sample/6.x/Ticketer/Program.cs Program.cs範本配置程式碼 可以將範例程式碼抄過來做測試微調 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 using System.IdentityModel.Tokens.Jwt ; using System.Security.Claims ; using Microsoft.AspNetCore.Authentication.JwtBearer ; using Microsoft.IdentityModel.Tokens ; using Ticketer.Services ; using Ticketer ; JwtSecurityTokenHandler JwtTokenHandler = new JwtSecurityTokenHandler(); SymmetricSecurityKey SecurityKey = new SymmetricSecurityKey(Guid.NewGuid().ToByteArray(

.Net Core Web Api_筆記32_採用cookie的身分驗證與授權

圖片
  認證方式基本上 可以分為 Basic 認證 也就是將帳號:密碼進行Base64 編碼 Digest認證 也就是MD5 Bearer認證 ->JWT採用 這裡新建好一個api專案後 目前這個資源請求是可被存取的 回傳200 OK 這邊可以嘗試在此模板的Controller上加上這個修飾[Authorize] 主要代表針對當前這個控制器下所有Action預設都是被套用權限授權控管的 都需要登入後判定有無權限才可存取 範例程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 using Microsoft.AspNetCore.Authorization ; using Microsoft.AspNetCore.Mvc ; namespace CookieAuth.Controllers { [ApiController] [Route("[controller] ")] [Authorize] public class WeatherForecastController : ControllerBase { private static readonly string [] Summaries = new [] { "Freezing" , "Bracing" , "Chilly" , "Cool" , "Mild" , "Warm" , "Balmy" , "Hot" , "Sweltering" , "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastCont