具有 Spring 安全性的 OAuth2 - InsufficientAuthenticationException
OAuth2 with Spring Security - InsufficientAuthenticationException
我目前正在从事一个涉及 spring 安全性的项目(针对 OAuth2)。
我们正在使用 authorization_code 流程。
然而,当客户端访问 AuthorizationEndpoint (/oauth/authorize)
我们得到一个 "InsufficientAuthenticationException"。
这可能是由于外部系统也参与此流程,该系统为客户端执行重定向,将他发送到 /oauth/authorize 端点。
根据我通过查看调试日志文件和阅读源代码的理解,AuthorizationEndpoint.authorize 方法中使用的主体为 null(特别是第 138 行,我们使用 spring-security -oauth2-2.0.7.RELEASE)。
我明白spring此时的问题是什么(它不是"know"已经通过系统验证的用户)但我不明白具体是哪些信息spring 用于识别用户(我想这将是我的核心问题)
我尝试使用正确的参数针对 /oauth/authorize 执行 GET,并随请求发送包含不记名访问令牌的授权 header,但 spring 总是抛出 InsufficientAuthenticationException。我希望有人可以帮助我解决这个问题。
此致
p.s。
为了文档,我将在这里回答我自己的问题。
TJ 基本上为我指明了正确的方向。
在我的例子中,InsufficientAuthenticationException 源于整个堆栈的稍微错误的设置。为了向用户提供内容,使用了 apache,它也用作反向代理,截断部署在其后面 tomcat 上的应用程序的根上下文。
可以找到最终解决我问题的答案here。
问题实际上是,会话 cookie 包含无效路径(路径属性仍然包含根上下文,因为 tomcat 没有意识到它前面的 Apache 正在将根上下文截断为“/”。 ) 因此通过 tomcat 的 context.xml 中的 setSessionCookie="/" 在 tomcat 侧设置路径就成功了。
因此,当重定向命中 spring 的 oauth/authorize 端点时,它会使用包含错误路径的会话 cookie。因此,对于 spring 来说,请求似乎来自未经身份验证的来源,因此让我对 InsufficientAuthenticationException 摸不着头脑。
我目前正在从事一个涉及 spring 安全性的项目(针对 OAuth2)。
我们正在使用 authorization_code 流程。
然而,当客户端访问 AuthorizationEndpoint (/oauth/authorize) 我们得到一个 "InsufficientAuthenticationException"。 这可能是由于外部系统也参与此流程,该系统为客户端执行重定向,将他发送到 /oauth/authorize 端点。
根据我通过查看调试日志文件和阅读源代码的理解,AuthorizationEndpoint.authorize 方法中使用的主体为 null(特别是第 138 行,我们使用 spring-security -oauth2-2.0.7.RELEASE)。
我明白spring此时的问题是什么(它不是"know"已经通过系统验证的用户)但我不明白具体是哪些信息spring 用于识别用户(我想这将是我的核心问题)
我尝试使用正确的参数针对 /oauth/authorize 执行 GET,并随请求发送包含不记名访问令牌的授权 header,但 spring 总是抛出 InsufficientAuthenticationException。我希望有人可以帮助我解决这个问题。
此致 p.s。
为了文档,我将在这里回答我自己的问题。 TJ 基本上为我指明了正确的方向。
在我的例子中,InsufficientAuthenticationException 源于整个堆栈的稍微错误的设置。为了向用户提供内容,使用了 apache,它也用作反向代理,截断部署在其后面 tomcat 上的应用程序的根上下文。
可以找到最终解决我问题的答案here。 问题实际上是,会话 cookie 包含无效路径(路径属性仍然包含根上下文,因为 tomcat 没有意识到它前面的 Apache 正在将根上下文截断为“/”。 ) 因此通过 tomcat 的 context.xml 中的 setSessionCookie="/" 在 tomcat 侧设置路径就成功了。
因此,当重定向命中 spring 的 oauth/authorize 端点时,它会使用包含错误路径的会话 cookie。因此,对于 spring 来说,请求似乎来自未经身份验证的来源,因此让我对 InsufficientAuthenticationException 摸不着头脑。