Autenticação Básica (descontinuada)
Esta página foi traduzida automaticamente do inglês. Ler o original
Cuidado
Descontinuado, não use. O pacote Sisk.BasicAuth não é mais mantido e está obsoleto no NuGet, sem pacote substituto. Seu BasicAuthenticateRequestHandler não decodifica as credenciais Base64 enviadas por clientes HTTP padrão, portanto as solicitações autenticadas são rejeitadas. Implemente a autenticação básica com seu próprio request handler que lê HttpHeaderCollection.Authorization em vez disso. Esta página é mantida apenas como referência histórica.
O pacote Basic Auth adiciona um request handler capaz de lidar com o esquema de autenticação básica em sua aplicação Sisk com muito pouca configuração e esforço.
A autenticação HTTP básica é uma forma mínima de entrada para autenticar solicitações por um ID de usuário e senha, onde a sessão é controlada exclusivamente pelo cliente e não há tokens de autenticação ou acesso.
Read more about the Basic authentication scheme in the MDN specification.
Instalação #
Para começar, instale o pacote Sisk.BasicAuth em seu projeto:
> dotnet add package Sisk.BasicAuth
Você pode ver mais formas de instalá-lo em seu projeto no Nuget repository.
Criando seu manipulador de autenticação #
Você pode controlar o esquema de autenticação para um módulo inteiro ou para rotas individuais. Para isso, vamos primeiro escrever nosso primeiro manipulador de autenticação básica.
No exemplo abaixo, uma conexão é feita ao banco de dados, verifica‑se se o usuário existe e se a senha é válida e, depois disso, o usuário é armazenado no context bag.
public class UserAuthHandler : BasicAuthenticateRequestHandler
{
public UserAuthHandler() : base()
{
Realm = "To enter this page, please, inform your credentials.";
}
public override HttpResponse? OnValidating(BasicAuthenticationCredentials credentials, HttpContext context)
{
DbContext db = new DbContext();
// neste caso, estamos usando o email como campo de ID do usuário, então
// vamos procurar um usuário usando seu email.
User? user = db.Users.FirstOrDefault(u => u.Email == credentials.UserId);
if (user == null)
{
return base.CreateUnauthorizedResponse("Sorry! No user was found by this email.");
}
// valida se a senha das credenciais é válida para este usuário.
if (!user.ValidatePassword(credentials.Password))
{
return base.CreateUnauthorizedResponse("Invalid credentials.");
}
// adiciona o usuário autenticado ao contexto http
// e continua a execução
context.Bag.Add("loggedUser", user);
return null;
}
}Então, basta associar esse request handler à nossa rota ou classe.
public class UsersController
{
[RouteGet("/")]
[RequestHandler(typeof(UserAuthHandler))]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}Ou usando a classe RouterModule:
public class UsersController : RouterModule
{
public ClientModule()
{
// todas as rotas dentro desta classe serão tratadas por
// UserAuthHandler.
base.HasRequestHandler(new UserAuthHandler());
}
[RouteGet("/")]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}Observações #
A responsabilidade principal da autenticação básica é executada no lado do cliente. Armazenamento, controle de cache e criptografia são todos tratados localmente no cliente. O servidor apenas recebe as credenciais e valida se o acesso é permitido ou não.
Observe que este método não é dos mais seguros porque coloca uma responsabilidade significativa no cliente, que pode ser difícil de rastrear e manter a segurança de suas credenciais. Além disso, é crucial que as senhas sejam transmitidas em um contexto de conexão segura (SSL), pois não possuem criptografia inerente. Uma breve interceptação nos cabeçalhos de uma requisição pode expor as credenciais de acesso do seu usuário.
Opte por soluções de autenticação mais robustas para aplicações em produção e evite usar muitos componentes prontos, pois eles podem não se adaptar às necessidades do seu projeto e acabar expondo‑o a riscos de segurança.