代码之家  ›  专栏  ›  技术社区  ›  pinale

按配置禁用ASP.NET MVC中的authorize属性

  •  0
  • pinale  · 技术社区  · 6 年前

    为了调试Pourpose,我试图禁用 [Authorize] 按配置列出的控制器属性(web.config)

    所以我把这个添加到web.config中

    <location path="ListaRichieste">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
    

    而我的控制器名是 "ListaRichiesteController"

    这似乎不起作用,所以要点是:

    • 特定的安全配置路径是否具有 [授权] 属性?
    • 正确吗?
    • 如何在不修改控制器代码的情况下禁用(临时)控制器安全性(我有很多控制器,我在一个伪微服务体系结构中)
    • 重写 [授权] 具有自定义属性的属性对于我来说不是一个可行的选项,因为随后我必须将此自定义属性添加到包含控制器的每个项目中

      通过配置或限制对每个控制器/项目/微服务代码的影响来实现这一点的任何想法

    1 回复  |  直到 6 年前
        1
  •  0
  •   LoïcR    6 年前

    您不能通过配置覆盖这个属性,在这种情况下,最好的方法是在 HttpContext.User . 您可以在启动文件中使用 #if DEBUG .

    像这样的工作可以完成:

    var username = "yourUsername";
    
    GenericIdentity MyIdentity = new GenericIdentity(username ,AuthenticationTypes.Password); 
    ClaimsIdentity objClaim = new ClaimsIdentity(AuthenticationTypes.Password, System.IdentityModel.Claims.ClaimTypes.Name, "Recipient");
    
    objClaim.Claims.Add(new Claim(System.IdentityModel.Claims.ClaimTypes.Name, username));
    objClaim.Claims.Add(new Claim(ClaimTypes.Name, username));
    objClaim.Name = username; 
    
    GenericPrincipal MyPrincipal = new GenericPrincipal(objClaim, new string[0]);
    IPrincipal Identity = (IPrincipal)MyPrincipal; 
    
    Thread.CurrentPrincipal = HttpContext.User = Identity;
    

    这可能不是最安全的方法,也不是最好的方法,但它可能是最适合你的情况。

    推荐文章