Единый вход с Google Apps + App Engine
Можно ли создать SSO со встроенным OpenId в App Engine? Я пытаюсь интегрировать приложение Marketplace и запускать пользователя, входящего в Google Apps (панель администратора или универсальная навигация). Я потерпел неудачу, и теперь я нашел это:
"Единственное исключение из этого - приложения, которые делают гибридный OpenID/OAuth -" белый список "в настоящее время не работает с этим подходом". (от здесь)
Я предполагаю, что мне нужно реализовать OpenId, используя библиотеку вместо того, чтобы использовать встроенный для достижения единого входа в Google Apps в моем приложении? Или, если это возможно со встроенным OpenId, есть ли где-нибудь пример, который показывает, как это сделать?
Ответы
Ответ 1
Позже Google опубликовал статью о том, как это сделать в Python:
http://code.google.com/googleapps/marketplace/tutorial_python_gae.html
Резюме:
- В XML-манифесте Marketplace вы должны включить белый список "область 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)
Ответ 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>
в application-manifest.xml. То есть, если это бесплатно. Важная часть состоит в том, чтобы включить ref в область.
Ответ 3
Err, у меня нет полной поддержки этой функции, но я использую как JanRain Engage (который использует Stackoverflow), так и приложения GAE. Я думаю, что openid4java тоже может выполнить эту работу.
Ответ 4
вы не указали, какой язык вы используете. если это java, есть библиотека google для openid + oauth.
http://code.google.com/p/step2/
Ответ 5
Вы уже знаете эту ссылку?
UserService userService = UserServiceFactory.getUserService();
if (userService.isUserLoggedIn()) {
User user = userService.getCurrentUser();
/* ...Do something with user.getFederatedIdentity(), which is the OpenID URL. */
}