没有上下文路径,Spring SSO授权失败

时间:2016-11-23 22:58:42

标签: java spring spring-security

我关注了this guide并克隆了authserver。该项目有authserverclient(作为测试)。示例工作正常但如果我删除context-path属性(我只希望我的应用程序在/上工作),则在重定向回client后失败。例如:

  1. 转到clientlocalhost:9999);
  2. 重定向到authserverlocalhost:8080);
  3. 通过GitHub登录;
  4. 重定向到authserver并立即转到client下一个网址:
  5.   

    http://localhost:9999/login?code=dqoxz4&state=79qtJ5

    Whitelabel错误页面响应:

      

    出现意外错误(type = Unauthorized,status = 401)   身份验证失败:无法获取访问令牌

    正如我上面提到的,只有当context-path/(或根本不删除)时,它才会失败。否则,一切正常。

2 个答案:

答案 0 :(得分:3)

从您的链接:

  

如果您同时运行客户端,则必须明确上下文路径   和localhost上的auth服务器,否则cookie路径冲突和   这两个应用无法就会话标识符达成一致。

我们在/ uaa上成功运行/和AuthServer上的应用程序。尝试在AuthServer上设置Context-Path。查看来自您的应用和AuthServer的Cookie:它们不应具有相同的路径。

修改

不同的域应该没问题。他们不共享cookie。在同一主机上,如localhost,您必须使用上下文路径,因为cookie不是特定于端口的。请参阅:https://stackoverflow.com/a/16328399/926620

或者,您将域放在/ etc / hosts(linux)或c:\ windos \ system32 \ drivers \ etc \ hosts中。只需添加以下行:

127.0.0.1 website authserver

然后您可以在同一台计算机上使用http://website:9999http://authserver:8080进行开发。

或者您也可以为Cookie设置不同的名称。见http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

server.session.cookie.name=auth
server.session.cookie.name=web

答案 1 :(得分:0)

您可以在客户端应用程序中设置RedirecURI:

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

您可以在注册客户端时在oauth2服务器上进行设置。

但是我觉得它会返回到你的ROOT上下文传递,就像它在Root pass上没有足够的持久性或其他应用程序使用这个上下文传递...