【问题标题】:Is it OK to forward the current access token or request new token for Proxy是否可以转发当前访问令牌或为代理请求新令牌
【发布时间】:2020-11-30 20:43:43
【问题描述】:

TL;DR

我需要在客户端应用程序和 webapi 之间创建一个代理,例如

客户端应用 代理 webapi(由oauth2保护)

代理应该只是将访问令牌转发给 webapi,还是请求新的访问令牌?

详细

目前,有一个客户端应用程序和一个 webapi。要访问 webapi,客户端应用需要提供访问令牌。

即客户端 webapi(由 oauth2 保护)

一切都按预期进行。

但是,出于某种原因,有一个新要求是在客户端和 webapi 之间使用 asp.net 核心创建代理服务器。

即客户端 代理 webapi

代理代码如下:

[Route("api/[controller]")]
[ApiController]
public class ProxyController : ControllerBase
{
    [Authorize]
    [HttpGet]
    public async Task<ActionResult<object>> Invoke()
    {
        using (HttpClient client = new HttpClient())
        {
            //GET ACCESS TOKEN FROM CURRENT REQUEST
            var accessToken = await HttpContext.GetTokenAsync("access_token"); ;
            client.SetBearerToken(accessToken);
            var response = await client.GetAsync("https://demo.identityserver.io/api/test");
            if (!response.IsSuccessStatusCode)
            {
                return response.StatusCode;
            }
            else
            {
                var content = await response.Content.ReadAsStringAsync();
                return content;
            }
        }
    }
}

如您所见,我只是使用当前的访问令牌,然后向真正的 api 发出请求。

为了安全起见,我不知道是否可以使用当前的访问令牌。我应该为代理请求一个新的访问令牌并向真正的 api 发出请求吗?

【问题讨论】:

  • 你好,有什么结果吗?您是如何使用新版本的 ASP.NET 进行管理的?你有 github 有例子吗? :)

标签: asp.net-web-api proxy oauth-2.0 openid-connect


【解决方案1】:

如果您想要一个教科书式的答案,那么是的,您的代理 api 应该同时成为 api 资源和客户端。它应该有一个新的范围,外部客户端应该请求访问令牌,而不是您的实际 api。然后,它还应该在您的实际 api 范围内使用客户端凭据流和请求令牌,并在将原始请求代理到预期目标 url 时使用该令牌。

话虽如此,我个人也处理过类似的情况,最终也只是代理了令牌,尽管我们最初的方法是使用我之前描述的流程。改变主意的主要原因是业务需求不断变化,并且在实际 API 中需要更精细的基于客户端的授权。我们尝试使用自定义授权来模拟外部客户端的模拟,但总体而言这是一场噩梦。

最后,我们对采用这种代理方法的安全风险进行了简要评估,但由于我们同时拥有代理和实际 api,并且只使用了机器对机器的通信流,因此无法识别任何东西。但是,如果使用这种方法存在一些潜在的安全隐患,我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2023-03-22
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多