API Users para serviços agrupados legados

Com a API Users um aplicativo pode:

  • detectar se o usuário atual fez login;
  • redirecionar o usuário para a página de login correta;
  • solicitar que o usuário do aplicativo crie uma nova conta do Google se ainda não tiver uma.

Quando um usuário está conectado, o aplicativo pode acessar o endereço de e-mail dele. O app também pode detectar se o usuário atual é um administrador, também chamado de "usuário administrador". Isso facilita a implementação de áreas exclusivas para administradores do app. Para ver o conteúdo do pacote user, consulte a referência do pacote user.

Autenticação de usuário no Go 1.11

No exemplo a seguir, um usuário que se conectou ao app recebe uma mensagem personalizada de saudação e um link para sair. Se o usuário não estiver conectado, o aplicativo oferece um link para a página de login das Contas do 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)
}

Login e acesso de administrador obrigatórios com app.yaml

Se você tem páginas que exigem que o usuário faça login para acessá-las, é possível aplicar isso no arquivo app.yaml.

A configuração do gerenciador também pode exigir que o usuário seja um administrador registrado no aplicativo, ou seja, o usuário precisa ter o papel de Visualizador, Editor, Proprietário ou Administrador do App Engine. Isso facilita a criação de seções exclusivas para administradores do site, sem a necessidade de implementar um mecanismo de autorização separado.

Para saber como configurar a autenticação de URLs, veja como exigir status de administrador ou login na referência do app.yaml.

OAuth no Go

Além dos modos padrão de autenticação de usuário, os usuários podem ser identificados no aplicativo via OAuth. O protocolo OAuth permite que um usuário conceda a um terceiro permissão limitada para acessar um aplicativo da Web no próprio nome, sem o compartilhamento de credenciais (nome de usuário e senha) com esse terceiro. Mais informações sobre a API OAuth, inclusive a interação exigida pelos clientes, podem ser encontradas na documentação do OAuth.

Observe que o uso do OAuth para a identificação de usuários é completamente ortogonal aos modos padrão de autenticação de usuários. Por exemplo, páginas marcadas com login: required ou login: admin não serão carregadas se o usuário for autenticado somente via OAuth.

Este é um exemplo simples de acesso a informações do usuário do OAuth em um gerenciador de solicitação do Go:

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

Opções de autenticação

O aplicativo pode autenticar usuários usando uma destas opções:

  • uma Conta do Google
  • uma conta no domínio do Google Workspace

Como escolher uma opção de autenticação

Depois de criar o aplicativo, é possível escolher a opção de autenticação que você quer usar. Por padrão, o aplicativo usará Contas do Google para autenticação. Se você quiser escolher outra opção, como o domínio do Google Workspace, acesse a página de configurações do projeto no console do Google Cloud e clique em Editar. No menu suspenso Autenticação do Google, selecione o tipo de autenticação de sua escolha e clique em Salvar.

Como fazer login e logout

Um aplicativo pode detectar se o usuário fez login com a opção de autenticação escolhida do aplicativo. Se o usuário não estiver conectado, ele poderá ser direcionado pelo aplicativo às Contas do Google para fazer login ou criar uma nova conta. O aplicativo obtém o URL da página de login chamando um método da API Users. O aplicativo pode exibir esse URL como um link ou emitir um redirecionamento HTTP para o URL quando o usuário visitar uma página que exija autenticação.

Se o aplicativo usar Contas do Google ou Google Workspace para autenticação, o nome do aplicativo aparecerá na página de login quando o usuário fizer login no aplicativo. O nome mostrado é o nome do aplicativo que você especificou ao registrá-lo. É possível alterar esse nome no campo Nome do aplicativo da página Credenciais do console do Google Cloud.

Depois que o usuário faz login ou cria uma conta do Google, ele é redirecionado para o aplicativo novamente. O aplicativo fornece o URL de redirecionamento ao método que gera o URL de login.

A API Users inclui um método que gera um URL para sair do aplicativo. O URL de logout cancela a autenticação do usuário do aplicativo e o redireciona para o URL do aplicativo sem exibir nada.

Um usuário não estará conectado a um aplicativo até que o login seja solicitado e ele insira o endereço de e-mail e a senha da conta. Isso é válido mesmo se o usuário tiver feito login em outros aplicativos usando a Conta do Google.

Como acessar informações da conta

Enquanto um usuário estiver conectado, o app poderá acessar o endereço de e-mail da conta para cada solicitação feita. O app também terá acesso a um ID exclusivo que identifica o usuário, mesmo que ele altere o endereço de e-mail da conta.

O aplicativo também pode determinar se o usuário atual é um administrador do aplicativo. Um usuário administrador é qualquer usuário que tenha o papel de Leitor, Editor, Proprietário ou Administrador do App Engine. É possível usar essa funcionalidade para criar recursos administrativos para o aplicativo, ainda que você não autentique usuários. As APIs Go, Java, PHP e Python facilitam a configuração de URLs como "somente administrador".

Contas do Google e o servidor de desenvolvimento

O servidor de desenvolvimento simula o sistema de Contas do Google usando uma tela de login falsa. Quando o aplicativo chama a API Users para conseguir o URL da tela de login, a API retorna um URL especial do servidor de desenvolvimento que solicita um endereço de e-mail, mas não uma senha. Digite qualquer endereço de e-mail nessa solicitação e o aplicativo se comportará como se você tivesse feito login usando uma conta com esse endereço.

A tela de login falsa também inclui uma caixa de seleção que indica se a conta falsa é um administrador. Ou seja, se a conta tem o papel de Leitor, Editor, Proprietário ou Administrador do App Engine. você marcar essa caixa de seleção, o aplicativo se comportará como se você tivesse feito login usando uma conta de administrador.

Da mesma forma, a API Users retorna um URL de logout que cancela o login falso.