上下文:
多个设备可以使用相同的客户端凭据,因此它们共享 token ,当 2 个或更多设备尝试刷新 token 时,这可能导致竞争条件。设备标识可以在标题中找到,所以自定义 AuthenticationKeyGenerator
实现可以使用设备 ID 为每个设备生成一个 token 。设备 ID 可以作为附加参数存储在 OAuth2Request.getExtensions()
中.
问题:正如我提到的,设备 ID 不是来自 GET/POST 参数,所以它不存在于 OAuth2Request.getRequestParameters()
中。 ,但可以在标题中找到。但是OAuth2Request
创建于 DefaultOAuth2RequestFactory
( OAuth2RequestFactory
的实现),它无权访问原始 http 请求以从 header 中复制信息并将其添加到 OAuth2Request.getExtensions()
捕获标题并将其存储在内部的最佳方法是什么 OAuth2Request.getExtensions()
为 AuthenticationKeyGenerator
以后将其用作 key 的一部分?
最佳答案
我有一个类似的 AuthenticationKeyGenerator 实现,其中 设备/用户代理 用于为 生成 key auth_to_access 使用 Redis 作为 token 存储。
下面是我如何在自定义 AuthenticationKeyGenerator 实现中捕获用户代理的代码片段
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String userAgent = request.getHeader("User-Agent");
关于spring - 如何将 header 添加到 `AuthenticationKeyGenerator` 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284253/