【问题标题】:OAuth2 with Spring Security - InsufficientAuthenticationException带有 Spring Security 的 OAuth2 - InsufficientAuthenticationException
【发布时间】:2015-07-15 11:58:54
【问题描述】:

我目前正在从事一个涉及 Spring Security 的项目(用于 OAuth2)。

我们正在使用 authorization_code 流程。

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

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

我了解 spring 的问题在这一点上(它不“知道”已经通过系统身份验证的用户)但我不明白 spring 使用哪些信息来识别用户(我想这将是我的中心问题)

我尝试使用正确的参数对 /oauth/authorize 执行 GET,并随请求发送包含不记名访问令牌的授权标头,但 spring 总是抛出 InsufficientAuthenticationException。我希望有人可以帮助我解决这个问题。

最好的问候 p.s.

【问题讨论】:

  • 在默认实现中,身份验证信息存在于会话中。当您看到InsufficientAuthenticationException 时,这表明无法从会话中获取身份验证。这个User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 可以告诉您会话中是否存在有关用户身份验证的信息。
  • principal(身份验证)被注入到 /authorize 端点。
  • 嘿,谢谢你的回答。到目前为止,我和你在一起,授权方法中使用的主体是由spring提供的。但不知何故,尽管用户在发送请求之前成功进行了身份验证,但 spring 无法从 sessionregistry 中获取用户的会话。这就是我卡住的地方,我不知道是什么将发送到 spring 的请求标识为来自特定用户。是在标头中发送的承载访问令牌吗?是 jsessionid cookie 吗?
  • 通常应该是 jsessionId。 /authorize request 中的不记名访问令牌在做什么?
  • 希望没什么,只是在这里抓住稻草;D你已经通过澄清这一点帮助了我,我明天看看并更新这篇文章。

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


【解决方案1】:

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

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

最终解决我的问题的答案可以在here找到。 问题实际上是,会话 cookie 包含无效路径(路径属性仍然包含根上下文,因为 tomcat 尚未意识到它前面的 apache 将根上下文截断为“/”。)所以设置在tomcat 的context.xml 中通过setSessionCookie="/" 在tomcat 端的路径起到了作用。

因此,当重定向命中 spring 的 oauth/authorize 端点时,它会使用包含错误路径的会话 cookie 这样做。因此,对于 Spring,请求似乎来自未经身份验证的源,因此让我对 InsufficientAuthenticationException 摸不着头脑。

【讨论】:

  • 只是评论:有时您必须在重新部署后重新启动 Apache!感谢您的回复。
  • 嗯,这仍然发生在我身上。我必须多次重新启动 tomcat 和 apache 才能让 Spring 安全性再次工作。 InsufficientAuthenticationException 对我来说是一场噩梦。
猜你喜欢
  • 2017-01-18
  • 2015-02-03
  • 2016-01-07
  • 2015-11-23
  • 2018-06-27
  • 2017-12-16
  • 2017-10-02
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多