繁体   English   中英

App Engine Java 联合身份登录始终重定向到 Google 登录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM