【问题标题】:Endpoint authorization for service to service call服务到服务调用的端点授权
【发布时间】:2021-04-09 22:25:14
【问题描述】:

我有一个带有多个端点的 .net 核心 API。我正在使用 Identity Server 4 进行身份验证。令牌将根据正确的用户名和密码生成。

在同一个 API 中,我想添加另一个端点,该端点只能通过 API 调用访问,普通用户不应该能够访问端点。

我正在考虑对端点进行基于策略的授权。

这是一个正确的方法吗?

【问题讨论】:

    标签: asp.net asp.net-core


    【解决方案1】:

    你可以做几件事。

    1. 正如您提到的,您可以使用授权策略。如果您使用的是 OAuth;您的源 API 可以使用客户端凭据授予类型来获取 M2M 令牌(也称为机器对机器令牌)。在目标服务中可以检查gty 声明是否等于client_credentials,如果不是;返回 HTTP 403 响应。
    2. 使用 API 网关并仅公开内部服务上的公共 API/操作 - 不要公开应仅限于服务到服务调用的 API/操作的公共路由。
    3. 同时执行 #1 和 #2。

    【讨论】:

      【解决方案2】:

      是的,您需要配置您的政策。为此,您需要了解身份验证和授权之间的区别,并同时设置它们。例如在我们的项目中,我们使用了几种不同的身份验证源,然后将它们映射到授权策略

      services.AddAuthentication()
              .AddScheme<...>("scheme1", ...)
              .AddScheme<...>("scheme2", ...)
              ...;
      
      services.AddAuthorization(opts =>
      {
          opts.AddPolicy("policy1", policy => policy.AddAuthenticationSchemes("scheme1")
                                       .<some other requirements specific to this policy>
                                       .RequireAuthenticatedUser());
          opts.AddPolicy("policy2", policy => policy.AddAuthenticationSchemes("scheme2")
                                       .<some other requirements specific to this policy>
                                       .RequireAuthenticatedUser());
      }
      

      之后您可以使用[Authorize("policy1")] 和[Authorize("policy2")]。或者您可以通过添加将一项策略设为默认策略

      opts.DefaultPolicy = new Microsoft.AspNetCore.Authorization
                                   .AuthorizationPolicyBuilder()
                                   .<requirements go here>
      

      然后使用[Authorize] 使用默认策略,[Authorize("policy1")] 用于特殊情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-26
        • 2015-01-21
        • 2023-01-13
        • 2018-09-26
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-03-20
        相关资源
        最近更新 更多