spring - 如何将 header 添加到 `AuthenticationKeyGenerator` 中?

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

上下文:
多个设备可以使用相同的客户端凭据,因此它们共享 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/

相关文章:

java - 带有正则表达式的 Spring Security 模式

java - 根据db中存储的用户服务渲染jsp页面的不同部分

c# - 如何使用 OAuth 2.0 实现 REST API 以实现多客户端访问

oauth-2.0 - 生成并接收 GA API key 以通过 OAuth2 进行简单 API 访问

java - Spring 应用程序上下文为空

spring - 为什么在使用 Spring Boot 时我需要实体可序列化?

java - Spring Security - 何时清除SecurityContextHolder

java - JPA异常: org. hibernate.exception.SQLGrammarException

java - 使用 Spring Security 的多个用户

node.js - 如何为 react 前端和 Node 后端集成oauth?