Welcome to YARP - 5.身份验证和授权

这篇具有很好参考价值的文章主要介绍了Welcome to YARP - 5.身份验证和授权。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Welcome to YARP - 1.认识YARP并搭建反向代理服务

Welcome to YARP - 2.配置功能

  • 2.1 - 配置文件(Configuration Files)
  • 2.2 - 配置提供者(Configuration Providers)
  • 2.3 - 配置过滤器(Configuration Filters)

Welcome to YARP - 3.负载均衡

Welcome to YARP - 4.限流

Welcome to YARP - 5.身份验证和授权

Welcome to YARP - 6.压缩、缓存

Welcome to YARP - 7.目标健康检查

Welcome to YARP - 8.分布式跟踪

介绍

说到认证授权,相信还是有很多小伙伴把这两个东西搞混掉,毕竟两个单词也是很相近,AuthenticationAuthorization

  • 身份验证 (我是谁?)是知道用户的标识。 例如,Alice 使用她的用户名和密码登录,服务器使用该密码对 Alice 进行身份验证。

    对于认证的结果会存储在 HttpContext.User 中。常见的认证方式有:Cookie、JWT、Windows、等等,可参考 ASP.NET Core 身份验证概述

  • 授权 (我有什么权限?)决定是否允许用户执行操作。 例如,Alice 有权获取资源,但无权创建资源。

    授权与身份验证相互独立。 但是,授权需要一种身份验证机制。常见的授权策略有:基于角色的 RBAC,基于策略的PBAC等等,可参考 ASP.NET Core 授权简介

有了上述了解,接下来我们看 YARP身份验证授权

反向代理可用于在将请求代理到目标服务器之前,对请求进行身份验证和授权。这可以减少目标服务器上的负载,增加一层保护,并确保在应用程序中实施一致的策略。 接下来让我们看下如何开启认证和授权。

如果有对 .NET 本身的身份验证授权功能不了解的小伙伴,可以先去微软文档了解一下(身份验证、授权),再回来看可能会容易理解。因为 YARP 就是使用的 .NET 的认证和授权。提供策略,交给其中间件处理。

配置

可以通过 RouteConfig.AuthorizationPolicy 为每个路由指定授权策略,并且可以从配置文件的 Routes 各个部分进行绑定。与其他路由属性一样,可以在不重新启动代理的情况下修改和重新加载此属性。策略名称不区分大小写。

示例:

{
  "ReverseProxy": {
    "Routes": {
      "route1" : {
        "ClusterId": "cluster1",
        "AuthorizationPolicy": "customPolicy",
        "Match": {
          "Hosts": [ "localhost" ]
        },
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://localhost:10001/"
          }
        }
      }
    }
  }
}

授权策略使用的是 ASP.NET Core 的概念。代理提供上述配置来为每个路由指定一个策略,其余部分由现有的 ASP.NET Core 身份验证和授权组件处理。 是不是和上一章的限流是一个套路,都是 .NET 本身的功能,开箱即用。

配置授权策略,如下所示:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("customPolicy", policy => policy.RequireAuthenticatedUser());
});


app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.MapReverseProxy();

要了解如何设置首选的身份验证类型,可以参阅身份验证文档

特殊值(内置策略):

除了自定义策略名称之外,还可以在路由的授权参数中指定两个特殊值: defaultanonymous 。这是两个内置的策略名称,用于简化身份验证和授权配置。

  • default 对应于用户已经通过身份验证的情况。如果用户已经登录,那么他们将满足 default 策略的要求。这通常用于需要用户已登录的资源或操作。 在路由的授权参数中指定值 default 意味着路由将使用 AuthorizationOptions.DefaultPolicy 中定义的策略。该策略已预先配置为要求经过身份验证的用户。

示例用法:

app.MapGet("/default", () =>
{
    return "hello";
}).RequireAuthorization();// 将具有指定名称的授权策略添加到终结点。空 代表使用 default 策略

上述的RequireAuthorization() 方法没给参数 默认就是用了 default 策略,已登录的用户才能通过验证。 而且还可以指定多个策略。他接收的是一个 params string[] policyNames 参数,你还可以添加其他策略。

YARP 中用法:

"Routes": {
      "DefaultAuthRoute": {
        "ClusterId": "cluster1",
        // 此路由使用内置的默认授权策略,该策略要求经过身份验证的用户
        "AuthorizationPolicy": "Default",
        "Match": {
          "Path": "/default"
        }
      }
}
  • anonymous 对应于未经身份验证的用户,即匿名用户。如果用户没有登录,他们将满足 anonymous 策略的要求。这通常用于允许未经身份验证的用户访问资源或操作。 在路由的 authorization 参数中指定值 anonymous 意味着无论应用程序中的任何其他配置(如 FallbackPolicy)如何,路由都不需要授权。

示例用法:

app.MapGet("/public", () =>
{
	return "hello";
}).AllowAnonymous();

YARP 中用法:

"Routes": {
      "AnonymousRoute": {
        "ClusterId": "cluster1",
        // 此路由使用内置的默认授权策略,该策略要求经过身份验证的用户
        "AuthorizationPolicy": "Anonymous",
        "Match": {
          "Path": "/open/{*any}"
        }
      }
}

FallbackPolicy 回退策略

AuthorizationOptions.FallbackPolicy 用于处理未指定任何特定策略的路由。这是一个全局默认策略,如果路由没有指定特定策略,就会使用这个策略。通常情况下,FallbackPolicy 会采用默认策略,要求用户已通过身份验证。

示例用法:

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser() // 默认情况下,要求用户已通过身份验证. 可以提成你需要的验证
        .Build();
});

YARP 中用法:

"Routes": {
      "Other": {
        // 由于以下路由未定义授权策略,因此使用回退策略
        "ClusterId": "cluster1",
        "Match": {
          "Path": "{**catchall}"
        }
      }
}

Flowing Credentials 流动凭证

即使在代理中授权了请求后,目标服务器可能仍需要知道用户是谁(身份验证)以及允许他们执行的操作(授权)。如何传递该信息将取决于所使用的身份验证类型。

Cookie, bearer, API keys

这些身份验证类型已经在请求头中传递了它们的值,默认情况下这些值将流到目标服务器。该服务器仍然需要验证和解释这些值,这可能会造成一些双重工作(代理也校验,目标服务也校验)

Windows, Negotiate, NTLM, Kerbereos

这些身份验证类型通常绑定到特定连接。不支持将它们作为在 YARP 代理后面的目标服务器中对用户进行身份验证的方法(参见 #166。它们可用于对代理的传入请求进行身份验证,但该身份信息必须以另一种形式传达给目标服务器。它们还可用于向目标服务器验证代理,但只能作为代理自己的用户,不支持模拟客户端( YARP 无法代表客户端进行目标服务器的身份验证)

Client Certificates 客户端证书

客户端证书是一项 TLS 功能,作为连接的一部分进行协商。有关其他信息,请参阅这些文档。可以使用 ClientCert 转换将证书作为 HTTP 标头转发到目标服务器。

替换身份验证类型

Windows 这样不自然流到目标服务器的身份验证类型需要在代理中转换为其他形式。例如,可以使用用户信息创建 JWT 承载令牌,并在代理请求上进行设置。

可以使用自定义请求转换来执行这些交换(看起来又要加一章 请求转换 的篇章了 )。如果你有足够的兴趣,可以针对特定场景开发详细示例,反馈给 YARP 让他们了解您希望如何转换和流动身份信息的。

总结

本章我们介绍了 YARP 的认证和授权功能,概念比较多,此功能还是主要依赖于.NET 本身的认证和授权。如果有不了的可以先从微软文档学起,看起来相对会简单一些。本章建议结合示例代码一起看理解起来会比较方便,示例代码已上传GitHub
本章示例完整配置如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ReverseProxy": {
    "Routes": {
      "DefaultAuthRoute": {
        "ClusterId": "cluster1",
        // 此路由使用内置的默认授权策略,该策略要求经过身份验证的用户
        "AuthorizationPolicy": "Default",
        "Match": {
          "Path": "/default"
        }
      },
      "ClaimsAuthRoute": {
        "ClusterId": "cluster1",
        // 自定义策略
        "AuthorizationPolicy": "myPolicy",
        "Match": {
          "Path": "/custom/{*any}"
        }
      },
      "AnonymousRoute": {
        "ClusterId": "cluster1",
        // 此路由使用内置的默认授权策略,该策略要求经过身份验证的用户
        "AuthorizationPolicy": "Anonymous",
        "Match": {
          "Path": "/open/{*any}"
        }
      },
      "Other": {
        // 由于以下路由未定义授权策略,因此使用回退策略
        // 程序中 设置为null,因此不需要身份验证或声明。
        "ClusterId": "cluster1",
        "Match": {
          "Path": "{**catchall}"
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://www.baidu.com/"
          }
        }
      }
    }
  }
}

以上代码示例都是可以跑起来验证的,针对各种情况做了演示,有什么问题欢迎留言交流。

下篇文章我们继续 压缩缓存 或者再补一篇 请求和响应转换文章来源地址https://www.toymoban.com/news/detail-746153.html

到了这里,关于Welcome to YARP - 5.身份验证和授权的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .netcore grpc身份验证和授权

    权限认证这里使用IdentityServer4配合JWT进行认证 通过AddAuthentication和AddAuthorization方法进行鉴权授权注入;通过UseAuthentication和UseAuthorization启用鉴权授权 增加授权策略处理 使用密码模式,及简易内存处理 生成token带入grpc的metadata进行传递 服务端对应的方法标记特性[Authorize]进行

    2024年02月12日
    浏览(41)
  • Spring中的Websocket身份验证和授权

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 http和WebSocket的安全链和安全配置是完全独立的。 SpringAuthenticationProvider根本不参与 Websocket 身份验证。 将要给出的示例中,身份验证不会发生在 HTTP 协商端点上,因

    2024年02月13日
    浏览(51)
  • PHP项目&变量覆盖&反序列化&未授权访问&身份验证

    此种漏洞由于没有什么关键函数,所以需要通过功能点去进行测试。 CNVD官网上搜索Bosscms未授权访问漏洞。 根据描述,影响的是1.0版本。看到发送时间为21年12月29好,收录时间为22年1月18号。再去官网看版本更新的时间点,V1.0版本和V1.1版本都是21年12月29号之前推出的,都存

    2024年02月19日
    浏览(38)
  • 实施PCIDSS认证:确保您的身份验证和授权在安全环境中运行

    作者:禅与计算机程序设计艺术 “Payment Card Industry Data Security Standard”(PCI DSS)是一个美国信息安全标准,是20世纪90年代末由美国国家信用卡行业组织(National Institute of Standards and Technology,NIST)提出的安全标准。它是防止信用卡交易被不法侵入者窃取、篡改或泄露个人信息

    2024年02月05日
    浏览(48)
  • 后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ ★后端进

    2024年02月14日
    浏览(53)
  • C# ASP.NET Core Web API 身份授权(JWT)验证(一)

    1.开发环境 VS2022,安装时记得勾选ASP.NET有关的都选上,建议全选,省的麻烦。          2.创建初始工程 TestApi (你自己的工程名称)。    这就创建工程成功了,按 F5 则可以进行调试了。 而在项目中,我们不仅仅会用到基础的api功能,我们一般还会用到  身份授权(J

    2024年02月02日
    浏览(61)
  • Windows server : NPS服务(为“微劈恩“搭建身份验证服务器)

    !!!由于微劈恩直接说英文不过审所以用谐音字代替!!! 实验环境:和上一个搭建微劈嗯的一样 微劈恩服务器可以和另外两个服务器通信 一个Windows 10 一个Windows server 2016 (微劈嗯服务器) 一个Windows server 2016(NPS服务器) ip这样安排的 先创建好微劈嗯服务器 1.安装np

    2024年02月09日
    浏览(50)
  • Python数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件

    在Python中,数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件等技术来实现的。以下是一些建议的步骤和工具,用于在Python项目中实施数据权限管理: 用户身份验证: 使用如Djan

    2024年04月26日
    浏览(45)
  • Linux系统开机出现 “welcome to emergency mode!”已解决

    1.问题出现原因及描述 在我编写完 /etc/fstab文件之后   当我尝试为linux系统增加一个新的分区时,在永久挂载之后,重启系统发现,进入了如下界面, 出现 \\\"Authorization not available. Check if polkit service is running or see debug message for more informationd\\\" \\\"welcome to emergency mode!\\\" 发现就算输入

    2024年02月05日
    浏览(45)
  • win11 搭建Apache webdav 设置用户名密码 加密授权访问以及多个不同目录访问

    Apache webdav 的搭建应该比较简单,但是搭建后还遇到了一些问题,也就是设置了访问用户名密码,咋就不生效呢,苦苦思索两日,终于发现了问题,本文就是分两个方面来编写 官网下载: https://www.apachehaus.com/cgi-bin/download.plx 打开文件 “/conf/httpd.conf“, 取消加载和包含语句的

    2024年01月21日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包