Descripción general de la API de usuarios para Java 8

La API de usuarios le permite a una aplicación:

  • Detectar si el usuario actual ha accedido
  • Redireccionar al usuario a la página de acceso correcta
  • Solicitar que el usuario de tu aplicación cree una Cuenta de Google nueva si aún no lo ha hecho

Cuando un usuario accede a la app, esta puede acceder a la dirección de correo electrónico del usuario. La aplicación también puede detectar si el usuario actual es un administrador (o “usuario admin”), lo que facilita la implementación de áreas exclusivas para administradores.

Autenticación de usuario en Java 8

En el siguiente ejemplo, se recibe a un usuario que accedió a la app con un mensaje personalizado y un vínculo para salir. Si el usuario no accedió, la app le ofrece un vínculo a la página de acceso de Cuentas de Google.

Puedes probar si el usuario accedió y obtener la dirección de correo electrónico del usuario con la API de servlet estándar, con el método getUserPrincipal() del objeto de solicitud. Puedes usar la API de servicio de usuarios para generar URL de inicio y cierre de sesión.


package com.example.appengine.users;

import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
@WebServlet(
    name = "UserAPI",
    description = "UserAPI: Login / Logout with UserService",
    urlPatterns = "/userapi"
)
public class UsersServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    UserService userService = UserServiceFactory.getUserService();

    String thisUrl = req.getRequestURI();

    resp.setContentType("text/html");
    if (req.getUserPrincipal() != null) {
      resp.getWriter()
          .println(
              "<p>Hello, "
                  + req.getUserPrincipal().getName()
                  + "!  You can <a href=\""
                  + userService.createLogoutURL(thisUrl)
                  + "\">sign out</a>.</p>");
    } else {
      resp.getWriter()
          .println(
              "<p>Please <a href=\"" + userService.createLoginURL(thisUrl) + "\">sign in</a>.</p>");
    }
  }
}

La API de servicio de usuarios puede mostrar la información del usuario actual como un objeto de usuario. Si bien los objetos de usuario pueden almacenarse como un valor de propiedad en el almacén de datos, recomendamos que lo evites porque esto incluye la dirección de correo electrónico junto con el ID único del usuario. Si un usuario cambia su dirección de correo electrónico y la comparas su User anterior almacenado con el valor de User nuevo, no coincidirán. En su lugar, considera usar el valor de ID de usuario User como el identificador único estable del usuario.

Aplica el ingreso y acceso de administrador con web.xml

Si tienes páginas a las que el usuario no debería poder acceder si no inició sesión, puedes establecer una restricción de seguridad para esas páginas en el descriptor de implementación (el archivo web.xml). Si un usuario que no ingresó accede a una URL con una restricción de seguridad, App Engine lo redirecciona de forma automática a la página de acceso (para la autenticación de Cuentas de Google o G Suite) y, después de que acceda o se registre con éxito, lo redirige de vuelta a la URL.

Una restricción de seguridad también puede requerir que el usuario sea un administrador de la aplicación registrado, es decir, que tenga la función básica de lector, editor o propietario, o la función predeterminada de administrador de apps de App Engine. Esto facilita la compilación de secciones del sitio exclusivas para el administrador, sin tener que implementar un mecanismo de autorización separado.

Si deseas obtener información sobre cómo establecer restricciones de seguridad para las URL, consulta El descriptor de implementación: seguridad y autenticación de web.xml.

Opciones de autenticación

Tu app puede autenticar usuarios con una de estas opciones:

  • Una Cuenta de Google
  • Una cuenta en tu dominio de G Suite

Elige una opción de autenticación

Después de crear tu app, puedes elegir la opción de autenticación que quieres usar. Según la configuración predeterminada, la app usará Cuentas de Google para la autenticación. Para elegir otra opción, como el dominio de G Suite, ve a la página de configuración del proyecto en Google Cloud Console y haz clic en Editar. En el menú desplegable Autenticación de Google, selecciona el tipo de autenticación deseado y haz clic en Guardar.

Acceso y salida

Una aplicación puede detectar si un usuario accedió a tu app con la opción de autenticación que elegiste para ella. Si el usuario no accedió, la app puede dirigirlo a Cuentas de Google para que acceda o cree una Cuenta de Google nueva. La aplicación obtiene la URL de la página de acceso mediante una llamada a un método de la API de usuarios. La app puede mostrar esta URL como un vínculo o puede emitir un redireccionamiento HTTP a la URL cuando el usuario visita una página que requiere autenticación.

Si tu app usa Cuentas de Google o G Suite para la autenticación, el nombre de tu aplicación aparece en la página de acceso cuando el usuario ingresa a ella. El nombre que aparece es el nombre de aplicación que especificas cuando la registras. Puedes cambiar este nombre en el campo Nombre de la aplicación de la página Credenciales de Google Cloud Console.

Una vez que el usuario accede o crea una Cuenta de Google, se lo redirecciona de vuelta a tu aplicación. La app proporciona la URL de redireccionamiento al método que genera la URL de acceso.

La API de usuarios incluye un método para generar una URL a fin de salir de la app. La URL de cierre de sesión anula la autenticación del usuario de la app y, luego, lo redirecciona a la URL de la app sin mostrar nada.

Un usuario no accede a una app hasta que esta le solicita que lo haga y el usuario ingresa la dirección de correo electrónico de su cuenta y la contraseña. Esto se aplica incluso si el usuario ha accedido a otras aplicaciones con su Cuenta de Google.

Accede a la información de la cuenta

Una vez que un usuario accedió a una app, esta puede acceder a la dirección de correo electrónico de la cuenta para cada solicitud que el usuario haga a la app. La app también puede acceder a un ID de usuario que identifica al usuario de forma exclusiva, incluso si el usuario cambia la dirección de correo electrónico de su cuenta.

La app también puede determinar si el usuario actual es un administrador de la app. Un usuario administrador es cualquier usuario que tenga la función básica de Visualizador, Editor o Propietario, o la función predefinida de Administrador de aplicación de App Engine. Puedes usar esta característica para compilar características administrativas en la app, incluso si no autenticas a otros usuarios. Las API de Go, Java, PHP y Python facilitan la configuración de URL como "exclusivo para administradores".

Los usuarios y Datastore

La API de servicio de usuarios puede mostrar la información del usuario actual como un objeto de usuario. Si bien los objetos de usuario pueden almacenarse como un valor de propiedad en el almacén de datos, recomendamos que lo evites porque esto incluye la dirección de correo electrónico junto con el ID único del usuario. Si un usuario cambia su dirección de correo electrónico y la comparas su User anterior almacenado con el valor de User nuevo, no coincidirán. En su lugar, considera usar el valor de ID de usuario User como el identificador único estable del usuario.

Cuentas de Google y servidor de desarrollo

El servidor de desarrollo simula el sistema de Cuentas de Google con una pantalla de acceso ficticia. Cuando tu aplicación llama a la API de usuarios para obtener la URL de la página de acceso, la API muestra la URL de un servidor de desarrollo especial que solicita una dirección de correo electrónico, pero no la contraseña. Puedes ingresar cualquier dirección de correo electrónico y la app se comportará como si hubieses accedido con una cuenta asociada a esa dirección.

La pantalla de acceso ficticia también muestra una casilla de verificación que indica si la cuenta ficticia es de administrador; es decir, si tiene la función básica de visualizador, editor o propietario, o la función predeterminada de administrador de la aplicación de App Engine. Si marcas esta casilla, la app se comportará como si hubieses accedido con una cuenta de administrador.

Del mismo modo, la API de usuarios muestra una URL de cierre de sesión que cancela el acceso ficticio.