Ⅰ .netcorewpf可以反編譯
netcorewpf可以反編譯。wpf、winform等框架生成的執行文件是可以被ILSPY等軟體反編譯的,只要將exe文件拖到ILSPY,源碼就會被可以反編譯。
Ⅱ asp.net婧愮爜錛堟繁鍏ユ帰絀跺叾鍐呴儴鏈哄埗錛
ASP.NET鏄寰杞鍏鍙告帹鍑虹殑涓嬈網eb搴旂敤紼嬪簭寮鍙戞嗘灦錛屽畠鎷ユ湁涓板瘜鐨勫姛鑳藉拰寮哄ぇ鐨勬墿灞曟э紝鍙浠ュ府鍔╁紑鍙戣呭揩閫熸瀯寤洪珮鏁堢殑Web搴旂敤紼嬪簭銆傝孉SP.NET鐨勬簮鐮佸垯鏄鍏跺唴閮ㄦ満鍒剁殑鏍稿績錛岄氳繃娣卞叆鎺㈢┒ASP.NET婧愮爜錛屾垜浠鍙浠ユ洿濂藉湴浜嗚ВASP.NET鐨勫伐浣滃師鐞嗗拰瀹炵幇鏂瑰紡錛屼粠鑰屾洿濂藉湴搴旂敤ASP.NET榪涜學eb寮鍙戙
鑾峰彇ASP.NET婧愮爜
棣栧厛錛屾垜浠闇瑕佽幏鍙朅SP.NET鐨勬簮鐮併侫SP.NET鐨勬簮鐮佹槸寮婧愮殑錛屽彲浠ラ氳繃GitHub鑾峰彇銆傚叿浣撴搷浣滄ラゅ備笅錛
1.鎵撳紑GitHub緗戠珯錛屾悳緔⑩渁spnet鈥濓紝榪涘叆aspnet浠撳簱欏甸潰銆
2.鍦ㄤ粨搴撻〉闈涓錛岀偣鍑燴淐loneordownload鈥濇寜閽錛岄夋嫨鈥淒ownloadZIP鈥濋夐」錛屼笅杞絘spnet婧愮爜鍘嬬緝鍖呫
3.瑙e帇涓嬭澆鐨勫帇緙╁寘錛屽嵆鍙鑾峰彇aspnet婧愮爜銆
ASP.NET婧愮爜緇撴瀯
ASP.NET婧愮爜鏄涓涓宸ㄥぇ鐨勪唬鐮佸簱錛屽寘鍚浜嗚稿氬瓙欏圭洰鍜屾ā鍧椼傚叾涓錛屾渶鏍稿績鐨勫瓙欏圭洰鏄鈥渁spnetcore鈥濆拰鈥渁spnetwebstack鈥濄
鈥渁spnetcore鈥濇槸ASP.NETCore鐨勬簮鐮侊紝瀹冩槸ASP.NET鐨勬渶鏂扮増鏈錛屽叿鏈夋洿楂樼殑鎬ц兘鍜屾洿濂界殑璺ㄥ鉤鍙版敮鎸併
鈥渁spnetwebstack鈥濇槸ASP.NETWebAPI鐨勬簮鐮侊紝瀹冩槸ASP.NET鐨刉ebAPI妗嗘灦錛岀敤浜庢瀯寤篟ESTfulWeb鏈嶅姟銆
姝ゅ栵紝ASP.NET婧愮爜榪樺寘鍚浜嗚稿氬叾浠栫殑瀛愰」鐩鍜屾ā鍧楋紝濡傗淓ntityFramework鈥濄佲淪ignalR鈥濄佲淚dentity鈥濈瓑錛岃繖浜涘瓙欏圭洰鍜屾ā鍧楅兘鏄疉SP.NET鐨勯噸瑕佺粍鎴愰儴鍒嗐
ASP.NET婧愮爜瑙f瀽
鍦ㄦ繁鍏ユ帰絀禔SP.NET婧愮爜涔嬪墠錛屾垜浠闇瑕佸厛浜嗚ВASP.NET鐨勫伐浣滃師鐞嗗拰鍩烘湰姒傚康銆
ASP.NET鏄涓涓鍩轟簬MVC錛圡odel-View-Controller錛夋ā寮忕殑Web搴旂敤紼嬪簭妗嗘灦錛屽畠鐨勫伐浣滃師鐞嗗彲浠ョ畝鍗曞湴鎻忚堪涓猴細
1.瀹㈡埛絝鍚戞湇鍔″櫒鍙戦佽鋒眰銆
2.鏈嶅姟鍣ㄦ帴鏀惰鋒眰錛屾牴鎹璇鋒眰鐨刄RL鍜孒TTP鏂規硶閫夋嫨瀵瑰簲鐨凜ontroller銆
3.Controller鎺ユ敹璇鋒眰錛屾牴鎹璇鋒眰鐨勫弬鏁板拰涓氬姟閫昏緫鐢熸垚Model銆
4.Controller灝哅odel浼犻掔粰View銆
5.View灝哅odel娓叉煋鎴怘TML欏甸潰錛屽苟榪斿洖緇欏㈡埛絝銆
鍦ˋSP.NET涓錛孋ontroller鍜孷iew閮芥槸鐢卞紑鍙戣呯紪鍐欑殑浠g爜錛岃孧odel鍒欏彲浠ユ槸浠庢暟鎹搴撱佹枃浠剁郴緇熴佺紦瀛樼瓑鏁版嵁婧愪腑鑾峰彇鐨勬暟鎹銆
ASP.NET婧愮爜鍒嗘瀽
浜嗚В浜咥SP.NET鐨勫伐浣滃師鐞嗗拰鍩烘湰姒傚康涔嬪悗錛屾垜浠鍙浠ュ紑濮嬫繁鍏ユ帰絀禔SP.NET婧愮爜浜嗐
ASP.NET婧愮爜鏄涓涓闈炲父搴炲ぇ鐨勪唬鐮佸簱錛屾兜鐩栦簡璁稿氫笉鍚岀殑妯″潡鍜屽姛鑳姐傚湪榪欓噷錛屾垜浠鍙鑳藉瑰叾涓鐨勪竴閮ㄥ垎榪涜岀畝鍗曠殑浠嬬粛銆
璺鐢
鍦ˋSP.NET涓錛岃礬鐢辨槸灝嗚鋒眰鐨刄RL鏄犲皠鍒板瑰簲鐨凜ontroller鍜孉ction鐨勮繃紼嬨侫SP.NET鐨勮礬鐢辯郴緇熸槸鐢盇SP.NETMVC妗嗘灦鎻愪緵鐨勶紝瀹冨彲浠ユ牴鎹璇鋒眰鐨刄RL鍜孒TTP鏂規硶閫夋嫨瀵瑰簲鐨凜ontroller鍜孉ction銆
鍦ˋSP.NET婧愮爜涓錛岃礬鐢辯郴緇熺殑鏍稿績浠g爜浣嶄簬鈥淢icrosoft.AspNetCore.Routing鈥濆懡鍚嶇┖闂翠腑銆傚叾涓錛屾渶閲嶈佺殑綾繪槸鈥淩outeBuilder鈥濆拰鈥淩outeCollection鈥濄
鈥淩outeBuilder鈥濈被鐢ㄤ簬瀹氫箟璺鐢辮勫垯錛屽畠鎻愪緵浜嗕竴緋誨垪鏂規硶錛屽彲浠ユ牴鎹涓嶅悓鐨刄RL妯℃澘銆丠TTP鏂規硶銆佽鋒眰鍙傛暟絳夋潯浠跺畾涔夎礬鐢辮勫垯銆
鈥淩outeCollection鈥濈被鐢ㄤ簬瀛樺偍鎵鏈夌殑璺鐢辮勫垯錛屽畠鎻愪緵浜嗕竴緋誨垪鏂規硶錛屽彲浠ユ牴鎹璇鋒眰鐨刄RL鍜孒TTP鏂規硶鏌ユ壘瀵瑰簲鐨凜ontroller鍜孉ction銆
涓闂翠歡
鍦ˋSP.NET涓錛屼腑闂翠歡鏄涓縐嶅勭悊HTTP璇鋒眰鍜屽搷搴旂殑鏈哄埗銆侫SP.NET鐨勪腑闂翠歡緋葷粺鏄鐢盇SP.NETCore妗嗘灦鎻愪緵鐨勶紝瀹冨彲浠ュ皢HTTP璇鋒眰鍜屽搷搴斾紶閫掔粰澶氫釜涓闂翠歡錛屾瘡涓涓闂翠歡閮藉彲浠ュ硅鋒眰鍜屽搷搴旇繘琛屽勭悊銆
鍦ˋSP.NET婧愮爜涓錛屼腑闂翠歡緋葷粺鐨勬牳蹇冧唬鐮佷綅浜庘淢icrosoft.AspNetCore.Builder鈥濆懡鍚嶇┖闂翠腑銆傚叾涓錛屾渶閲嶈佺殑綾繪槸鈥淎pplicationBuilder鈥濄
鈥淎pplicationBuilder鈥濈被鐢ㄤ簬瀹氫箟涓闂翠歡綆¢亾錛屽畠鎻愪緵浜嗕竴緋誨垪鏂規硶錛屽彲浠ュ皢澶氫釜涓闂翠歡鎸夌収欏哄簭娣誨姞鍒扮¢亾涓錛屽苟灝咹TTP璇鋒眰鍜屽搷搴斾紶閫掔粰榪欎簺涓闂翠歡榪涜屽勭悊銆
渚濊禆娉ㄥ叆
鍦ˋSP.NET涓錛屼緷璧栨敞鍏ユ槸涓縐嶅皢綾諱箣闂寸殑渚濊禆鍏崇郴浠庝唬鐮佷腑鍒嗙誨嚭鏉ョ殑鏈哄埗銆侫SP.NET鐨勪緷璧栨敞鍏ョ郴緇熸槸鐢盇SP.NETCore妗嗘灦鎻愪緵鐨勶紝瀹冨彲浠ヨ嚜鍔ㄥ皢渚濊禆鍏崇郴娉ㄥ叆鍒扮被涓錛屼粠鑰岀畝鍖栦唬鐮佺殑緙栧啓鍜岀淮鎶ゃ
鍦ˋSP.NET婧愮爜涓錛屼緷璧栨敞鍏ョ郴緇熺殑鏍稿績浠g爜浣嶄簬鈥淢icrosoft.Extensions.DependencyInjection鈥濆懡鍚嶇┖闂翠腑銆傚叾涓錛屾渶閲嶈佺殑綾繪槸鈥淪erviceCollection鈥濆拰鈥淪erviceProvider鈥濄
鈥淪erviceCollection鈥濈被鐢ㄤ簬瀹氫箟渚濊禆鍏崇郴錛屽畠鎻愪緵浜嗕竴緋誨垪鏂規硶錛屽彲浠ュ皢綾誨拰鍏跺瑰簲鐨勬帴鍙f敞鍐屽埌渚濊禆娉ㄥ叆瀹瑰櫒涓銆
鈥淪erviceProvider鈥濈被鐢ㄤ簬鑾峰彇渚濊禆鍏崇郴錛屽畠鎻愪緵浜嗕竴緋誨垪鏂規硶錛屽彲浠ユ牴鎹綾葷殑鎺ュ彛鑾峰彇鍏跺瑰簲鐨勫疄渚嬨
Ⅲ ASP.NET Core認證原理和實現
通常在應用程序中,安全分為前後兩個步驟:驗證和授權。驗證負責檢查當前請求者的身份,而授權則根據上一步得到的身份決定當前請求者是否能夠訪問期望的資源。
既然安全從驗證開始,我們也就從驗證開始介紹安全。
我們先從比較簡單的場景開始考慮,例如在 Web API 開發中,需要驗證請求方是否提供了安全令牌,安全令牌是否有效。如果無效,那麼 API 端應該拒絕提供服務。在命名空間 Microsoft.AspNetCore.Authentication 下,定義關於驗證的核心介面。對應的程序集是 Microsoft.AspNetCore.Authentication.Abstractions.dll。
在 ASP.NET 下,驗證中包含 3 個基本操作:
驗證操作負責基於當前請求的上下文,使用來自請求中的信息,例如請求頭、Cookie 等等來構造用戶標識。構建的結果是一個 AuthenticateResult 對象,它指示了驗證是否成功,如果成功的話,用戶標識將可以在驗證票據中找到。
常見的驗證包括:
在授權管理階段,如果用戶沒有得到驗證,但所期望訪問的資源要求必須得到驗證的時候,授權服務會發出質詢。例如,當匿名用戶訪問受限資源的時候,或者當用戶點擊登錄鏈接的時候。授權服務會通過質詢來相應用戶。
例如
質詢操作應該讓用戶知道應該使用何種驗證機制來訪問請求的資源。
在授權管理階段,如果用戶已經通過了驗證,但是對於其訪問的資源並沒有得到許可,此時會使用拒絕操作。
例如:
拒絕訪問處理應該讓用戶知道:
在這個場景下,可以看到,驗證需要提供的基本功能就包括了驗證和驗證失敗後的拒絕服務兩個操作。在 ASP.NET Core 中,驗證被稱為 Authenticate,拒絕被稱為 Forbid。 在供消費者訪問的網站上,如果我們希望在驗證失敗後,不是像 API 一樣直接返回一個錯誤頁面,而是將用戶導航到登錄頁面,那麼,就還需要增加一個操作,這個操作的本質是希望用戶再次提供安全憑據,在 ASP.NET Core 中,這個操作被稱為 Challenge。這 3 個操作結合在一起,就是驗證最基本的要求,以介面形式表示,就是 IAuthenticationHandler 介面,如下所示:
驗證的結果是一個 AuthenticateResult 對象。值得注意的是,它還提供了一個靜態方法 NoResult() 用來返回沒有得到結果,靜態方法 Fail() 生成一個表示驗證異常的結果,而 Success() 成功則需要提供驗證票據。
通過驗證之後,會返回一個包含了請求者票據的驗證結果。
在 GitHub 中查看 AuthenticateResult 源碼
那麼驗證的信息來自哪裡呢?除了前面介紹的 3 個操作之外,還要求一個初始化的操作 Initialize,通過這個方法來提供當前請求的上下文信息。
在 GitHub 中查看 IAuthenticationHandler 定義
有的時候,我們還希望提供登出操作,增加登出操作的介面被稱為 IAuthenticationSignOutHandler。
在 GitHub 中查看 IAuthenticationSignOutHandler 源碼
在登出的基礎上,如果還希望提供登錄操作,那麼就是 IAuthenticationSignInHandler 介面。
在 GitHub 中查看 IAuthenticationSignInHandler 源碼
直接實現介面還是比較麻煩的,在命名空間 Microsoft.AspNetCore.Authentication 下,微軟提供了抽象基類 AuthenticationHandler 以方便驗證控制器的開發,其它控制器可以從該控制器派生,以取得其提供的服務。
通過類的定義可以看到,它使用了泛型。每個控制器應該有一個對應該控制器的配置選項,通過泛型來指定驗證處理器所使用的配置類型,在構造函數中,可以看到它被用於獲取對應的配置選項對象。
在 GitHub 中查看 AuthenticationHandler 源碼
通過 InitializeAsync(),驗證處理器可以獲得當前請求的上下文對象 HttpContext。
最終,作為抽象類的 ,希望派生類來完成這個驗證任務,抽象方法 HandleAuthenticateAsync() 提供了擴展點。
驗證的結果是一個 AuthenticateResult。
而拒絕服務則簡單的多,直接在這個抽象基類中提供了默認實現。直接返回 HTTP 403。
剩下的一個也一樣,提供了默認實現。直接返回 HTTP 401 響應。
對於 JWT 來說,並不涉及到登入和登出,所以它需要從實現 IAuthenticationHandler 介面的抽象基類 AuthenticationHandler 派生出來即可。從 AuthenticationHandler 派生出來的 JwtBearerHandler 實現基於自己的配置選項 JwtBearerOptions。所以該類定義就變得如下所示,而構造函數顯然配合了抽象基類的要求。
在 GitHub 中查看 JwtBearerHandler 源碼
真正的驗證則在 HandleAuthenticateAsync() 中實現。下面的代碼是不是就很熟悉了,從請求頭中獲取附帶的 JWT 訪問令牌,然後驗證該令牌的有效性,核心代碼如下所示。
在 GitHub 中查看 JwtBearerHandler 源碼
在 ASP.NET Core 中,你可以使用各種驗證處理器,並不僅僅只能使用一個,驗證控制器需要一個名稱,它被看作該驗證模式 Schema 的名稱。Jwt 驗證模式的默認名稱就是 "Bearer",通過字元串常量 JwtBearerDefaults.AuthenticationScheme 定義。
在 GitHub 中查看 JwtBearerDefaults 源碼
最終通過 AuthenticationBuilder 的擴展方法 AddJwtBearer() 將 Jwt 驗證控制器注冊到依賴注入的容器中。
在 GitHub 中查看 JwtBearerExtensions 擴展方法源碼
一種驗證處理器,加上對應的驗證配置選項,我們再為它起一個名字,組合起來就成為一種驗證架構 Schema。在 ASP.NET Core 中,可以注冊多種驗證架構。例如,授權策略可以使用架構的名稱來指定所使用的驗證架構來使用特定的驗證方式。在配置驗證的時候,通常設置默認的驗證架構。當沒有指定驗證架構的時候,就會使用默認架構進行處理。
還可以
注冊的驗證模式,最終變成 AuthenticationScheme,注冊到依賴注入服務中。
在 GitHub 中查看 AuthenticationScheme 源碼
各種驗證架構被保存到一個 IAuthenticationSchemeProvider 中。
在 GitHub 中查看 IAuthenticationSchemeProvider 源碼
最終的使用是通過 來實現的,通過一個驗證模式的字元串名稱,可以取得所對應的驗證控制器。
在 GitHub 中查看 源碼
它的默認實現是 AuthenticationHandlerProvider,源碼並不復雜。
在 GitHub 中查看 AuthenticationHandlerProvider 源碼
驗證中間件的處理就沒有那麼復雜了。
找到默認的驗證模式,使用默認驗證模式的名稱取得對應的驗證處理器,如果驗證成功的話,把當前請求用戶的主體放到當前請求上下文的 User 上。
裡面還有一段特別的代碼,用來找出哪些驗證處理器實現了 ,並依次調用它們,看看是否需要提取終止請求處理過程。
在 GitHub 中查看 AuthenticationMiddle 源碼
Ⅳ 個人web開發asp.netcore和php7之間如何選擇
看到上面兩個對.net的評論忍不住來答一下
PHP不太清楚,但現在的ASP.NETCore已今非昔比。
首先是運行效率上,ASP.NETCore很快。因為.NETCore是編譯運行的,執行速度遠高於解釋執行的PHP,尤沒手其是在多線程/非同步環境下。
上圖是主流編程語言運行效率橫評,可以看出,.NETCore很明顯是屬於第二梯隊,性能僅次於C/C++這種直接編譯成匯編的語言。而PHP則是
第五梯隊,甚至還不如node.js
跨平台不用說了,都是三跨。
生態上,雖然.NETCore目前還比不上Java的生態,但nuget也不是吃素的。現成的輪子還是比較多的。至於PHP的生態,不太清楚,但應該不會差
很多Java開發者比較喜歡抨擊.net開發者,以為.net只需要拖拖控制項,寫一寫event就行了。其實不然,這種拖控制項的開發方式(webform)早已淘汰。現在的ASP.NETCore早已現代化。
ASP.NETCore優點:
生成WebUI和WebAPI的統一場景。
針對可測試性進行構建。
RazorPages可以使基於頁面的編碼方式更簡單高效。
能夠在Windows、macOS和Linux上進行開發和運行。
開放源代碼和以社區為中心。
集成新式客戶端框架和開發枯伍嫌工作流。
基於環境的雲就緒配置系統。
內置依賴項注入。
輕型的高性能模塊化HTTP請求管道。
能夠在IIS、Nginx、Apache、Docker上進行託管或在自己的進程中進行自託管。
基於.NETCore運行時,可以使用並行應用版本控制。
由於答主沒用過PHP,就不對PHP做過多評價,但PHP在橘桐目前也是炙手可熱的語言之一,也是很多大公司的選擇,而且PHP最大的優勢就在於開發效率和用人成本上。