成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深度解讀.NET 5授權中間件的執行策略

安全 應用安全
講述了我在實現[全局授權訪問+特例匿名訪問] 遇到的技術困惑: [特例匿名訪問,怎么走了認證流程?]。

[[380455]]

本文轉載自微信公眾號「全棧碼農畫像」,作者小碼甲。轉載本文請聯系全棧碼農畫像公眾號。

前文提要

2021.1月份我寫了一個《這難道不是.NET5 的bug? 在線求錘?》,

講述了我在實現[全局授權訪問+特例匿名訪問] 遇到的技術困惑: [特例匿名訪問,怎么走了認證流程?]。

博客園上某大佬的看法:

 

大概的意思是說 :不管是匿名訪問還是鑒權訪問,均先識別用戶身份,再決定跳過授權/應用授權![有身份訪問 MVC Login]這個場景可以佐證這個看法。

頭腦風暴

后來我又仔細檢視看了授權的源代碼,發現并不完整, 請看官仔細觀察我原文的示例,

端點路由還有一個[健康檢查],端點加上了[AllowAnonymous]

  1. endpoints.MapHealthChecks("/healthz").AllowAnonymous().WithDisplayName("healthz"); 

這個端點并沒有進入認證流程,從授權中間件源碼上看也是如此。

故官方源碼是否能進入認證邏輯:關鍵是看端點上是否包含授權策略:

  1. var authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();    
  2.   var policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData); 
  3.   if (policy == null
  4.  { 
  5.      await _next(context); 
  6.      return
  7.   } 

健康檢查端點直接應用了[AllowAnonymous](實際上你可以不加), 這樣就沒有授權策略(policy= null),這個時候自然跳過后續,進入業務邏輯。

甚至, 你可以這樣寫:endpoints.MapControllers().RequireAuthorization().AllowAnonymous().WithDisplayName("default");

這樣的代碼也要進入認證邏輯,因為它包含了授權聲明。

根據以上分析,.NET 5授權中間件的流程是這樣的:

 

The official said:

Authorization is orthogonal and independent from authentication. However, authorization requires an authentication mechanism. Authentication is the process of ascertaining who a user is. Authentication may create one or more identities for the current user.

授權是正交的并且獨立于驗證。但是,授權需要身份驗證機制。身份驗證是確定用戶身份的過程。認證可以為當前用戶創建一個或多個身份。

思緒整理

我試圖以一種流暢的、能自然其說的思路來理解官方的設計理念。

我們捋一捋:

當我“樸素的需求”到達端點時,端點第一時間拿到平鋪的所有元數據metadata:

(直接附加在端點上的聲明信息 & MVC上附加的特性 & 全局附加的過濾器)

 

針對這種矛盾體元數據, 確實有不同的設計策略:

我理解的匿名優先:不需要認證;

官方認定的匿名優先,是在身份登記的前提下,匿名訪問優先。

也許我將”匿名優先“與“無需認證”聯系在一起,并不正確。 官方可是將AllowAnonymous 放在授權的范疇。

  1. >  Authorization components, including the AuthorizeAttribute and AllowAnonymousAttribute attributes, are found in the Microsoft.AspNetCore.Authorization namespace. 

就這樣吧, 匿名訪問不表示"無需認證";匿名訪問是"授權" 的控制范疇; 授權的前提是先認證。

 

責任編輯:武曉燕 來源: 全棧碼農畫像
相關推薦

2016-11-11 21:00:46

中間件

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發CRUD

2018-02-01 10:19:22

中間件服務器系統

2018-07-29 12:27:30

云中間件云計算API

2015-02-07 21:52:45

PaaS中間件

2013-03-13 10:37:22

中間件Windows

2018-05-02 16:23:24

中間件RPC容器

2019-08-12 08:00:00

ASP.NetASP.Net Cor編程語言

2023-10-18 07:32:27

中間件技術HTTP請求

2012-11-30 10:21:46

移動中間件

2009-06-16 15:55:06

JBoss企業中間件

2023-10-24 07:50:18

消息中間件MQ

2023-06-29 10:10:06

Rocket MQ消息中間件

2021-06-15 10:01:02

應用系統軟件

2018-07-25 19:44:27

數據庫MySQL中間件

2022-11-18 07:54:02

Go中間件項目

2024-07-12 08:19:53

2012-09-13 15:48:16

云計算中間件

2015-12-21 14:56:12

Go語言Http網絡協議
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av黄色免费| 国产福利在线视频 | 国产成人在线视频 | 日日干天天操 | 一本一道久久a久久精品蜜桃 | 日韩中文字幕在线观看视频 | 久在线视频 | 日本国产高清 | 国产精品一区二区在线播放 | 亚洲视频区 | 天天看天天摸天天操 | 久久亚洲一区 | 色综合久久88色综合天天 | 成人 在线 | 欧美一级在线 | 日韩视频在线一区 | 免费观看av网站 | 中文字幕第一页在线 | 国产精品黄色 | 一级欧美 | 在线免费小视频 | 精品视频国产 | 成年人黄色免费视频 | 在线免费观看色 | 欧美亚洲激情 | 国产精品一区免费 | 国产乱肥老妇国产一区二 | 欧美1区2区 | 日韩一区二区三区四区五区 | 最新日韩欧美 | 亚洲色在线视频 | 国产中文一区二区三区 | 毛片一级片 | 男女免费观看在线爽爽爽视频 | 亚洲三级国产 | 精品蜜桃一区二区三区 | 国产精品亚洲一区 | 日韩免| 久久久不卡网国产精品一区 | 欧美激情久久久 | 欧美h视频 |