T.M. SoftStudio

feci quod potui, faciant meliora potentes

Аутентификация и авторизация пользователей GAE-приложения с помощью Google-аккаунта

 

Платформа App Engine с помощью службы Users автоматически обеспечивает проверку аутентификации пользователя в системе Google Accounts.

Служба Users GAE-платформы предоставляет программный интерфейс, обеспечивающий в коде приложения проверку прохождения пользователем аутентификации, а также создание URL-адреса страницы аутентификации клиента и URL-адреса страницы выхода клиента из системы.

 

Программный интерфейс Users API представлен пакетом com.google.appengine.api.users, включающим в себя интерфейс UserService, классы User и UserServiceFactory, исключение UserServiceFailureException.

Объект User, применительно к пользователю Google-аккаунта, содержит такую информацию, как идентификатор пользователя, его логин, а также адрес электронной почты.

Для GAE-приложения можно ограничить число авторизированных пользователей, прошедших аутентификацию с помощью Google-аккаунта, храня User-объекты зарегистрированных для приложения пользователей в Datastore-хранилище платформы App Engine и на JSP-странице с ограниченным доступом проверяя соответствие User-объекта пользователя, зашедшего на страницу, User-объекту, хранящемуся в Datastore-хранилище:

<%@ page import="com.google.appengine.api.users.*" %>

<%@ page import="com.google.appengine.api.datastore.*" %>

<%@ page import="com.google.appengine.api.datastore.Query.*" %>

<%

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

UserService userService = UserServiceFactory.getUserService();

User user = userService.getCurrentUser();

String nickName="";

String email="";

String idUser="";

if (user != null) {

Query qUsers = new Query("Users");

PreparedQuery pq = datastore.prepare(qUsers);

int auth=0;

for (Entity result : pq.asIterable()) {

String id_user = (String) result.getProperty("id_user");

if(id_user.equals(user.getUserId())){

auth=1;

nickName=(String) result.getProperty("nickName");

user=(User)result.getProperty("user");

email=user.getEmail();

idUser=id_user;

}}

if(auth==0){

response.sendRedirect("/");

}}

else{

response.sendRedirect(userService.createLoginURL("/"));

}

%>

В вышеприведенном коде, если пользователь с Google-аккаунтом не зарегистрирован в приложении, он перенаправляется на главную страницу, открытую для всех пользователей. Если же страницу пытается открыть пользователь, не прошедший аутентификацию с помощью Google-аккаунта, он перенаправляется на Google-страницу аутентификации.