繁体   English   中英

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

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

Spring Security 5 或其他东西是否支持此用例,我们不必重新发明轮子? 关于如何(重新)更好地实现这一点的想法?

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

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

两者实际上都是通过网关调用的。 我们得到了具体信息:

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

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

  • 授权类型 = 密码
  • 消费者 ID
  • 消费者秘密
  • 帐户用户
  • 户口密码

它以访问令牌和我们并不真正关心的一些其他细节进行响应,并且对我们的用例而言价值为零。

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

(B) 保存请求需要为相同的网关用户/密码使用不同的自定义 header ,然后在调用保存信息 API 时需要承载授权 header。

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

抱歉,如果这不是问这个问题的正确地方,或者之前已经问过这个问题。 一直在寻找类似的用例,但似乎找不到。

谢谢。

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

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

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

    SecurityContextHolder.getContext().setAuthentication(authToken);

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

在下面检查 Oauth2 expires_in:- https://tools.ietf.org/html/rfc6749

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM