15

是否可以使用 App Engine 上的内置 OpenId 实现 SSO?我一直在尝试集成 Marketplace 应用程序并让用户在来自 Google Apps(管理面板或通用导航)时登录。我惨遭失败,然后现在我发现了这个:

“一个例外是执行混合 OpenID/OAuth 的应用程序——白名单目前不适用于这种方法。” (从这里

我假设我必须使用库而不是使用内置库来实现 OpenId 以在我的应用程序中使用 Google Apps 实现 SSO?或者,如果可以使用内置的 OpenId,是否有任何示例说明如何执行此操作?

4

5 回答 5

6

后来谷歌发布了一篇关于如何在 Python 中做到这一点的文章:

http://code.google.com/googleapps/marketplace/tutorial_python_gae.html

总结是:

  • 您必须在 Marketplace 清单 XML 中将您的“OpenID 领域”(应用程序域)列入白名单。
  • 用于 Google 通用导航的入口点必须包含当前的 Google Apps 域。
  • 您应用程序中的入口点将通过 Google Apps 域的用户重定向为federated_identity.

例如:

from google.appengine.api import users

# [...]

login_url = users.create_login_url(dest_url='http://my-app.appspot.com/',
                                   _auth_domain=None,
                                   federated_identity=google_apps_domain_name)
self.redirect(login_url)
于 2011-05-09T15:17:56.403 回答
2

这在 Java 中对我有用:

Set<String> attributesRequest = new HashSet<String>();
String loginRealm = "http://myapp.appspot.com"; //Important that it is exactly the same as in application-manifest.xml, watch out for trailing slashes.
String destinationURL = req.getRequestURI() + "?" + req.getQueryString();
String federatedIdentity = null;
String authDomain = req.getParameter("hd"); //hd is the default parameter name. Contains the google apps domain name of the user logging on. example.com for example.
String loginUrl = userService.createLoginURL(destinationURL, federatedIdentity, authDomain, attributesRequest);     

确保包括

<Edition id="free">
    <Name>Cloud App Studio</Name>
    <Extension ref="navLink" />
    <Extension ref="realm" />
</Edition>

在应用程序清单.xml 中。也就是说,如果它是免费的。重要的部分是包含对领域的引用。

于 2012-01-08T21:28:58.207 回答
1

呃,我还没有完全了解这个功能,但我确实将 JanRain Engage(Stackoverflow 使用)与 GAE 应用程序一起使用。我认为 openid4java 也可以完成这项工作。

于 2010-09-02T03:50:05.183 回答
1

您没有指定您使用的语言。如果是 java,则有用于 openid+oauth 的谷歌库。

http://code.google.com/p/step2/

于 2011-01-05T06:15:40.583 回答
1

你已经知道这个链接了吗?

UserService userService = UserServiceFactory.getUserService();

if (userService.isUserLoggedIn()) {
  User user = userService.getCurrentUser();
  /* ...Do something with user.getFederatedIdentity(), which is the OpenID URL. */
}
于 2011-01-26T07:35:13.483 回答