Единый вход в Google Apps + App Engine - PullRequest
14 голосов
/ 28 августа 2010

Можно ли добиться единого входа со встроенным OpenId в App Engine?Я пытался интегрировать приложение Marketplace и войти в систему, когда пользователь заходил из Служб Google (панель администратора или универсальная навигация).Я потерпел неудачу, но теперь я обнаружил следующее:

«Единственное исключение - это приложения, которые используют гибридные OpenID / OAuth - белый список в настоящее время не работает с этим подходом».(из здесь )

Я предполагаю, что мне нужно реализовать OpenId с использованием библиотеки вместо использования встроенной для достижения единого входа с Google Apps в моем приложении?Или, если это возможно с помощью встроенного OpenId, есть ли где-нибудь пример, показывающий, как это сделать?

Ответы [ 5 ]

6 голосов
/ 09 мая 2011

Позже Google опубликовал статью о том, как это сделать в Python:

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

Резюме:

  • Вы должны внести в белый список свою «область OpenID» (домен приложения) в XML-коде Marketplace.
  • Точка входа, используемая для универсальной навигации Google, должна содержать текущий домен Служб Google.
  • Точка входа в вашем приложении перенаправляет пользователя, проходящего домен 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)
2 голосов
/ 09 января 2012

Это сработало для меня в 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>

в application-manifest.xml. Это если бесплатно. Важной частью является включение ссылки на царство.

1 голос
/ 05 января 2011

вы не указали, какой язык вы используете.если это java, есть библиотека google для openid + oauth.

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

1 голос
/ 26 января 2011

Вы уже знали эту ссылку ?

UserService userService = UserServiceFactory.getUserService();

if (userService.isUserLoggedIn()) {
  User user = userService.getCurrentUser();
  /* ...Do something with user.getFederatedIdentity(), which is the OpenID URL. */
}
1 голос
/ 02 сентября 2010

Э-э, у меня нет полной информации об этой функции, но я использую оба JanRain Engage (который использует Stackoverflow) с приложениями GAE. Я думаю, что openid4java мог бы сделать работу также.

...