...上述端点应仅限于其他
同一应用程序中的微服务...
您所说的广义上是授权。
授权是在您的应用程序中向真实用户授予或拒绝“权力”或“能力”。
因此,任何授权机制的工作都是验证任何入站 API 请求中隐含的“声明”——即允许用户执行请求中编码的事情。
例如,假设我在您的 API 中出现了对 Widget 1234 的 PUT 请求:
PUT /widgetservice/widget/1234 HTTP/1.1
这可以解释为我(Bob Smith,一位知名用户)声称我可以对您系统中 ID 为 1234 的小部件进行更改。
无论您做什么来验证此声明,我都希望您能看到这需要在应用程序级别完成,而不是在 API 级别完成。实际上,授权是应用程序级别的问题,而不是 API 级别的问题(与身份验证不同, 很大程度上是 API 级别的问题)。
为了证明,在我们上面的示例中,理论上可以允许我创建一个新的小部件,但不能更新现有的小部件:
POST /widgetservice/widget/1234 HTTP/1.1
甚至我只被允许更新小部件 1234,并且不应该允许更改其他小部件的请求
PUT /widgetservice/widget/5678 HTTP/1.1
如何实现对其他微服务的受限 api 访问
在同一个应用程序中?
所以这变成了一个问题,即如何在应用程序中构建授权,以便验证来自已知用户的单个请求(在您的情况下,您生态系统中的其他服务只是另一种已知用户)。
好吧,很抱歉,但我将在这里进行规范,您可以使用基于声明的授权服务,该服务根据用户身份或角色成员身份存储有效声明。
这在很大程度上取决于您如何处理身份验证,以及您是否在该过程中支持角色。您可以存储针对单个用户的索赔,但随着用户数量的增加,这变得很困难。 OAuth 尽管实施起来相当繁重,但却是这方面的领先平台。
我正在使用微服务架构构建大型应用程序
我在这里唯一要说的是先阅读this。