![](/img/trans.png)
[英]Google App Engine Java - Federated Login, what to keep in Datastore
[英]App Engine Java federated identity login always redirects to Google login
我在 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 略有不同。
我想我在这里犯了一些错误,但无法弄清楚在哪里。 究竟应该将什么传递给该参数,以便将用户重定向到相应提供商的登录页面? 例如雅虎、stackoverflow、facebook 等。
作为一个扩展问题,我相信一旦用户通过身份验证并寻求批准,App Engine 将在下次询问时通过 UserService.getCurrentUser() 自动返回该用户。 我对么?
作为记录,我已在应用程序设置中将“身份验证类型”设置为“联合登录”。
2012 年 12 月 5 日更新:我选择了 openid4java。 它在分发中提供了直接示例作为示例,这就像应用程序引擎上的魅力一样。
这可能不是您想听到的,但我们一直在那里并放弃了 OAuth 2 的 OpenID。我知道 OpenID 用于身份验证,OAuth 用于授权(请参阅另一个问题),但在现实生活中人们只是在使用两者的 OAuth。
我们和 Scribe 一起去了,对此非常满意。 请注意,这意味着推出您自己的身份验证解决方案,并且可能会限制您的提供商列表,因为每个提供商的做法都不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.