2012-12-01 47 views
2

我在Google AppEngine Java中實施聯合登錄時遇到問題。 https://developers.google.com/appengine/articles/openidApp引擎Java聯合身份登錄始終重定向到Google登錄

我正在獲取用戶服務並獲取當前用戶。如果當前用戶爲空,那麼我會要求用戶服務用我選擇的開放id提供程序創建一個登錄URL(最終,用戶將被允許選擇)。這裏的代碼段

UserService userService = UserServiceFactory.getUserService(); 

User user = userService.getCurrentUser(); 

if(user == null) 
{ 
    userService.createLoginURL(request.getRequestURI(),null,"yahoo.com",null); 
    //do a redirect 
} 

方法UserService.createLoginURL(....)的第三個參數,是federatedIdentity(見here)。對於這個論點,我到目前爲止使用的值爲"yahoo.com", "http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds", "https://openid.stackexchange.com/",而且我一直被重定向到Google帳戶的登錄頁面。我也注意到,使用這些參數返回的URL與使用不帶參數生成的URL有點不同。

我想我在這裏犯了一些錯誤,但我無法弄清楚在哪裏。究竟應該傳遞給該參數,以便用戶可以重定向到相應的提供者的登錄頁面?例如,雅虎,stackoverflow,臉書等。

作爲一個擴展問題,我相信一旦用戶通過身份驗證並獲得批准,App Engine將在下次詢問時通過UserService.getCurrentUser()自動返回該用戶。我對麼?

爲了記錄,我已在應用程序設置中將「身份驗證類型」設置爲「聯合登錄」。

更新12/5/12:我去了openid4java。它在發行版中提供了一個直接示例作爲示例,它在應用程序引擎中像魅力一樣工作。

回答

2

這可能不是您想要聽到的內容,但我們一直在那裏並放棄了OAuth 2的OpenID。我知道OpenID是用於身份驗證和OAuth授權的(請參閱this other question),但在現實生活中,人們只需使用OAuth即可。

我們和Scribe一起去了,對它很滿意。請注意,這意味着要滾動您自己的身份驗證解決方案,並可能限制您的提供商列表,因爲每個人都會以不同的方式做事

+0

感謝您的回覆。我只打算驗證,我應該說openId4Java工作得很好。這意味着我可以使用所有的提供者。在決定嘗試openId4java之前,我發佈了這個問題。我做到了,無法抱怨! – Sundeep

+0

你可能正確地說,在現實生活中,人們只是使用Oauth,因爲facebook,twitter等不是openId提供者,而是擁有Oauth2授權。 – Sundeep

相關問題