Java Spring SSO授权在没有上下文路径的情况下失败
我跟踪并克隆了这只老鼠。该项目有一个Java Spring SSO授权在没有上下文路径的情况下失败,java,spring,spring-security,Java,Spring,Spring Security,我跟踪并克隆了这只老鼠。该项目有一个authserver和一个client(作为测试)。示例运行良好,但如果我删除属性(我只想让我的应用程序在/上运行),则重定向回客户端后,它将失败。例如: 转到客户端(localhost:9999) 重定向到authserver(localhost:8080) 通过GitHub登录 已重定向到authserver,并立即使用下一个url重定向到客户端: 白标错误页面响应: 出现意外错误(类型=未授权,状态=401)。 身份验证失败:无法获取访问令牌 正如我上
authserver
和一个client
(作为测试)。示例运行良好,但如果我删除属性(我只想让我的应用程序在/
上运行),则重定向回客户端后,它将失败。例如:
转到客户端
(localhost:9999
)李>
重定向到authserver
(localhost:8080
)李>
通过GitHub登录李>
已重定向到authserver
,并立即使用下一个url重定向到客户端
:
白标错误页面响应:
出现意外错误(类型=未授权,状态=401)。
身份验证失败:无法获取访问令牌
正如我上面提到的,只有当上下文路径
为/
(或完全删除)时,它才会失败。否则,所有操作都有效。从您的链接:
如果同时运行两个客户端,则上下文路径必须是显式的
以及本地主机上的身份验证服务器,否则cookie路径会发生冲突和
这两个应用程序无法在会话标识符上达成一致
我们在/上成功运行了一个应用程序,在/uaa上成功运行了AuthServer。尝试在AuthServer上设置上下文路径。查看应用程序和AuthServer中的Cookie:它们不应该有相同的路径
编辑:
不同的领域应该可以。他们不分享饼干。在同一主机上,如localhost,您必须使用上下文路径,因为cookie不是端口特定的。见:
或者,将域放在/etc/hosts(linux)或c:\windos\system32\drivers\etc\hosts中。只需添加以下行:
127.0.0.1 website authserver
然后您可以在同一台机器上使用和进行开发
或者您也可以为cookie设置不同的名称。见:
您可以在客户端应用程序中设置RedirecURI:
您可以在注册客户端时在oauth2服务器上设置它
但我认为它会返回到您的根上下文传递,比如它在根传递上没有足够的权限,或者其他应用程序使用此上下文传递 我想在另一个域上托管身份验证服务器。顺便说一下,我在客户端有两个JSESSIONID
。如果我尝试使用本地IP访问身份验证服务器,它会工作吗?谢谢!带有主机的解决方案非常棒!服务器cookie和客户端cookie的不同名称为我带来了好处+1.
server.session.cookie.name=auth
server.session.cookie.name=web
security: oauth2:
client:
client-id: acme
client-secret: acmesecret
access-token-uri: http://localhost:8080/oauth/token
user-authorization-uri: http://localhost:8080/oauth/authorize
pre-established-redirect-uri: http://localhost:9999/client