NET问答: 如何集中化统一验证 Authorization
咨詢區(qū)
Felipe Deveza:
我自己實(shí)現(xiàn)了一個(gè) basic 驗(yàn)證,現(xiàn)在我的做法是在每一個(gè) Action 中都提取 Request.Headers["Authorization"] 進(jìn)行權(quán)限驗(yàn)證。
[HttpGet] public?IActionResult?Get() {string?token?=?Request.Headers["Authorization"];//?Validate?token. }[HttpPost] public?IActionResult?Post(int?id) {string?token?=?Request.Headers["Authorization"];//?Validate?token. }請問我是否可以在某一個(gè)集中地方做 Request.Headers["Authorization"] 的全局驗(yàn)證呢?
回答區(qū)
miechooy:
你可以通過自定義中間件的方式對 header 進(jìn)行統(tǒng)一驗(yàn)證,然后決定是否傳給后端的的 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 中,你可以使用內(nèi)置的 AuthenticationHandler 類,詳細(xì)文檔請參考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x 。
剛好我的項(xiàng)目中有一個(gè)自定義驗(yàn)證功能。
Startup.ConfigureServices:
Startup.Configure:
finally
這樣配置之后,所有對Controller的請求都會(huì)先經(jīng)過 authentication ,如果某些 Controller 有特殊需求,可以使用 [AllowAnonymous] 忽略它。
點(diǎn)評區(qū)
說實(shí)話在.netcore 時(shí)代實(shí)現(xiàn)這種統(tǒng)一驗(yàn)證的需求不要太簡單了,中間件這塊也是大家必須理解的基礎(chǔ)知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的NET问答: 如何集中化统一验证 Authorization的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 如何流畅地滚动ScrollVie
- 下一篇: 基于事件驱动架构构建微服务第3部分:Pr