2016-11-23 59 views
1

我跟着this guide并克隆了authserver。该项目有authserverclient(作为测试)。示例工作正常,但如果我删除context-path属性(我只是想让我的应用程序在/上工作),重定向回到client后失败。例如:春季SSO授权失败,没有上下文路径

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

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

白色标签错误页面响应:

有意外的错误(类型=未经授权,状态= 401)。
认证失败:无法获得访问令牌

正如我上面提到,它失败仅当context-path/(或全部移除)。否则,所有的作品。

回答

2

从你的链接:

上下文路径有,如果你正在运行在客户端 和本地主机上的身份验证服务器是明确的,否则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 
+0

我想主机上的另一个域auth服务器。顺便说一句,我在客户端有两个'JSESSIONID'。如果我尝试使用本地IP访问auth服务器,它会起作用吗? – Feeco

+0

我编辑我的帖子。 –

+0

谢谢! 'hosts'的解决方案非常棒! – Feeco

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服务器上,而注册用户。

,但我认为它返回到你的根上下文传球,财产以后好像有根传球不够persmission或其他应用程序使用此背景下通...