기존 번들 서비스용 Users API

Users API를 사용하면 애플리케이션에서 다음 작업이 가능합니다.

  • 현재 사용자가 로그인했는지 여부 감지
  • 로그인을 위해 사용자를 적절한 로그인 페이지로 리디렉션
  • Google 계정이 아직 없는 애플리케이션 사용자에게 새 계정을 만들도록 요청

사용자가 애플리케이션에 로그인되어 있는 동안 앱은 사용자의 이메일 주소에 액세스할 수 있습니다. 또한 현재 사용자가 관리자인지를 감지하여 앱의 관리자 전용 영역을 쉽게 구현할 수 있도록 합니다.

자바 8에서 사용자 인증

다음 예시에서는 앱에 로그인한 사용자에게 맞춤설정된 메시지와 로그아웃 링크를 표시합니다. 사용자가 로그인되어 있지 않으면 Google 계정의 로그인 페이지 링크가 표시됩니다.

표준 서블릿 API를 사용하여 요청 객체의 getUserPrincipal() 메서드로 사용자 로그인 여부를 테스트하고 사용자 이메일 주소를 가져올 수 있습니다. 사용자 서비스 API를 사용하여 로그인 및 로그아웃 URL을 생성할 수 있습니다.


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>");
    }
  }
}

사용자 서비스 API는 현재 사용자의 정보를 User 객체로 반환할 수 있습니다. User 객체를 Datastore에 속성 값으로 저장할 수도 있지만, 이 객체에는 사용자의 고유 ID와 함께 이메일 주소가 포함되어 있으므로 저장하지 않는 것이 좋습니다. 사용자가 자신의 이메일 주소를 변경하고 이전에 저장한 User 값과 새 User 값을 비교하면 서로 일치하지 않게 됩니다. 대신 User 사용자 ID 값을 사용자의 안정적인 고유 식별자로 사용해 보세요.

web.xml을 사용한 로그인 및 관리자 액세스 적용

사용자가 로그인해야 액세스할 수 있는 페이지가 있는 경우 배포 설명자(web.xml 파일)에서 이러한 페이지에 보안 제약조건을 설정할 수 있습니다. 로그인하지 않은 사용자가 보안 제약조건이 있는 URL에 액세스하면 App Engine에서 자동으로 해당 사용자를 로그인 페이지로 리디렉션하고(Google 계정 또는 Google Workspace 인증의 경우), 사용자가 로그인 또는 등록을 마치면 원래 URL로 다시 안내합니다.

보안 제약조건에서 사용자가 애플리케이션의 등록된 관리자여야 한다고 지정되어 있을 수도 있습니다. 이 경우 사용자에게 뷰어, 편집자, 소유자, App Engine 관리자 역할이 있어야 합니다. 이렇게 하면 별도의 승인 메커니즘을 구현하지 않고도 간편하게 사이트의 관리자 전용 섹션을 구축할 수 있습니다.

URL에 보안 제약조건을 설정하는 방법은 web.xml배포 설명자: 보안 및 인증을 참조하세요.

인증 옵션

앱에서 다음 옵션 중 하나를 통해 사용자를 인증할 수 있습니다.

  • Google 계정
  • Google Workspace 도메인의 계정

인증 옵션 선택

앱을 만든 후 사용할 인증 옵션을 선택할 수 있습니다. 기본적으로는 앱에서 Google 계정이 인증에 사용됩니다. Google Workspace 도메인과 같은 다른 옵션을 선택하려면 Google Cloud Console에서 프로젝트의 설정 페이지로 이동하고 수정을 클릭합니다. Google 인증 드롭다운 메뉴에서 원하는 인증 유형을 선택한 후 저장을 클릭합니다.

로그인 및 로그아웃

애플리케이션은 앱에서 선택된 인증 옵션으로 사용자가 앱에 로그인했는지 여부를 감지할 수 있습니다. 사용자가 로그인하지 않은 경우 앱에서 사용자가 로그인하거나 새 Google 계정을 만들 수 있도록 Google 계정으로 안내할 수 있습니다. 앱은 Users API의 메서드를 호출하여 로그인 페이지의 URL을 가져옵니다. 앱은 이 URL을 링크로 표시하거나 사용자가 인증이 필요한 페이지를 방문할 때 해당 URL로 이동하는 HTTP 리디렉션을 실행할 수 있습니다.

