如何将头添加到“ AuthenticationKeyGenerator”中?

时间:2018-09-11 21:08:47

标签: spring spring-security oauth-2.0 spring-security-oauth2 spring-oauth2

上下文: 多个设备可以使用相同的客户端凭据,因此它们共享令牌,当两个或更多设备尝试刷新令牌时,这可能导致争用情况。可以在标头中找到设备标识,因此自定义AuthenticationKeyGenerator实现可以使用设备ID为每个设备生成令牌。设备ID可以作为附加参数存储在OAuth2Request.getExtensions()中。

问题::正如我提到的,设备ID不是来自GET / POST参数,因此OAuth2Request.getRequestParameters()中不存在设备ID,但可以在标头中找到它。但是OAuth2Request是在DefaultOAuth2RequestFactory中创建的(OAuth2RequestFactory的实现),该访问者无法访问原始的http请求,无法从标题复制信息并将其添加到OAuth2Request.getExtensions()

捕获标头并将其存储在OAuth2Request.getExtensions()中以供AuthenticationKeyGenerator以后用作键的一部分的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我有一个AuthenticationKeyGenerator的类似实现,其中使用设备/用户代理使用Redis作为令牌存储为 auth_to_access 生成密钥。

下面是我在自定义AuthenticationKeyGenerator实现中如何捕获用户代理的代码段

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();

String userAgent = request.getHeader("User-Agent");