2016-11-23 93 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或其他應用程序使用此背景下通...