앱에서 인증에 Google 계정 또는 Google Workspace를 사용하는 경우 사용자가 애플리케이션에 로그인하면 로그인 페이지에 애플리케이션 이름이 표시됩니다. 이때 표시되는 이름은 애플리케이션을 등록할 때 지정한 애플리케이션 이름입니다. 이 이름은 Google Cloud Console 사용자 인증 정보 페이지의 애플리케이션 이름 필드에서 변경할 수 있습니다.

로그인 또는 Google 계정 생성을 마친 사용자는 애플리케이션으로 다시 리디렉션됩니다. 앱은 로그인 URL을 생성하는 메서드에 리디렉션 URL을 제공합니다.

Users API에는 앱에서 로그아웃하기 위한 URL을 생성하는 메서드가 포함되어 있습니다. 로그아웃 URL은 사용자를 앱에서 인증 해제한 다음 아무것도 표시하지 않고 앱의 URL로 다시 리디렉션합니다.

앱에 로그인하라는 메시지가 표시되고 사용자가 계정의 이메일 주소와 비밀번호를 입력할 때까지 사용자는 애플리케이션에 로그인되지 않습니다. 사용자가 자신의 Google 계정으로 다른 애플리케이션에 로그인한 경우에도 마찬가지입니다.

계정 정보 액세스

사용자가 앱에 로그인되어 있는 동안에는 사용자가 앱에 요청을 보낼 때마다 앱이 계정의 이메일 주소에 액세스할 수 있습니다. 또한 사용자가 계정의 이메일 주소를 변경해도 앱은 사용자를 고유하게 식별하는 사용자 ID에 액세스할 수 있습니다.

또한 앱은 현재 사용자가 앱의 관리자인지 여부를 확인할 수 있습니다. 관리자는 뷰어, 편집자, 소유자, App Engine 관리자 역할을 가진 모든 사용자입니다. 이 기능을 사용하면 다른 사용자를 인증할 필요 없이 앱의 관리 기능을 빌드할 수 있습니다. Go, 자바, PHP, Python API를 사용하여 '관리자 전용' URL을 쉽게 구성할 수 있습니다.

사용자 및 Datastore

사용자 서비스 API는 현재 사용자의 정보를 User 객체로 반환할 수 있습니다. User 객체를 Datastore에 속성 값으로 저장할 수도 있지만, 이 객체에는 사용자의 고유 ID와 함께 이메일 주소가 포함되어 있으므로 저장하지 않는 것이 좋습니다. 사용자가 자신의 이메일 주소를 변경하고 이전에 저장한 User 값과 새 User 값을 비교하면 서로 일치하지 않게 됩니다. 대신 User 사용자 ID 값을 사용자의 안정적인 고유 식별자로 사용해 보세요.

Google 계정 및 개발 서버

개발 서버는 허위 로그인 화면을 사용하여 Google 계정 시스템을 시뮬레이션합니다. 애플리케이션이 Users API를 호출하여 로그인 화면의 URL을 가져오면 이 API가 비밀번호는 묻지 않고 이메일 주소만 요청하는 특별한 개발 서버 URL을 반환합니다. 메시지가 표시될 때 임의의 이메일 주소를 입력하면 사용자가 해당 주소의 계정으로 로그인한 것처럼 앱이 동작합니다.

또한 허위 로그인 화면에는 허위 계정이 관리자인지 여부, 즉 계정이 뷰어, 편집자, 소유자, App Engine 관리자 역할을 가지고 있는지 여부를 표시하는 체크박스가 있습니다. 이 체크박스를 선택하면 앱이 사용자가 관리자 계정으로 로그인한 것처럼 동작합니다.

마찬가지로, Users API는 허위 로그인을 취소하는 로그아웃 URL을 반환합니다.