我目前正在开发一个涉及 Spring Security(针对 OAuth2)的项目。
我们正在使用授权码流程。
但是,当客户端点击 AuthorizationEndpoint (/oauth/authorize) 时
我们得到一个“InsufficientAuthenticationException”。
这可能是由于该流程中也涉及外部系统,该系统为客户端执行重定向,将其发送到 /oauth/authorize 端点。
据我了解,通过查看调试日志文件和阅读源代码,AuthorizationEndpoint.authorize 方法中使用的主体为 null(特别是第 138 行,我们使用的是 spring-security-oauth2-2.0.7.RELEASE) 。
我明白 spring 的问题是什么(它不“知道”已经通过系统身份验证的用户),但我不明白 spring 具体使用哪些信息来识别用户(我想这将是我的核心问题)
我尝试使用正确的参数对 /oauth/authorize 执行 GET,并通过请求发送包含不记名访问令牌的授权标头,但 spring 总是抛出 InsufficientAuthenticationException。我希望有人能帮助我解决这个问题。
此致
附注
为了文档的目的,我将在这里回答我自己的问题。TJ https://stackoverflow.com/users/174184/tj基本上为我指明了正确的方向。
就我而言,InsufficientAuthenticationException 源于整个堆栈的稍微错误的设置。为了将内容传递给用户,使用了 apache,它也充当反向代理,截断部署在其后面的 tomcat 上的应用程序的根上下文。
最终解决我问题的答案可以找到here https://stackoverflow.com/questions/3980392/tomcat-7-session-cookie-path。
实际上问题是,会话 cookie 包含无效路径(路径属性仍然包含 rootcontext,因为 tomcat 还没有意识到它前面的 apache 正在将 rootcontext 截断为仅“/”。)因此设置通过 tomcat 的 context.xml 中的 setSessionCookie="/" 在 tomcat 端的路径就可以了。
因此,当重定向命中 spring 的 oauth/authorize 端点时,它会使用包含错误路径的会话 cookie 来执行此操作。因此,对于 Spring 来说,请求似乎源自未经身份验证的源,因此让我对 InsufficientAuthenticationException 感到摸不着头脑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)