我在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。它在發行版中提供了一個直接示例作爲示例,它在應用程序引擎中像魅力一樣工作。
感謝您的回覆。我只打算驗證,我應該說openId4Java工作得很好。這意味着我可以使用所有的提供者。在決定嘗試openId4java之前,我發佈了這個問題。我做到了,無法抱怨! – Sundeep
你可能正確地說,在現實生活中,人們只是使用Oauth,因爲facebook,twitter等不是openId提供者,而是擁有Oauth2授權。 – Sundeep