Spring Security 在微服务之间传播访问令牌

velaa5lx  于 2022-12-13  发布在  Spring
关注(0)|答案(2)|浏览(152)

我正在使用微服务应用程序,其中客户端应用程序使用POST调用将access token发送到orders微服务。保存订单时,应调用库存微服务以更新库存。库存微服务updateIntentory方法也应受到保护。
在此用例中,我应该将相同的access token传播到inventory微服务并限制API访问以更新库存,还是应该使用client-credentials授权流以允许order微服务中的saveOrder方法调用inventory microservice中的updateInventory方法。
注意:orderinventory微服务都充当资源服务器。正确的方法是什么?

irtuqstp

irtuqstp1#

问得好:

边界

如果您要调用属于其他人的外部API,您肯定会使用客户端凭据来获取授权您调用该API的令牌。

微服务

如果数据所有者是同一个人,那么你只需要转发访问令牌。这就是OAuth的工作原理:一个可扩展的架构,只需要简单的编码:

  • 客户端获取具有多个API范围的访问令牌
  • 每个API都验证JWT
  • 每个API都验证自己的作用域
  • 每个API都信任JWT中的声明,并使用它们进行授权

Scope Best Practices文章针对真实的系统对此进行了说明。

高特权操作

在高安全性操作中获取新令牌是很常见的,例如使用支付范围重定向用户。

1l5u6lss

1l5u6lss2#

可能有点晚,但我已经粘贴文档和剪切代码在下一个链接**https://stackoverflow.com/a/74775514/9169379**。
简短回答:您可以从安全上下文中获取令牌

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
AbstractOAuth2Token token = (AbstractOAuth2Token) authentication.getCredentials();
System.out.println(token.getTokenValue());

相关问题