
Uma API baseada em JWT para gerenciar usuários e emitir tokens JWT
Auth é um servidor de gerenciamento de usuários e autenticação escrito em Go que alimenta os recursos do Supabase, tais como:
Ele é originalmente baseado no excelente código-fonte do GoTrue da Netlify, no entanto, ambos divergiram significativamente em recursos e capacidades.
Se você deseja contribuir com o projeto, consulte o guia de contribuição.
Crie um arquivo .env para armazenar suas próprias variáveis de ambiente personalizadas. Consulte example.env
docker-compose -f docker-compose-dev.yml up postgresmake build . Você deve ver uma saída como esta:```bash
go build -ldflags "-X github.com/supabase/auth/cmd.Version=git rev-parse HEAD"
GOOS=linux GOARCH=arm64 go build -ldflags "-X github.com/supabase/auth/cmd.Version=git rev-parse HEAD" -o gotrue-arm643. Execute o binário auth: `./auth`
### Se você tiver o Docker instalado
Crie um arquivo `.env.docker` para armazenar suas próprias variáveis de ambiente personalizadas. Veja [`example.docker.env`](https://github.com/supabase/auth/blob/HEAD/example.docker.env)
1. `make build`
2. `make dev`
3. `docker ps` deve mostrar dois contêineres Docker (`auth-auth-1` e `auth-postgres-1`)
4. É isso! Visite o [endpoint de verificação de saúde](http://localhost:9999/health) para confirmar que o auth está em execução.
## Executando em produção
Executar um servidor de autenticação em produção não é uma tarefa fácil. Nós
recomendamos usar o [Supabase Auth](https://supabase.com/auth), que recebe
atualizações regulares de segurança.
Caso contrário, certifique-se de configurar um processo para atualizar prontamente para a
versão mais recente. Você pode fazer isso acompanhando este repositório, especificamente as
seções [Releases](https://github.com/supabase/auth/releases) e [Security
Advisories](https://github.com/supabase/auth/security/advisories).
### Compatibilidade com versões anteriores
Auth usa o esquema de [Versionamento Semântico](https://semver.org). Aqui estão algumas
esclarecimentos adicionais sobre as garantias de compatibilidade com versões anteriores:
**Compatibilidade com a API Go**
Auth não foi projetado para ser usado como uma biblioteca Go. Não há garantias de
compatibilidade retroativa da API quando usado dessa forma, independentemente do
número da versão que mudar.
**Patch**
Alterações na versão de patch garantem compatibilidade com versões anteriores com:
- Objetos de banco de dados (tabelas, colunas, índices, funções).
- API REST
- Estrutura do JWT
- Configuração
Exemplos garantidos:
- Uma coluna não mudará seu tipo.
- Uma tabela não mudará sua chave primária.
- Um índice não será removido.
- Uma restrição de unicidade não será removida.
- Uma API REST não será removida.
- Os parâmetros das APIs REST funcionarão de forma equivalente a antes (ou melhor, se um bug
tiver sido corrigido).
- A configuração não mudará.
Exemplos não garantidos:
- Uma tabela pode adicionar novas colunas.
- As colunas de uma tabela podem ser reordenadas.
- Restrições não únicas podem ser removidas (verificações de nível de banco de dados, valores nulos, valores
padrão).
- O JWT pode adicionar novas propriedades.
**Minor**
Alterações na versão minor garantem compatibilidade com versões anteriores com:
- API REST
- Estrutura do JWT
- Configuração
Exceções a essas garantias só serão feitas quando problemas graves de segurança
forem encontrados e não puderem ser remediados de outra forma.
Exemplos garantidos:
- APIs existentes podem ser descontinuadas, mas continuarão funcionando pelas próximas
versões minor.
- Alterações de configuração podem ser descontinuadas, mas continuarão funcionando pelas
próximas versões minor.
- JWTs já emitidos serão aceitos, mas novos JWTs podem ter uma estrutura diferente
(mas geralmente semelhante).
Exemplos não garantidos:
- Remoção de campos do JWT após um aviso de descontinuação.
- Remoção de certas APIs após um aviso de descontinuação.
- Remoção do login com provedores externos, após um aviso de descontinuação.
- Exclusão, truncamento, alterações significativas de esquema em tabelas, índices, visões,
funções.
Nosso objetivo é fornecer um aviso de descontinuação nos logs de execução por pelo menos duas
versões principais ou duas semanas se várias versões forem lançadas. A compatibilidade será
garantida enquanto o aviso estiver ativo.
**Major**
Alterações na versão major não garantem nenhuma compatibilidade com
as versões anteriores.
### Recursos herdados
Certos recursos herdados da base de código do Netlify não são suportados pelo
Supabase e podem ser removidos sem aviso prévio no futuro. Esta é uma
lista abrangente desses recursos:
1. Multi-tenência por meio da tabela `instances`, ou seja, `GOTRUE_MULTI_INSTANCE_MODE`
parâmetro de configuração.
2. Usuário do sistema (usuário UUID zero).
3. Super administrador por meio da coluna `is_super_admin`.
4. Informações de grupo em JWTs por meio de `GOTRUE_JWT_ADMIN_GROUP_NAME` e outros
campos de configuração.
5. Assinatura de JWT. O Supabase Auth suporta chaves assimétricas (RS256 por padrão;
ECC/Ed25519 opcional). HS256 ainda é suportado para compatibilidade, mas
a migração para chaves assimétricas é recomendada para validação e rotação
mais fáceis. Futuras descontinuações serão anunciadas no changelog. Consulte as
[Chaves de assinatura de JWT](https://supabase.com/docs/guides/auth/signing-keys) e
o [guia de JWTs](https://supabase.com/docs/guides/auth/jwts) para obter detalhes.
Observe que esta não é uma lista exaustiva e ela pode mudar.
### Boas práticas ao fazer self-hosting
Estas são algumas boas práticas a seguir ao fazer self-hosting para garantir a
retrocompatibilidade com o Auth:
1. Não modifique o esquema gerenciado pelo Auth. Você pode ver todas as
migrações no diretório `migrations`.
2. Não confie no esquema e na estrutura dos dados no banco de dados. Use sempre
as APIs do Auth e JWTs para inferir informações sobre os usuários.
3. Execute sempre o Auth atrás de um proxy compatível com TLS, como um balanceador de carga, CDN,
nginx ou outro software semelhante.
## Configuração
Você pode configurar o Auth usando um arquivo de configuração chamado `.env`,
variáveis de ambiente ou uma combinação de ambos. As variáveis de ambiente são prefixadas com `GOTRUE_` e sempre terão precedência sobre os valores fornecidos via arquivo.
### Nível superior```properties
GOTRUE_SITE_URL=https://example.netlify.com/
SITE_URL - string obrigatório
A URL base onde o seu site está localizado. Atualmente usada em combinação com outras configurações para construir URLs usadas em emails. Qualquer URI que compartilhe um host com SITE_URL é um valor permitido para os parâmetros redirect_to (consulte /authorize etc.).
URI_ALLOW_LIST - string
Uma lista separada por vírgulas de URIs (por exemplo, "https://foo.example.com,https://*.foo.example.com,https://bar.example.com") que são permitidas como destinos redirect_to válidos. O padrão é []. Suporta correspondência curinga por meio de globbing. Por exemplo, https://*.foo.example.com permitirá que https://a.foo.example.com e https://b.foo.example.com sejam aceitas. O globbing também é suportado em subdomínios. Por exemplo, https://foo.example.com/* permitirá que https://foo.example.com/page1 e https://foo.example.com/page2 sejam aceitas.
Para padrões glob mais comuns, consulte o seguinte link.
OPERATOR_TOKEN - string somente no modo multi-instância
O segredo compartilhado com um operador (geralmente Netlify) para este microsserviço. Usado para verificar se as solicitações foram encaminhadas por meio do operador e se os valores do payload podem ser confiáveis.
DISABLE_SIGNUP - bool
Quando o cadastro está desabilitado, a única maneira de criar novos usuários é por meio de convites. O padrão é false, todos os cadastros habilitados.
GOTRUE_EXTERNAL_EMAIL_ENABLED - bool
Use isto para desabilitar cadastros por email (os usuários ainda podem usar provedores OAuth externos para se cadastrar / entrar)
GOTRUE_EXTERNAL_PHONE_ENABLED - bool
Use isto para desabilitar cadastros por telefone (os usuários ainda podem usar provedores OAuth externos para se cadastrar / entrar)
GOTRUE_RATE_LIMIT_HEADER - string
Cabeçalho no qual aplicar limite de taxa ao endpoint /token. Espera-se que este cabeçalho seja definido por um proxy upstream confiável (como Kong ou Envoy). Cabeçalhos como x-forwarded-for podem ser falsificados e não são confiáveis para limitação de taxa quando fornecidos diretamente pelo cliente.
GOTRUE_RATE_LIMIT_EMAIL_SENT - string
Limite a taxa de envio de emails por hora nos seguintes endpoints: /signup, /invite, /magiclink, /recover, /otp, & /user.
GOTRUE_PASSWORD_MIN_LENGTH - int
Tamanho mínimo da senha, o padrão é 6.
GOTRUE_PASSWORD_REQUIRED_CHARACTERS - uma string de conjuntos de caracteres separados por :. Uma senha deve conter pelo menos um caractere de cada conjunto para ser aceita. Para usar o caractere :, escape-o com \.
GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED - bool
Se a rotação do refresh token estiver habilitada, a autenticação detectará automaticamente tentativas maliciosas de reutilizar um refresh token revogado. Quando uma tentativa maliciosa é detectada, o GoTrue revoga imediatamente todos os tokens que descendem do token ofensor.
GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL - string
Esta configuração só é aplicável se GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED estiver habilitada. O intervalo de reutilização de um refresh token permite trocar o refresh token várias vezes durante o intervalo para suportar problemas de concorrência ou offline. Durante o intervalo de reutilização, a autenticação não considerará o uso de um token revogado como uma tentativa maliciosa e simplesmente retornará o refresh token filho.
Apenas o token revogado anterior pode ser reutilizado. Usar um refresh token antigo muito antes do refresh token válido atual acionará a detecção de reutilização.
GOTRUE_API_HOST=localhost PORT=9999 API_EXTERNAL_URL=http://localhost:9999
`API_HOST` - `string`
Hostname para escutar.
`PORT` (sem prefixo) / `API_PORT` - `number`
Número da porta para escutar. O padrão é `8081`.
`API_ENDPOINT` - `string` _Somente no modo multi-instância_
Controla em qual endpoint a Netlify pode acessar esta API.
`API_EXTERNAL_URL` - `string` **obrigatório**
A URL na qual o GoTrue pode ser acessado.
`REQUEST_ID_HEADER` - `string`
Se desejar herdar um ID de requisição da solicitação de entrada, especifique o nome neste valor.
### Banco de dados```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
DB_DRIVER - string obrigatório
Escolhe qual dialeto de banco de dados você deseja. Deve ser postgres.
DATABASE_URL (sem prefixo) / DB_DATABASE_URL - string obrigatório
String de conexão para o banco de dados.
GOTRUE_DB_MAX_POOL_SIZE - int
Define o número máximo de conexões abertas com o banco de dados. O padrão é 0, o que equivale a um número "ilimitado" de conexões.
DB_NAMESPACE - string
Adiciona um prefixo a todos os nomes de tabelas.
Nota sobre Migrações
As migrações são aplicadas automaticamente quando você executa ./auth. No entanto, você também tem a opção de reexecutá-las pelos seguintes métodos:
./auth migratedocker run --rm auth gotrue migrateLOG_LEVEL=debug # available without GOTRUE prefix (exception) GOTRUE_LOG_FILE=/var/log/go/auth.log
`LOG_LEVEL` - `string`
Controla quais níveis de log são exibidos. Escolha entre `panic`, `fatal`, `error`, `warn`, `info` ou `debug`. O padrão é `info`.
`LOG_FILE` - `string`
Se desejar que os logs sejam gravados em um arquivo, defina `log_file` como um caminho de arquivo válido.
### Observabilidade
O Auth tem observabilidade básica integrada. Ele é capaz de exportar métricas e traces do [OpenTelemetry](https://opentelemetry.io) para um coletor.
#### Tracing
Para habilitar o tracing, configure estas variáveis:
`GOTRUE_TRACING_ENABLED` - `bool`
`GOTRUE_TRACING_EXPORTER` - `string` apenas `opentelemetry` é suportado
Certifique-se de também configurar o [OpenTelemetry Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/) para o seu coletor ou serviço.
Por exemplo, se você usa o [Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution), defina estas variáveis padrão OTLP do OpenTelemetry:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
Para ativar métricas, configure estas variáveis:
GOTRUE_METRICS_ENABLED - boolean
GOTRUE_METRICS_EXPORTER - string somente opentelemetry e prometheus
suportados
Certifique-se de também configurar a configuração do OpenTelemetry Exporter para seu coletor ou serviço.
Se você usar o exporter prometheus, o host e a porta do servidor podem ser
configurados usando estas variáveis padrão do OpenTelemetry:
OTEL_EXPORTER_PROMETHEUS_HOST - endereço IP, padrão 0.0.0.0
OTEL_EXPORTER_PROMETHEUS_PORT - número da porta, padrão 9100
As métricas são exportadas no caminho / no servidor.
Se você usar o exporter opentelemetry, as métricas são enviadas para o
coletor.
Por exemplo, se você usar Honeycomb.io você deve definir estas variáveis OTLP padrão do OpenTelemetry:``` OTEL_SERVICE_NAME=auth OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443 OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=,x-honeycomb-dataset=auth"
Note that Honeycomb.io requires a paid plan to ingest metrics.
If you need to debug an issue with traces or metrics not being pushed, you can
set `DEBUG=true` to get more insights from the OpenTelemetry SDK.
#### Custom resource attributes
When using the OpenTelemetry tracing or metrics exporter you can define custom
resource attributes using the [standard `OTEL_RESOURCE_ATTRIBUTES` environment
variable](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable).
A default attribute `auth.version` is provided containing the build version.
#### Tracing HTTP routes
All HTTP calls to the Auth API are traced. Routes use the parametrized
version of the route, and the values for the route parameters can be found as
the `http.route.params.<route-key>` span attribute.
For example, the following request:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
será rastreado como:``` http.method = GET http.route = /admin/users/{user_id} http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
#### Métricas de runtime do Go e métricas HTTP
Todas as métricas de runtime do Go são expostas. Algumas métricas HTTP também são coletadas
por padrão.
### JSON Web Tokens (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
JWT_SECRET - string obrigatório
O segredo usado para assinar tokens JWT.
JWT_EXP - number
Por quanto tempo os tokens são válidos, em segundos. O padrão é 3600 (1 hora).
JWT_AUD - string
O audience padrão do JWT. Use audiences para agrupar usuários.
JWT_ADMIN_GROUP_NAME - string
O nome do grupo de administração (se estiver habilitado). O padrão é admin.
JWT_DEFAULT_GROUP_NAME - string
O grupo padrão atribuído a todos os novos usuários.
Oferecemos suporte a apple, azure, bitbucket, discord, facebook, figma, github, gitlab, google, keycloak, linkedin, notion, snapchat, spotify, slack, twitch, e para autenticação externa.
Use os nomes como chaves sob external para configurar cada um separadamente.```properties
GOTRUE_EXTERNAL_GITHUB_ENABLED=true
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=myappclientid
GOTRUE_EXTERNAL_GITHUB_SECRET=clientsecretvaluessssh
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=http://localhost:3000/callback
Nenhum provedor externo é necessário, mas você deve fornecer os valores obrigatórios se optar por habilitar algum.
`EXTERNAL_X_ENABLED` - `bool`
Se este provedor externo está habilitado ou não
`EXTERNAL_X_CLIENT_ID` - `string` **obrigatório**
O ID do Cliente OAuth2 registrado no provedor externo.
`EXTERNAL_X_SECRET` - `string` **obrigatório**
O Segredo do Cliente OAuth2 fornecido pelo provedor externo quando você se registrou.
`EXTERNAL_X_REDIRECT_URI` - `string` **obrigatório**
A URI para a qual um provedor OAuth2 redirecionará com os valores `code` e `state`.
`EXTERNAL_X_URL` - `string`
A URL base usada para construir as URLs de solicitação de autorização e tokens de acesso. Usada pelo `gitlab` e `keycloak`. Para `gitlab`, o padrão é `https://gitlab.com`. Para `keycloak`, você precisa definir isso para sua instância, por exemplo: `https://keycloak.example.com/realms/myrealm`
#### Hardening de rede
Configurar um provedor de autenticação externa faz com que o Auth faça solicitações HTTP de saída para os endpoints de autorização, token e userinfo desse provedor. Configurar um provedor por meio das configurações `GOTRUE_EXTERNAL_*` ou de uma API administrativa é uma ação administrativa e, ao fazê-lo, você assume a confiança nos hosts e URLs que serão contatados.
A rede em que o Auth é executado deve ser protegida para que essas conexões de saída não alcancem recursos internos que você não deseja expor, como endereços `localhost`/loopback ou endpoints de metadados de nuvem (por exemplo, `169.254.169.254`). Isso é mais importante para provedores com endpoints configuráveis pelo administrador ou detectáveis (por exemplo, provedores OAuth/OIDC personalizados), onde uma URL mal configurada ou maliciosa poderia, de outra forma, ser usada para alcançar a infraestrutura interna.
#### OAuth da Apple
Para experimentar a autenticação externa com a Apple localmente, você precisará fazer o seguinte:
1. Mapeie localhost para \<my_custom_dns \> no arquivo `/etc/hosts`.
2. Configure o auth para servir tráfego HTTPS em localhost substituindo `ListenAndServe` em [api.go](https://github.com/supabase/auth/blob/HEAD/internal/api/api.go) por: ```
func (a *API) ListenAndServe(hostAndPort string) {
log := logrus.WithField("component", "api")
path, err := os.Getwd()
if err != nil {
log.Println(err)
}
server := &http.Server{
Addr: hostAndPort,
Handler: a.handler,
}
done := make(chan struct{})
defer close(done)
go func() {
waitForTermination(log, done)
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
server.Shutdown(ctx)
}()
if err := server.ListenAndServeTLS("PATH_TO_CRT_FILE", "PATH_TO_KEY_FILE"); err != http.ErrServerClosed {
log.WithError(err).Fatal("http server listen failed")
}
}
GOTRUE_EXTERNAL_APPLE_SECRET seguindo este post!O envio de email não é obrigatório, mas é altamente recomendado para recuperação de senha. Se ativado, você deve fornecer os valores obrigatórios abaixo.```properties GOTRUE_SMTP_HOST=smtp.mandrillapp.com GOTRUE_SMTP_PORT=587 GOTRUE_SMTP_USER=[email protected] GOTRUE_SMTP_PASS=correcthorsebatterystaple GOTRUE_SMTP_ADMIN_EMAIL=[email protected] GOTRUE_MAILER_SUBJECTS_CONFIRMATION="Please confirm"
`SMTP_ADMIN_EMAIL` - `string` **obrigatório**
O endereço de e-mail `From` para todos os e-mails enviados.
`SMTP_HOST` - `string` **obrigatório**
O nome do host do servidor de e-mail através do qual os e-mails serão enviados.
`SMTP_PORT` - `number` **obrigatório**
O número da porta para conectar ao servidor de e-mail.
`SMTP_USER` - `string`
Se o servidor de e-mail exigir autenticação, o nome de usuário a ser usado.
`SMTP_PASS` - `string`
Se o servidor de e-mail exigir autenticação, a senha a ser usada.
`SMTP_MAX_FREQUENCY` - `number`
Controla o tempo mínimo que deve passar antes de enviar outro e-mail de confirmação de cadastro ou redefinição de senha. O valor é o número de segundos. O padrão é 900 (15 minutos).
`SMTP_SENDER_NAME` - `string`
Define o nome do remetente. O padrão é `SMTP_ADMIN_EMAIL` se não for usado.
`MAILER_AUTOCONFIRM` - `bool`
Se você não exigir confirmação de e-mail, pode definir isso como `true`. O padrão é `false`.
`MAILER_OTP_EXP` - `number`
Controla a duração pela qual um link de e-mail ou OTP é válido.
`MAILER_URLPATHS_INVITE` - `string`
Caminho de URL a ser usado no e-mail de convite do usuário. O padrão é `/verify`.
`MAILER_URLPATHS_CONFIRMATION` - `string`
Caminho de URL a ser usado no e-mail de confirmação de cadastro. O padrão é `/verify`.
`MAILER_URLPATHS_RECOVERY` - `string`
Caminho de URL a ser usado no e-mail de redefinição de senha. O padrão é `/verify`.
`MAILER_URLPATHS_EMAIL_CHANGE` - `string`
Caminho de URL a ser usado no e-mail de confirmação de alteração de e-mail. O padrão é `/verify`.
`MAILER_SUBJECTS_INVITE` - `string`
Assunto do e-mail a ser usado para convite do usuário. O padrão é `You've been invited`.
`MAILER_SUBJECTS_CONFIRMATION` - `string`
Assunto do e-mail a ser usado para confirmação de cadastro. O padrão é `Confirm your email address`.
`MAILER_SUBJECTS_RECOVERY` - `string`
Assunto do e-mail a ser usado para redefinição de senha. O padrão é `Reset your password`.
`MAILER_SUBJECTS_MAGIC_LINK` - `string`
Assunto do e-mail a ser usado para e-mail de link mágico. O padrão é `Your sign-in link`.
`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`
Assunto do e-mail a ser usado para confirmação de alteração de e-mail. O padrão é `Confirm your new email address`.
`MAILER_SUBJECTS_REAUTHENTICATION` - `string`
Assunto do e-mail a ser usado para reautenticação. O padrão é `{{ .Token }} is your verification code`.
`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de senha alterada. O padrão é `Your password was changed`.
`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de e-mail alterado. O padrão é `Your email address was changed`.
`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de número de telefone alterado. O padrão é `Your phone number was changed`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de identidade vinculada. O padrão é `A new sign-in method was linked to your account`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de identidade desvinculada. O padrão é `A sign-in method was removed from your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de método de verificação adicionado. O padrão é `A new verification method was added to your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`
Assunto do e-mail a ser usado para notificação de método de verificação removido. O padrão é `A verification method was removed from your account`.
`MAILER_TEMPLATES_INVITE` - `string`
Caminho de URL para um modelo de e-mail a ser usado ao convidar um usuário. (ex.: `https://www.example.com/path-to-email-template.html`)
As variáveis `SiteURL`, `Email` e `ConfirmationURL` estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
<h2>You've been invited</h2>
<p>You've been invited to create an account. Follow the link below to accept.</p>
<p><a href="{{ .ConfirmationURL }}">Accept invitation</a></p>
MAILER_TEMPLATES_CONFIRMATION - string
Caminho de URL para um template de email a usar ao confirmar um cadastro. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis SiteURL, Email e ConfirmationURL estão disponíveis.
Conteúdo padrão (se o template não estiver disponível):```html
Follow the link below to confirm this email address and finish signing up.
``` `MAILER_TEMPLATES_RECOVERY` - `string`Caminho URL para um modelo de e-mail a ser usado ao redefinir uma senha. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis SiteURL, Email e ConfirmationURL estão disponíveis.
Conteúdo Padrão (se o modelo estiver indisponível):```html
We received a request to reset your password. Follow the link below to choose a new one.
If you didn't request this, you can safely ignore this email.
``` `MAILER_TEMPLATES_MAGIC_LINK` - `string`Caminho de URL para um modelo de e-mail a ser usado ao enviar o link mágico. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis SiteURL, Email e ConfirmationURL estão disponíveis.
Conteúdo padrão (se o modelo estiver indisponível):```html
Follow the link below to sign in. This link expires shortly and can only be used once.
``` `MAILER_TEMPLATES_EMAIL_CHANGE` - `string`Caminho de URL para um template de email a ser usado ao confirmar a alteração de um endereço de email. (por exemplo, https://www.example.com/path-to-email-template.html)
As variáveis SiteURL, Email, NewEmail e ConfirmationURL estão disponíveis.
Conteúdo Padrão (se o template não estiver disponível):```html
Follow the link below to confirm {{ .NewEmail }} as your new email address.
If you didn't request this change, you can safely ignore this email.
``` `MAILER_TEMPLATES_REAUTHENTICATION` - `string`Caminho de URL para um modelo de email a ser usado ao reautenticar um usuário. (ex.: https://www.example.com/path-to-email-template.html)
A variável Token está disponível.
Conteúdo Padrão (se o modelo não estiver disponível):```html
Use the code below to verify your identity. It expires shortly.
{{ .Token }}
``` `MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`Caminho de URL para um modelo de e-mail a ser usado ao notificar um usuário de que sua senha foi alterada. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis Email estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
The password for your account was recently changed.
If you didn't make this change, reset your password and contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PASSWORD_CHANGED_ENABLED` - `bool`Se deve enviar um e-mail de notificação quando a senha de um usuário for alterada. O padrão é false.
MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION - string
Caminho de URL para um modelo de e-mail a ser usado ao notificar um usuário que seu e-mail foi alterado. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis Email e OldEmail estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
The email address for your account was changed from {{ .OldEmail }} to {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_EMAIL_CHANGED_ENABLED` - `bool`Se deve enviar um email de notificação quando o email de um usuário for alterado. O padrão é false.
GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION - string
Caminho de URL para um modelo de email a ser usado ao notificar um usuário de que seu número de telefone foi alterado. (por exemplo, https://www.example.com/path-to-email-template.html)
As variáveis Email, Phone e OldPhone estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
The phone number for your account was changed from {{ .OldPhone }} to {{ .Phone }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PHONE_CHANGED_ENABLED` - `bool`Se deve enviar um e-mail de notificação quando o número de telefone de um usuário for alterado. O padrão é false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION - string
Caminho de URL para um modelo de e-mail a ser usado ao notificar um usuário de que um método de login foi vinculado à sua conta. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis Email e Provider estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
Your {{ .Provider }} account was linked as a new sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_LINKED_ENABLED` - `bool`Se deve enviar um e-mail de notificação quando um método de login é vinculado à conta de um usuário. O padrão é false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION - string
Caminho de URL para um modelo de e-mail a ser usado ao notificar um usuário de que um método de login foi removido da conta do usuário. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis Email e Provider estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
Your {{ .Provider }} account was removed as a sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_UNLINKED_ENABLED` - `bool`Define se um e-mail de notificação deve ser enviado quando um método de entrada é removido da conta de um usuário. O padrão é false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION - string
Caminho de URL para um modelo de e-mail usado ao notificar um usuário de que um novo método de verificação foi adicionado à sua conta. (ex.: https://www.example.com/path-to-email-template.html)
As variáveis Email e FactorType estão disponíveis.
Conteúdo padrão (se o modelo não estiver disponível):```html
Sign-in verification method {{ .FactorType }} was added to your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_ENROLLED_ENABLED` - `bool`Se deve enviar um e-mail de notificação quando um novo método de verificação é adicionado à conta de um usuário. O padrão é false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION - string
Caminho de URL para um modelo de e-mail a ser usado ao notificar um usuário de que um método de verificação foi removido de sua conta. (por exemplo, https://www.example.com/path-to-email-template.html)
As variáveis Email e FactorType estão disponíveis.
Conteúdo Padrão (se o modelo não estiver disponível):```html
Sign-in verification method {{ .FactorType }} was removed from your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_UNENROLLED_ENABLED` - `bool`Se deve enviar um e-mail de notificação quando um método de verificação é removido da conta de um usuário. O padrão é false.
SMS_AUTOCONFIRM - bool
Se você não exigir confirmação por telefone, pode definir isso como true. O padrão é false.
SMS_MAX_FREQUENCY - number
Controla o tempo mínimo que deve passar antes de enviar outro SMS OTP. O valor é o número de segundos. O padrão é 60 (1 minuto).
SMS_OTP_EXP - number
Controla por quanto tempo um SMS OTP é válido.
SMS_OTP_LENGTH - number
Controla o número de dígitos do SMS OTP enviado.
SMS_PROVIDER - string
As opções disponíveis são: twilio, messagebird, textlocal e vonage
Então você pode usar suas credenciais do twilio:
SMS_TWILIO_ACCOUNT_SIDSMS_TWILIO_AUTH_TOKENSMS_TWILIO_MESSAGE_SERVICE_SID - pode ser definido para o seu número de celular remetente do twilioOu credenciais da Messagebird, que podem ser obtidas no Dashboard:
SMS_MESSAGEBIRD_ACCESS_KEY - sua chave de acesso da MessagebirdSMS_MESSAGEBIRD_ORIGINATOR - remetente de SMS (seu número de telefone da Messagebird com + ou nome da empresa)captcha_token e fará uma solicitação de verificação ao provedor de CAPTCHA.SECURITY_CAPTCHA_ENABLED - string
Se o middleware de captcha está habilitado
SECURITY_CAPTCHA_PROVIDER - string
por enquanto, as únicas opções suportadas são: hCaptcha e Turnstile
SECURITY_CAPTCHA_SECRET - stringSECURITY_CAPTCHA_TIMEOUT - stringObtenha da conta hcaptcha ou turnstile
SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION - bool
Exigir reautenticação na atualização de senha.
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED - bool
Use isso para habilitar/desabilitar entradas anônimas.
GOTRUE_SECURITY_SB_FORWARDED_FOR_ENABLED - bool
Habilite o encaminhamento de endereço IP usando o cabeçalho de solicitação HTTP Sb-Forwarded-For. Quando habilitado, o Auth analisará o primeiro valor desse cabeçalho como um endereço IP e o usará para rastreamento de endereço IP e limitação de taxa. Certifique-se de que esse cabeçalho seja totalmente confiável antes de habilitar esse recurso, passando-o somente de clientes ou proxies confiáveis.
O Auth expõe os seguintes endpoints:
Retorna as configurações publicamente disponíveis para esta instância do Auth.```json { "external": { "apple": true, "azure": true, "bitbucket": true, "discord": true, "facebook": true, "figma": true, "github": true, "gitlab": true, "google": true, "keycloak": true, "linkedin": true, "notion": true, "slack": true, "snapchat": true, "spotify": true, "twitch": true, "twitter": true, "workos": true }, "disable_signup": false, "autoconfirm": false }
### **POST, PUT /admin/users/<user_id>**
Cria (POST) ou atualiza (PUT) o usuário com base no `user_id` especificado. O campo `ban_duration` aceita as seguintes unidades de tempo: "ns", "us", "ms", "s", "m", "h". Consulte [`time.ParseDuration`](https://pkg.go.dev/time#ParseDuration) para obter mais detalhes sobre o formato utilizado.```js
headers:
{
"Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // requires a role claim that can be set in the GOTRUE_JWT_ADMIN_ROLES env var
}
body:
{
"role": "test-user",
"email": "[email protected]",
"phone": "12345678",
"password": "secret", // only if type = signup
"email_confirm": true,
"phone_confirm": true,
"user_metadata": {},
"app_metadata": {},
"ban_duration": "24h" or "none" // to unban a user
}
Retorna o link de ação de e-mail correspondente com base no tipo especificado. Entre outras coisas, a resposta também contém os parâmetros de consulta do link de ação como campos JSON separados por conveniência (juntamente com o OTP de e-mail a partir do qual o token correspondente é gerado).```js headers: { "Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // admin role required }
body: { "type": "signup" or "magiclink" or "recovery" or "invite" or "email_change_current" or "email_change_new", "email": "[email protected]", "password": "secret", // only if type = signup "data": { ... }, // only if type = signup "redirect_to": "https://supabase.io" // Redirect URL to send the user to after an email action. Defaults to SITE_URL.
}
Retornos```js
{
"action_link": "http://localhost:9999/verify?token=TOKEN&type=TYPE&redirect_to=REDIRECT_URL",
"email_otp": "EMAIL_OTP",
"hashed_token": "TOKEN",
"verification_type": "TYPE",
"redirect_to": "REDIRECT_URL",
...
}
Registrar um novo usuário com um email e senha.```json { "email": "[email protected]", "password": "secret" }
returns:```js
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
// if sign up is a duplicate then faux data will be returned
// as to not leak information about whether a given email
// has an account with your service or not
Registre um novo usuário com um número de telefone e senha.```js { "phone": "12345678", // follows the E.164 format "password": "secret" }
Retorna:```js
{
"id": "11111111-2222-3333-4444-5555555555555", // if duplicate sign up, this ID will be faux
"phone": "12345678",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
if AUTOCONFIRM is enabled and the sign up is a duplicate, then the endpoint will return:```json { "code": 400, "msg": "User already registered" }
### **POST /resend**
Permite que um usuário reenvie um OTP existente de inscrição, sms, email_change ou phone_change.```json
{
"email": "[email protected]",
"type": "signup"
}
I apologize, but the input chunk appears to be empty. There is no content provided to translate. Please provide the actual Markdown content for chunk 73 of 131, and I will translate it from English to Portuguese following all the specified rules.```json { "phone": "12345678", "type": "sms" }
Retorna:```json
{
"message_id": "msgid123456"
}
Convida um novo usuário com um e-mail.
Este endpoint requer o JWT service_role ou supabase_admin definido como cabeçalho Auth Bearer:
ex.:```js headers: { "Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" }
Outros conjuntos de ferramentas hospedados pelo mesmo grupo incluem ferramentas "cat" e ferramentas "jump".
Certifique-se de ser um membro ativo da comunidade para receber atualizações sobre as últimas mudanças.```json
{
"email": "[email protected]"
}
Retorna:```json { "id": "11111111-2222-3333-4444-5555555555555", "email": "[email protected]", "confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00", "created_at": "2016-05-15T19:53:12.368652374-07:00", "updated_at": "2016-05-15T19:53:12.368652374-07:00", "invited_at": "2016-05-15T19:53:12.368652374-07:00" }
### **POST /verify**
Verifique um registro ou uma recuperação de senha. O tipo pode ser `signup`, `recovery`, `invite`, `magiclink`, `email_change`, `sms` ou `phone_change`
e o `token` é um token retornado de `/signup` ou `/recover`.```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email"
}
password é obrigatório para verificação de cadastro se não houver uma senha existente.
Retorna:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token", "type": "signup | recovery | invite | magiclink | email_change | sms | phone_change" }
Verifique um cadastro por telefone ou OTP por SMS. O tipo deve ser definido como `sms`.```json
{
"type": "sms",
"token": "confirmation-otp-delivered-in-sms",
"redirect_to": "https://supabase.io",
"phone": "phone-number-sms-otp-was-delivered-to"
}
Retorna:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /verify**
Verifique um registro ou uma recuperação de senha. O tipo pode ser `signup`, `recovery`, `magiclink`, `invite` ou `email_change`, e o `token` é um token retornado de `/signup`, `/recover` ou `/magiclink`.
parâmetros de consulta:```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email",
"redirect_to": "https://supabase.io"
}
O usuário será autenticado e redirecionado para:``` SITE_URL/#access_token=jwt-token-representing-the-user&token_type=bearer&expires_in=3600&refresh_token=a-refresh-token&type=invite
Seu aplicativo deve detectar os parâmetros de consulta no fragmento e usá-los para definir a sessão (o supabase-js faz isso automaticamente)
Você pode usar o parâmetro `type` para redirecionar o usuário para um formulário de definição de senha no caso de `invite` ou `recovery`,
ou mostrar uma mensagem de conta confirmada/boas-vindas no caso de `signup`, ou direcioná-los para algum fluxo de onboarding adicional
### **POST /otp**
Senha de uso único. Entregará um link mágico ou SMS OTP ao usuário, dependendo se o corpo da requisição contém uma chave "email" ou "phone".
Se `"create_user": true`, o usuário não será cadastrado automaticamente se o usuário não existir.```js
{
"phone": "12345678" // follows the E.164 format
"create_user": true
}
OU```js // exactly the same as /magiclink { "email": "[email protected]" "create_user": true }
Retorna:```json
{}
Link mágico. Entregará um link (ex.: /verify?type=magiclink&token=fgtyuf68ddqdaDd) ao usuário com base no
endereço de email, que ele pode usar para resgatar um access_token.
Por padrão, os Magic Links só podem ser enviados uma vez a cada 60 segundos.```json { "email": "[email protected]" }
Retorna:```json
{}
Quando o link mágico é clicado, ele redirecionará para <SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=magiclink (veja /verify acima)
Recuperação de senha. Enviará um e-mail de recuperação de senha ao usuário com base no endereço de e-mail.
Por padrão, os links de recuperação só podem ser enviados uma vez a cada 60 segundos.```json { "email": "[email protected]" }
Retorna:
Esta ferramenta foi desenvolvida para:
- Testadores de penetração
- Pesquisadores de segurança
- Membros de Red Team
- Auditores de segurança
- Equipes de operações de segurança (SecOps)
- Profissionais de DevSecOps
- Jogadores de CTF
- Estudantes e educadores em cibersegurança
- Administradores de sistemas
## Principais Recursos
- **Suporte multiplataforma**: Funciona em Windows, Linux e macOS
- **Varredura abrangente**: Detecta uma ampla variedade de vulnerabilidades
- **Personalizável**: Configure os parâmetros de varredura de acordo com suas necessidades
- **Extensível**: Arquitetura de plugins para adicionar novas verificações
- **Relatórios**: Gera relatórios detalhados em HTML, PDF e JSON
- **Modo stealth**: Minimiza a detecção ajustando o comportamento da varredura
- **Integração de API**: API RESTful para automação
- **Comunidade ativa**: Atualizações regulares e mantenedores responsivos
## Instalação
### Pré-requisitos
- Python 3.8+
- pip
- Git (opcional, para clonagem)
### Instalação a partir do código-fonte
```bash
git clone https://github.com/example/tool.git
cd tool
pip install -r requirements.txt
pip install tool-name
tool-name scan https://example.com
tool-name scan https://example.com --stealth --output report.html
Você pode configurar a ferramenta usando um arquivo YAML:
url: https://example.com
threads: 10
timeout: 30
report:
format: html
output: ./reports/
scan:
stealth: false
depth: 3
follow-redirects: true
A ferramenta fornece uma API RESTful para automação. Inicie o servidor da API com:
tool-name api --port 8080
Um Dockerfile está incluído no repositório. Construa e execute com:
docker build -t tool-name .
docker run -it --rm tool-name scan https://example.com
Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para mais detalhes.```json {}
### **POST /token**
Este é um endpoint OAuth2 que atualmente implementa
os tipos de concessão password e refresh_token
parâmetros de consulta:```
?grant_type=password
body:```js // Email login { "email": "[email protected]", "password": "somepassword" }
// Phone login { "phone": "12345678", "password": "somepassword" }
ou
query params:```
grant_type=refresh_token
I'm unable to complete the translation because the input content is empty. The chunk contains only the field label "body:" with no markdown text following it. Please provide the actual source text to translate.```json { "refresh_token": "a-refresh-token" }
Depois de obter um token de acesso, você pode acessar os métodos que exigem autenticação
definindo o cabeçalho `Authorization: Bearer YOUR_ACCESS_TOKEN_HERE`.
Retorna:```json
{
"access_token": "jwt-token-representing-the-user",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "a-refresh-token"
}
Obter o objeto JSON para o usuário autenticado (requer autenticação)
Retorna:```json { "id": "11111111-2222-3333-4444-5555555555555", "email": "[email protected]", "confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00", "created_at": "2016-05-15T19:53:12.368652374-07:00", "updated_at": "2016-05-15T19:53:12.368652374-07:00" }
### **PUT /user**
Atualiza um usuário (Requer autenticação). Além de alterar e-mail/senha, este
método pode ser usado para definir dados personalizados do usuário. Alterar o e-mail resultará no envio de um magic link.```json
{
"email": "[email protected]",
"password": "new-password",
"phone": "+123456789",
"data": {
"key": "value",
"number": 10,
"admin": false
}
}
Retorna:```json { "id": "11111111-2222-3333-4444-5555555555555", "email": "[email protected]", "email_change_sent_at": "2016-05-15T20:49:40.882805774-07:00", "phone": "+123456789", "phone_change_sent_at": "2016-05-15T20:49:40.882805774-07:00", "created_at": "2016-05-15T19:53:12.368652374-07:00", "updated_at": "2016-05-15T19:53:12.368652374-07:00" }
Se `GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION` estiver ativado, o usuário precisará reautenticar primeiro.```json
{
"password": "new-password",
"nonce": "123456"
}
Envia um nonce para o e-mail (preferido) ou telefone do usuário. Este endpoint requer que o usuário esteja logado / autenticado primeiro. O usuário precisa ter um e-mail ou número de telefone para que o nonce seja enviado com sucesso.```js headers: { "Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" }
### **POST /logout**
Faz logout de um usuário (Requer autenticação).
Isso revogará todos os refresh tokens do usuário. Lembre-se de que os tokens JWT
ainda serão válidos para autenticação stateless até expirarem.
### **GET /authorize**
Obtenha o access_token do provedor oauth externo
Parâmetros de consulta:```
provider=apple | azure | bitbucket | discord | facebook | figma | github | gitlab | google | keycloak | linkedin | notion | slack | snapchat | spotify | twitch | twitter | workos
scopes=<optional additional scopes depending on the provider (email and name are requested by default)>
Redirects to provider and then to /callback
For Apple-specific setup see: https://github.com/supabase/auth#apple-oauth
External provider should redirect to this endpoint
Redirects to <GOTRUE_SITE_URL>#access_token=<access_token>&refresh_token=<refresh_token>&provider_token=<provider_oauth_token>&expires_in=3600&provider=<provider_name>
If additional scopes were requested then provider_token will be populated, you can use this to fetch additional data from the provider or interact with their services
twitterworkos| Opção | Descrição |
|---|
--url | URL alvo para varredura |
--stealth | Ativa o modo stealth |
--output | Arquivo de saída para o relatório |
--format | Formato do relatório: html, pdf, json |
--threads | Número de threads simultâneas |
--timeout | Tempo limite de requisição em segundos |
--verbose | Ativa a saída detalhada |
| Endpoint | Método | Descrição |
|---|
/api/v1/scan | POST | Inicia uma nova varredura |
/api/v1/scan/{id} | GET | Obtém o status da varredura |
/api/v1/scan/{id}/results | GET | Obtém os resultados da varredura |
/api/v1/scan/{id} | DELETE | Cancela uma varredura |
/api/v1/reports/{id} | GET | Baixa um relatório |