Autenticação e segundo fator
Índice · Antes: HTTP , modelos · Depois: middleware MIDDLEWARE.md
Autenticar é verificar quem faz uma solicitação. Autorizar é decidir o que essa pessoa pode fazer. Auth integra usuários, senhas e JWT, mas uma chamada como update(id,data) não substitui as verificações de permissões do driver . As operações
requerem conexão, tabelas de autenticação e segredos configurados. Um JWT é um token assinado; não deve ser confundido com uma senha ou publicado em logs. Esta referência descreve o código local, ela não certifica a segurança de um aplicativo implementado.
Consulta o fragmento
do usuário atual para um controlador com sessão já validada:
var $usuario = Auth::user()
$usuario != null ? {
print($usuario->email)
} : {
print("Sin sesion")
}
user() retorna instância ou nulo, não mapa ou JSON. Utilize -> ; para um ID
prefere Auth::id() . Passa os campos escalares selecionados para visualizações em vez de
em toda a instância.
Contratos de autenticação
| Assinatura | Retorno e efeito |
|---|---|
hash(contraseña) |
Hash bcrypt como string ou nulo em caso de falha. |
create(mapaDatos) |
Token do usuário ou falso dependendo da inserção; requer dados de esquema. Não é envio automático. |
attempt(email,contraseña) |
JWT ou falso; valida credenciais de acordo com as regras da tabela. Ele próprio não incorpora todo o fluxo de fluido MFA. |
login(email,contraseña) |
AuthLoginResult ou null para argumentos insuficientes. |
check() , guest() |
Bool no contexto da sessão. |
user() , id() |
Instância/ID atual ou nulo. |
hasRole(nombre) |
Bool; não verifica a propriedade de um recurso. |
validateToken(token) |
Bool; verifica o JWT e preenche novamente o contexto da sessão. |
refresh(id) |
JWT renovado ou falso/nulo; autoriza primeiro quem pode solicitá-lo. |
update(id,mapa) , delete(id) |
Bool ou nulo dependendo dos argumentos/falha; modificar usuários. |
logout() |
Limpe o contexto e retorne verdadeiro. Isso não implica revogação global de todos os JWT emitidos. |
verify(token) |
Verifique o token de confirmação do e-mail, retorne bool. |
verificationStatus(email) |
not_found, verificado ou não verificado. |
resendVerification(email) |
token de verificação ou falso; a entrega da mensagem fica por conta do aplicativo. |
forgotPassword(email) |
Token de recuperação ou falso; Não é confirmação de envio SMTP. |
resetPassword(token,nueva) |
texto verdadeiro ou de erro: invalid_token, fraca_password, database_error, used_token, expired_token. Compare com a verdade, não apenas com a veracidade do texto. |
verify2FAChallenge(token,codigo) |
JWT final ou falso após verificar o desafio e o código (suporta App TOTP e Email OTP). |
complete2FA(id) |
Gera JWT após busca pelo usuário; não verifica um código TOTP em si. Não exponha como um endpoint público com um ID fornecido pelo cliente. |
enabledSocialProviders() |
Array de provedores OAuth habilitados no ambiente atual (google, apple, facebook, x, github, twitch, yahoo, microsoft). |
socialRedirect(proveedor,urlRetorno) |
URL de redirecionamento OAuth para o provedor indicado. |
socialCallback(proveedor,codigo,urlRetorno) |
AuthLoginResult processado após a troca do código e registro/vinculação do usuário. |
Resultado suave e retornos de chamada
AuthLoginResult preserva sucesso, erro, usuário e resposta. A avaliação de dois fatores (2FA) é realizada automaticamente em Auth::login (detectando aplicativos autenticadores TOTP e OTP por e-mail):
| Método | Quando ligar para retorno de chamada | Parâmetro |
|---|---|---|
onSuccess(callback) |
Credenciais corretas e nenhum desafio necessário. | JWT. |
onChallenge(callback) |
Credenciais corretas e desafio necessário (App TOTP ou Email OTP). | Desafie o JWT temporário. |
onFail(callback) |
Credenciais incorretas. | Mensagem de erro. |
response() |
Retorna o resultado do retorno de chamada executado ou nulo. | Nenhum. |
Os retornos de chamada de origem devem digitar seus parâmetros, por exemplo
func(mixed $token) { return Response::json({"token": $token}) } .
Não mostre um token final antes de terminar o desafio.
MFA e TwoFactor
| Assinatura | Contrato |
|---|---|
MFA::generateTOTP() |
Segredo do mapa, qr_uri e qr_url. qr_uri é URI codificado; qr_url aponta para um serviço QR externo e inclui o segredo. Mostrar esse URL enviaria o segredo para esse serviço. |
MFA::verifyTOTP(secreto,codigo) |
Bool de acordo com a janela de tempo implementada. |
MFA::generateRecoveryCodes() |
Matriz de código. A persistência e sua associação ao usuário exigem o fluxo da aplicação. |
MFA::verifyRecoveryCode(id,codigo) |
Consulte os códigos salvos, verifique e consuma aquele que corresponde. |
TwoFactor::required(usuario) |
Bool sobre instâncias e registros de MFA. |
TwoFactor::verify(id,codigo) |
Bool; Obtém segredo dos métodos MFA do usuário. |
O gerador TOTP nesta implementação usa matemática/rand e constrói uma URL externa com o segredo. Estas são descobertas que necessitam de revisão de segurança; não são apresentados como garantias criptográficas do framework.
SmtpClient é uma classe nativa separada. auth(usuario,contraseña) ,
secure(bool) e timeout(segundos) configuram e retornam sua instância;
send(destinatario,asunto,cuerpo) retorna bool e lastError() retorna
o último erro textual. Requer servidor SMTP e configuração MAIL_* de acordo com
smtp_native.go . A criação de um token não envia esse email.
Autenticação Social (OAuth 2.0)
O Joss oferece suporte nativo para login e vinculação de contas com 8 provedores OAuth. Cada provedor é ativado automaticamente quando você define suas duas variáveis de ambiente no arquivo .env ou env.joss:
| Provedor | Variável Client ID | Variável Client Secret |
|---|---|---|
GOOGLE_CLIENT_ID |
GOOGLE_CLIENT_SECRET |
|
| GitHub | GITHUB_CLIENT_ID |
GITHUB_CLIENT_SECRET |
| Microsoft | MICROSOFT_CLIENT_ID |
MICROSOFT_CLIENT_SECRET |
| X (Twitter) | X_CLIENT_ID |
X_CLIENT_SECRET |
FACEBOOK_CLIENT_ID |
FACEBOOK_CLIENT_SECRET |
|
| Apple | APPLE_CLIENT_ID |
APPLE_CLIENT_SECRET |
| Twitch | TWITCH_CLIENT_ID |
TWITCH_CLIENT_SECRET |
| Yahoo | YAHOO_CLIENT_ID |
YAHOO_CLIENT_SECRET |
A URL de redirecionamento (callback) registrada no console de desenvolvedor deve apontar para:
https://tu-dominio.com/auth/{proveedor}/callback
Auth::enabledSocialProviders()retorna apenas a lista de provedores com credenciais configuradas.Auth::socialRedirect(proveedor, urlRetorno)gera a URL segura para o provedor OAuth com proteçãostateanti-CSRF.Auth::socialCallback(proveedor, codigo, urlRetorno)troca o código, recupera o perfil, vincula emuser_social_accountse retorna umAuthLoginResult.
Fontes: Auth , OAuth Social , JWT , Fluxo MFA , Tabelas ../pkg/core/auth_tables.go .