我在 Google AppEngine Java 中实现联合登录时遇到问题。 https://developers.google.com/appengine/articles/openid
我正在获得用户服务并获得当前用户。如果当前用户为空,那么我将要求用户服务使用我选择的开放 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(参见此处)。对于这个论点,到目前为止,我一直使用这些值"yahoo.com", "http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds", "https://openid.stackexchange.com/"
,并且一直被重定向到 Google 帐户的登录页面。我还注意到,使用这些参数返回的 url 与没有参数生成的 url 略有不同。
我想我在这里犯了一些错误,但无法弄清楚在哪里。究竟应该将什么传递给该参数,以便将用户重定向到相应提供商的登录页面?例如,yahoo、stackoverflow、facebook 等。
作为一个扩展问题,我相信一旦用户通过身份验证并寻求批准,App Engine 将在下次询问时通过 UserService.getCurrentUser() 自动返回该用户。我对么?
作为记录,我已在应用程序设置中将“身份验证类型”设置为“联合登录”。
2012 年 12 月 5 日更新:我选择了 openid4java。它在发行版中提供了直接示例作为示例,其工作方式类似于应用引擎的魅力。