Google Code предлагается на следующих языках: English – Español – 日本語 – 한국어 – Português – Pусский – 中文(简体) – 中文(繁體)
Приложения App Engine могут аутентифицировать пользователей с помощью аккаунтов Google. Приложение может определить, выполнил ли пользователь вход с помощью аккаунта Google. Если нет, оно может перенаправить его на страницу аккаунтов Google для выполнения входа или создания нового аккаунта. Когда пользователь выполняет вход в приложение, оно может получить доступ к его адресу электронной почты. Кроме того, приложение может определить, является ли текущий пользователь администратором, тем самым упрощая реализацию областей работы, доступных только администраторам.
В App Engine имеется дополнительная функция интеграции с аккаунтами Google. Если интеграция с аккаунтами Google не требуется, всегда можно создать собственную систему аутентификации пользователей. Аккаунты Google предлагают надежный и удобный механизм аутентификации с богатым набором функций и миллионами активных пользователей.
Можно проверить, выполнил ли пользовать вход с помощью аккаунта Google и получить его адрес электронной почты, используя стандартный API сервлетов с методом объекта запроса getUserPrincipal(). API службы пользователей можно использовать, чтобы создать URL для выполнения входа и выхода.
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
String thisURL = request.getRequestURI();
if (request.getUserPrincipal() != null) {
response.getWriter().println("<p>Hello, " +
request.getUserPrincipal().getName() +
"! You can <a href=\"" +
userService.createLogoutURL(thisURL) +
"\">sign out</a>.</p>");
} else {
response.getWriter().println("<p>Please <a href=\"" +
userService.createLoginURL(thisURL) +
"\">sign in</a>.</p>");
}
}
}
API службы пользователей может вернуть информацию о текущем пользователе в объекте User. Эти объекты можно сохранить в хранилище данных в качестве значений свойств.
Чтобы разрешить доступ к страницам только пользователям, выполнившим вход, можно установить для этих страниц ограничение безопасности в дескрипторе развертывания (в файле web.xml). Если пользователь, не выполнив вход, пытается перейти по URL с ограничением безопасности, App Engine автоматически перенаправляет его на страницу входа в аккаунт Google, а затем после успешного входа или регистрации перенаправляет обратно по первоначальному URL.
Ограничение безопасности может также подразумевать, что пользователь должен быть зарегистрированным администратором приложения. Это позволяет реализовывать разделы сайта, доступные только администраторам, без необходимости создания отдельного механизма авторизации.
Задание ограничений безопасности для URL описано в статье Дескриптор развертывания: безопасность и аутентификация.
Приложение может определить, выполнил ли пользователь вход с помощью аккаунта Google. Если нет, оно может перенаправить его на страницу аккаунтов Google для выполнения входа или создания нового аккаунта. Приложение получает URL страницы входа в аккаунт Google, вызывая метод API пользователей. Приложение может отобразить этот URL в виде ссылки или вызвать HTTP-перенаправление по этому URL-адресу, когда пользователь посетит страницу, требующую аутентификации.
На странице входа в аккаунт Google отображаются сведения о входе в ваше приложение, в том числе его название, заданное при регистрации. Название приложения можно изменить в разделе Консоли администрирования "Настройки приложения".
После входа или создания аккаунта Google выполняется перенаправление пользователя обратно в ваше приложение. Приложение передает URL перенаправления методу, который создает URL входа.
API пользователей также содержит метод, позволяющий создать URL выхода из приложения. URL выхода отменяет аутентификацию пользователя в приложении и перенаправляет его обратно по URL приложения без отображения каких-либо сведений.
Чтобы выполнить вход в приложение, при получении от него соответствующего запроса пользователь должен ввести адрес электронной почты своего аккаунта и пароль. Это необходимо даже в случае, когда пользователь уже вошел в другие приложения с помощью своего аккаунта Google.
Когда пользователь выполняет вход в приложение, приложение может получить адрес электронной почты аккаунта этого пользователя при каждом его запросе.
Приложение также может определить, является ли текущий пользователь администратором ("разработчиком") этого приложения. С помощью этой функции можно создавать административные функции приложения, даже если вы не используете аккаунты Google для аутентификации других пользователей. API Java и API Python упрощают настройку URL "только для администраторов".
Хранилище данных App Engine поддерживает сохранение объектов User, возвращаемых API аккаунтов Google, в виде специального типа значений. На момент подготовки этой статьи значения User не идентифицируют пользователей стабильно: если приложение сохраняет значение User, а пользователь изменяет свой адрес электронной почты, это значение перестает указывать на действительного пользователя. В действительности пользователи редко меняют адреса электронной почты своих аккаунтов Google, однако эти редкие случаи стоит предусмотреть. Вполне возможно, что в будущем обновлении службы будет предусмотрено автоматическое обновление значений User в хранилище данных. До тех пор рассчитывать на стабильную работу этих значений не следует.
В настоящее время API Java не предоставляет уникальных идентификаторов пользователей, отличных от адресов электронной почты.
Сервер разработки имитирует систему аккаунтов Google с помощью фиктивной страницы входа. Когда приложение вызывает API пользователей для получения URL-адреса страницы входа, API возвращает специальный URL сервера разработки, который запрашивает адрес электронной почты, но не запрашивает пароль. В этом запросе можно указать любой адрес электронной почты, и приложение будет вести себя так, как если бы вы вошли в аккаунт Google с помощью этого адреса.
Кроме того, на фиктивной странице входа есть флажок, который позволяет указать, является ли фиктивный аккаунт аккаунтом администратора. Если установить этот флажок, приложение будет вести себя так, как если бы вы выполнили вход с помощью аккаунта администратора.
Аналогичным образом API пользователей возвращает URL выхода из аккаунта, отменяющий фиктивный вход.