使用具有特定 use-case 的 Spring 安全性获取访问令牌

Get access token using Spring Security with a specific use-case

use-case Spring Security 5 或其他我们不需要重新发明轮子的东西是否支持?关于如何(重新)更好地实现这一点的想法?

详情如下。第 3 方供应商提供的端点。我们从上游来源提取信息,然后转发给下游供应商。只需要 2 APIs:

  1. 请求访问令牌
  2. 保存信息

两者实际上都是通过网关调用的。我们已获得详细信息:

(一) 令牌请求需要基本身份验证(标准 header - 通常使用 base64 编码)。提供了网关用户和网关密码。

请求令牌的凭据已提供给我们:

它以 访问令牌 和一些我们并不关心的其他细节进行响应,并且对我们的 use-case.

的价值为零

响应中没有expires_in信息。但我已经多次测试它,知道它确实会过期。不知道现在要多久,我可以做更多的测试来确定。

(乙) 保存请求需要不同的自定义header相同的网关用户/密码,然后在调用保存信息[=65=时的承载授权header ].

现在,上述所有实现都使用 RestTemplate。工作正常了。但是每次保存都需要一个令牌,这是昂贵的。在编写任何缓存或其他一些逻辑以在发出另一个令牌请求之前等待 XY 分钟之前,我将不胜感激可能已经通过 Spring-specific 库处理的任何其他选项,或者就如何处理这种情况提供进一步建议。

如果这不是问这个问题的正确位置,或者之前已经有人问过,我们深表歉意。一直在寻找类似的 use-case,但似乎找不到。

谢谢。

  • 尝试任一选项
  1. 您可以使用存储您的访问令牌的 OAuth2ClientContext。

     final OAuth2RestTemplate restTemplate=new OAuth2RestTemplate(resourceDetails, clientContext);
    
  2. 您可以创建会话并在其中存储您的令牌和用户详细信息。

     UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(user, null,null); 
    

    SecurityContextHolder.getContext().setAuthentication(authToken);

  • 从选项 1 或选项 2 中,您可以在过滤器中为每个请求获取现有令牌,例如PRE_AUTH_FILTER
  • 然后检查令牌是否过期 - 如果是则请求新令牌或调用刷新令牌

检查下面的 Oauth2 expires_in :- https://www.rfc-editor.org/rfc/rfc6749?