如何在“AuthenticationKeyGenerator”中添加标题?

4
背景: 多个设备可以使用相同的客户端凭证,因此它们共享令牌,这可能会导致2个或更多设备尝试刷新令牌时出现竞争条件。设备标识符可以在标题中找到,因此自定义的 AuthenticationKeyGenerator 实现可以使用设备ID为每个设备生成令牌。设备ID可以作为附加参数存储在 OAuth2Request.getExtensions() 中。 问题: 如我所述,设备ID不来自GET / POST参数,因此不存在于 OAuth2Request.getRequestParameters() 中,但可以在标题中找到。但是, OAuth2Request 是在 DefaultOAuth2RequestFactory OAuth2RequestFactory 的实现)中创建的,该实现无法访问原始HTTP请求以从标题复制信息并将其添加到 OAuth2Request.getExtensions() 最佳方法是捕获标头并将其存储在 OAuth2Request.getExtensions() 中,以便 AuthenticationKeyGenerator 稍后将其用作键的一部分?
1个回答

1
我有一个类似的AuthenticationKeyGenerator实现,其中使用设备/用户代理来生成用于auth_to_access的密钥,并使用Redis作为令牌存储。下面是我自定义AuthenticationKeyGenerator实现中如何捕获用户代理的代码片段。
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接