黑客业务

24小时接单的黑客,黑客业务,黑客怎么找,网络黑客,黑客技术

深度解读.NET 5授权中间件的执行策略

本文转载自微信公众号「全栈码农画像」,作者小码甲。转载本文请联系全栈码农画像微信官方账号。

前文提要

2021.1我在月份写了一篇《这不是吗?.NET5 的bug? 在线求锤,

它讲述了我在实现[全局授权访问 匿名访问] 遇到的技术困惑: [匿名访问,如何通过认证过程?

博客园某大佬的看法:

大致意思是 :无论是匿名访问还是鉴权访问,都要先识别用户身份,再决定跳过授权/应用授权![身份访问 MVC Login]这一幕可以证明这一观点。

头脑风暴

后来,我仔细检查了授权的源代码,发现它不完整。请仔细观察我原文的示例,

还有一个端点路由[健康检查],加上端点[AllowAnonymous]

  • endpoints.MapHealthChecks("/healthz").AllowAnonymous().WithDisplayName("healthz");
  • 从授权中间件源代码的角度来看,该端点尚未进入认证流程。

    因此,官方源代码能否进入认证逻辑:关键是看终点是否包含授权策略:

  • varauthorizeData=endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>()??Array.Empty<IAuthorizeData>();
  • varpolicy=awaitAuthorizationPolicy.CombineAsync(_policyProvider,authorizeData);
  • if(policy==null)
  • {
  • await_next(context);
  • return;
  • }
  • 直接应用健康检查端点[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 属于授权范畴。

  • >Authorizationcomponents,includingtheAuthorizeAttributeandAllowAnonymousAttributeattributes,arefoundintheMicrosoft.AspNetCore.Authorizationnamespace.
  • 就这样吧,匿名访问并不意味着"无需认证";匿名访问是"授权" 控制范围; 授权的前提是先认证。

       
    • 评论列表:
    •  酒奴方且
       发布于 2022-05-31 10:15:09  回复该评论
    • on requires an authentication mechanism. Authentication is the process of ascertaining who a user i
    •  莣萳旧我
       发布于 2022-05-31 12:35:36  回复该评论
    • Metadata<IAuthorizeData>()??Array.Empty<IAuthorizeData>();varpolicy=awaitAuthorizationPolicy.CombineAsync(_

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.