Users Go API 개요

Users API를 사용하여 애플리케이션에서 다음 작업을 수행할 수 있습니다.

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

사용자가 애플리케이션에 로그인되어 있는 동안 앱에서 사용자의 이메일 주소에 액세스할 수 있습니다. 또한 현재 사용자가 관리자인지 여부를 감지하여 앱의 관리자 전용 영역을 쉽게 구현할 수 있도록 합니다. user 패키지의 콘텐츠를 보려면 user 패키지 참조를 확인하세요.

Go의 사용자 인증

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

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcome(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-type", "text/html; charset=utf-8")
	ctx := appengine.NewContext(r)
	u := user.Current(ctx)
	if u == nil {
		url, _ := user.LoginURL(ctx, "/")
		fmt.Fprintf(w, `<a href="%s">Sign in or register</a>`, url)
		return
	}
	url, _ := user.LogoutURL(ctx, "/")
	fmt.Fprintf(w, `Welcome, %s! (<a href="%s">sign out</a>)`, u, url)
}

app.yaml로 로그인 및 관리자 액세스 적용

액세스를 위해 사용자 로그인이 필요한 페이지인 경우 이를 app.yaml 파일에 적용하면 됩니다.

핸들러 구성 시 사용자에게 애플리케이션의 등록된 관리자 권한을 요구할 수도 있습니다. 이 경우 사용자의 역할은 기본 역할인 뷰어, 편집자, 소유자이거나 사전 정의된 역할인 App Engine 앱 관리자여야 합니다. 따라서 별도의 승인 메커니즘을 구현하지 않고도 사이트의 관리자 전용 섹션을 쉽게 빌드할 수 있습니다.

URL 인증 구성 방법은 app.yaml 참조에서 로그인 또는 관리자 상태 요구 방법을 참조하세요.

Go의 OAuth

표준 사용자 인증 모드 외에도 OAuth를 통해 앱에서 사용자를 식별할 수 있습니다. OAuth는 사용자가 사용자 인증 정보(사용자 이름 및 비밀번호)를 제3자와 공유하지 않고도 자신을 대신하여 제3자가 웹 애플리케이션에 액세스할 수 있도록 제한된 권한을 부여할 수 있는 프로토콜입니다. 클라이언트에서 요구하는 상호작용 등 OAuth API에 대한 자세한 내용은 OAuth 문서를 참조하세요.

OAuth를 사용한 사용자 식별은 표준 사용자 인증 모드와 양립할 수 없습니다. 예를 들어 login: required 또는 login: admin으로 표시된 페이지에는 OAuth만 사용해 인증된 사용자를 로드할 수 없습니다.

다음은 Go 요청 핸들러에서 OAuth 사용자 정보에 액세스하는 간단한 예입니다.

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcomeOAuth(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	u, err := user.CurrentOAuth(ctx, "")
	if err != nil {
		http.Error(w, "OAuth Authorization header required", http.StatusUnauthorized)
		return
	}
	if !u.Admin {
		http.Error(w, "Admin login only", http.StatusUnauthorized)
		return
	}
	fmt.Fprintf(w, `Welcome, admin user %s!`, u)
}

인증 옵션

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

  • Google 계정
  • G Suite 도메인의 계정

인증 옵션 선택

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

로그인 및 로그아웃

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

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

Google 계정에 로그인하거나 새 계정을 만든 사용자는 애플리케이션으로 다시 리디렉션됩니다. 앱에는 로그인 URL을 생성하는 메소드에 대한 리디렉션 URL이 표시됩니다.

Users API에는 앱에서 로그아웃하기 위한 URL을 생성하는 메소드가 포함되어 있습니다. 로그아웃 URL에서는 사용자를 앱에서 인증 해제한 후 별도의 메시지 없이 앱의 URL로 다시 리디렉션합니다.

앱에 표시되는 메시지에 사용자 계정의 이메일 주소 및 비밀번호를 입력하지 않으면 로그인할 수 없습니다. 사용자가 Google 계정을 사용해 다른 애플리케이션에 로그인해도 마찬가지입니다.

계정 정보 액세스

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

앱에서는 현재 사용자가 앱 관리자인지 여부도 확인할 수 있습니다. 관리자는 기본 역할인 뷰어, 편집자, 소유자이거나 사전 정의된 역할인 App Engine 앱 관리자에 해당하는 모든 사용자입니다. 이 기능을 사용하면 다른 사용자의 인증 없이 앱의 관리 기능을 구축할 수 있습니다. Go, 자바, PHP, Python API를 사용하면 '관리자 전용' URL을 쉽게 구성할 수 있습니다.

Google 계정 및 개발 서버

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

시험용 로그인 화면에는 시험용 계정이 관리자인지 여부, 즉 기본 역할인 뷰어, 편집자, 소유자나 사전 정의된 역할인 App Engine 앱 관리자에 해당하는지 여부를 나타내는 확인란도 포함되어 있습니다. 이 확인란을 선택하면 앱은 사용자가 관리자 계정으로 로그인한 것처럼 작동합니다.

Users API 역시 시험용 로그인을 취소하는 로그아웃 URL을 반환합니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Go용 App Engine 표준 환경