具有Spring Security的OAuth2 - InsufficientAuthenticationException

时间:2015-05-05 16:18:51

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

我目前正在开展涉及弹簧安全的项目(针对OAuth2)。

我们正在使用authorization_code流程。

但是当客户端点击AuthorizationEndpoint(/ oauth / authorize)时 我们得到了一个" InsufficientAuthenticationException"。 这可能是由于外部系统也参与了此流程,该系统为客户端执行重定向,将其发送到/ oauth / authorize端点。

根据我的理解,通过查看调试日志文件和阅读源代码,主体为null,在AuthorizationEndpoint.authorize方法中使用(特别是第138行,我们使用的是spring-security-oauth2-2.0.7 。发布)。

我明白春天的问题是什么(它没有"知道"已经通过系统认证的用户)但我不明白春天用来识别哪些信息用户(我猜这将是我的核心问题)

我尝试使用正确的参数对/ oauth / authorize执行GET,并使用请求发送包含承载访问令牌的授权头,但spring总是抛出InsufficientAuthenticationException。我希望有人能帮助我。

祝你好运 附:

1 个答案:

答案 0 :(得分:0)

为了记录,我将在这里回答我自己的问题。 TJ基本上指出了我正确的方向。

就我而言,InsufficientAuthenticationException源于整个堆栈的略微错误的设置。为了向用户提供内容,使用了apache,它也用作反向代理,截断在其后面的tomcat上部署的应用程序的根上下文。

最终解决了我的问题的答案可以找到here。 问题实际上是,会话cookie包含一个无效路径(路径属性仍然包含rootcontext,因为tomcat还没有意识到它前面的apache正在将rootcontext截断为" /&#34 ;。)所以通过setSessionCookie =" /"在tomcat一侧设置路径;在tomcat的context.xml中就可以了。

因此,当重定向命中spring的oauth / authorize端点时,它会使用包含错误路径的会话cookie。因此,对于spring来说,请求似乎源于一个未经验证的源,因此让我对InsufficientAuthenticationException感到头疼。