NET问答: 如何集中化统一验证 Authorization
咨詢區
Felipe Deveza:
我自己實現了一個 basic 驗證,現在我的做法是在每一個 Action 中都提取 Request.Headers["Authorization"] 進行權限驗證。
[HttpGet] public?IActionResult?Get() {string?token?=?Request.Headers["Authorization"];//?Validate?token. }[HttpPost] public?IActionResult?Post(int?id) {string?token?=?Request.Headers["Authorization"];//?Validate?token. }請問我是否可以在某一個集中地方做 Request.Headers["Authorization"] 的全局驗證呢?
回答區
miechooy:
你可以通過自定義中間件的方式對 header 進行統一驗證,然后決定是否傳給后端的的 Controller。
中間件的邏輯大概如下:
public?class?YourMidllewareClass{public?async?Task?Invoke(HttpContext?context){string?token?=?context.Request.Headers["Authorization"];//do?the?checkingif?(token?==?null){context.Response.StatusCode?=?401;await?context.Response.WriteAsync("Access?denied!");return;}//pass?request?further?if?correctawait?_next(context);}}有了中間件之后,接下來通過 IApplicationBuilder 將其注入到Http請求管道中,參考如下代碼:
public?void?Configure(IApplicationBuilder?app,?IHostingEnvironment?env,?IConnectionManager?conn,?ILoggerFactory?loggerFactory) {app.UseMiddleware<YourMidllewareClass>(); }Matheus Lacerda:
在 ASP.NET Core 中,你可以使用內置的 AuthenticationHandler 類,詳細文檔請參考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x 。
剛好我的項目中有一個自定義驗證功能。
Startup.ConfigureServices:
Startup.Configure:
finally
這樣配置之后,所有對Controller的請求都會先經過 authentication ,如果某些 Controller 有特殊需求,可以使用 [AllowAnonymous] 忽略它。
點評區
說實話在.netcore 時代實現這種統一驗證的需求不要太簡單了,中間件這塊也是大家必須理解的基礎知識。
總結
以上是生活随笔為你收集整理的NET问答: 如何集中化统一验证 Authorization的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 如何流畅地滚动ScrollVie
- 下一篇: 基于事件驱动架构构建微服务第3部分:Pr