我们需要向外界公开一个 REST 端点,以便由我们无法控制的外部服务调用。负责此外部服务的人员似乎是安全专家(不是),因此他们至少不会使用 HTTP 基本身份验证或任何其他真正的身份验证机制,而是使用固定的 secret 来对自己进行身份验证。事情是这样的:
GET /endpoint?secret=WE_ARE_THE_TRUE_GUYS
因为我们已经在使用 spring-security-oauth2
,我们希望将此身份验证流程与现有流程集成,以便我们可以为此端点指定规则,就像为 ResourceServer
上的每个其他端点指定规则一样。 ,获得相同的错误处理行为等等。我们应该如何实现自定义身份验证过滤器 - 或任何可能的东西 - 来获取 secret
查询字符串中的参数,将其转换为 AuthorizationServer
上预配置客户端的某种“客户端凭据”并与 OAuth2 流程的其余部分无缝集成?
最佳答案
如果您可以将“WE_ARE_THE_TRUE_GUYS”转换为有效的 OAuth2Authentication
,那么您所需要的只是一个能够执行此操作的身份验证过滤器(并将其粘贴在 SecurityContext
中)。然后下游过滤器和处理程序的行为就像真正的 OAuth2 身份验证一样。如果我是您,我会在该过滤器中放置一些非常严格的条件,以将请求与来自这个非常不寻常且不太安全的身份验证 channel 的允许资源上的请求相匹配。
关于spring-security - Spring Security OAuth2 - 自定义身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28722501/