设置如下:
公共API
业务API:
用例:
该应用程序允许登录用户访问前端的某些资源。 为此,前端从Public API请求访问令牌。 公共 API 无法处理此请求(无法访问业务数据或用户)并将其转发到 业务 API。创建访问令牌并通过 Public API 传回前端。
收到访问令牌后,前端向Public API发出另一个请求,并将
Authorization
标头设置为Bearer [access token]
。
公共 API 获取请求,无法处理它并继续转发它。
在转发请求期间,它会设置 Authorization
-标头,以注入受保护的 Business API 端点的凭据。现在访问令牌丢失了。因此,业务 API 确定发出请求的人无权访问所请求的资源。
我现在的问题是:处理此设置的最佳(阅读:最面向标准)方法是什么。
我的想法:
首先,请随意告诉我,如果它们是的话,它们都是绝对的垃圾:D
我无法向处理访问令牌请求的特定业务 API 端点添加额外的保护。理论上,它们受到访问令牌的保护,但这可能是一个策略问题,因为Business API中没有public(读取:不受保护的端点)。
我可以将现有凭据移动到另一个标头中,例如
X-Authorization
。优点很明显:它会起作用。
但如果我要做的话,我只会按照现有的标准去做。使用身份验证/授权的库大多不灵活地处理他们正在寻找此类信息的标头。他们为什么会这么做?这是一个既定的标准。如果有一个好的标准,我可能能够将功能添加到任何指向相关标准的开源库中。
Proxy-Authentication
在这里似乎不是正确的答案,因为它似乎用于对代理进行身份验证,并且背后没有资源。由于这里讨论的代理是公开且开放的Public API,我不想滥用它们。另外,我想避免向用户透露他们正在与代理交谈。
您可以通过授权:
那么,想象一下:公共 API 向业务 API 发送一条消息,对吧?这不仅仅是一条普通的信息;它有一个带有不记名令牌标记的巧妙的授权标头。这就像说,“嘿 Business API,我用这个很酷的令牌来担保这个请求!”
为什么这很重要?那么,业务 API 可以看一下该令牌并说:“好吧,你加入了!”这就像俱乐部的保镖检查你的身份证一样。
这整个事情利用了众所周知的 OAuth 2.0 标准,该标准就像无处不在的处理访问令牌一样。就像镇上受欢迎的孩子一样,每个人都喜欢他。所以,这是一个聪明的举动,与锁定 API 的建议相呼应。