如何通过公共 API 将用户凭据转发到受凭据保护的 API

问题描述 投票:0回答:1

设置如下:

公共API

  • 公共网站用户的入口点。
  • 端点都是公共的,无需凭据即可访问
  • 处理简单的请求(国家/地区完成等)本身,所有其他请求都转发到业务 API

业务API:

  • 有权访问应用程序的业务逻辑
  • 在每个端点上都有身份验证/授权
  • 公共 API(基本身份验证)
  • 的专用凭证

用例:

该应用程序允许登录用户访问前端的某些资源。 为此,前端从Public API请求访问令牌。 公共 API 无法处理此请求(无法访问业务数据或用户)并将其转发到 业务 API。创建访问令牌并通过 Public API 传回前端。

收到访问令牌后,前端向Public API发出另一个请求,并将

Authorization
标头设置为
Bearer [access token]
公共 API 获取请求,无法处理它并继续转发它。 在转发请求期间,它会设置
Authorization
-标头,以注入受保护的 Business API 端点的凭据。现在访问令牌丢失了。因此,业务 API 确定发出请求的人无权访问所请求的资源。

我现在的问题是:处理此设置的最佳(阅读:最面向标准)方法是什么。

我的想法:

首先,请随意告诉我,如果它们是的话,它们都是绝对的垃圾:D

  1. 我无法向处理访问令牌请求的特定业务 API 端点添加额外的保护。理论上,它们受到访问令牌的保护,但这可能是一个策略问题,因为Business API中没有public(读取:不受保护的端点)。

  2. 我可以将现有凭据移动到另一个标头中,例如

    X-Authorization
    。优点很明显:它会起作用。 但如果我要做的话,我只会按照现有的标准去做。使用身份验证/授权的库大多不灵活地处理他们正在寻找此类信息的标头。他们为什么会这么做?这是一个既定的标准。如果有一个好的标准,我可能能够将功能添加到任何指向相关标准的开源库中。

Proxy-Authentication
在这里似乎不是正确的答案,因为它似乎用于对代理进行身份验证,并且背后没有资源。由于这里讨论的代理是公开且开放的Public API,我不想滥用它们。另外,我想避免向用户透露他们正在与代理交谈。

http proxy authorization credentials
1个回答
0
投票

您可以通过授权:
那么,想象一下:公共 API 向业务 API 发送一条消息,对吧?这不仅仅是一条普通的信息;它有一个带有不记名令牌标记的巧妙的授权标头。这就像说,“嘿 Business API,我用这个很酷的令牌来担保这个请求!”

为什么这很重要?那么,业务 API 可以看一下该令牌并说:“好吧,你加入了!”这就像俱乐部的保镖检查你的身份证一样。

这整个事情利用了众所周知的 OAuth 2.0 标准,该标准就像无处不在的处理访问令牌一样。就像镇上受欢迎的孩子一样,每个人都喜欢他。所以,这是一个聪明的举动,与锁定 API 的建议相呼应。

© www.soinside.com 2019 - 2024. All rights reserved.