Estou lutando para configurar a autenticação em meu serviço da web. O serviço é criado com a API da Web ASP.NET Core.
Todos os meus clientes (aplicativos WPF) devem usar as mesmas credenciais para chamar as operações de serviço da web.
Depois de alguma pesquisa, eu vim com a autenticação básica - enviar um nome de usuário e senha no cabeçalho da solicitação HTTP. Mas depois de horas de pesquisa, parece-me que a autenticação básica não é o caminho a percorrer no ASP.NET Core.
A maioria dos recursos que encontrei está implementando autenticação usando OAuth ou algum outro middleware. Mas isso parece ser superdimensionado para o meu cenário, além de usar a parte Identity do ASP.NET Core.
Então, qual é a maneira certa de atingir meu objetivo - autenticação simples com nome de usuário e senha em um serviço da Web ASP.NET Core?
Desde já, obrigado!
fonte
Agora, depois que fui apontado na direção certa, aqui está minha solução completa:
Esta é a classe de middleware que é executada em cada solicitação de entrada e verifica se a solicitação tem as credenciais corretas. Se nenhuma credencial estiver presente ou se estiverem erradas, o serviço responde com um erro 401 Não autorizado imediatamente.
A extensão de middleware precisa ser chamada no método Configure da classe de inicialização do serviço
E isso é tudo! :)
Um recurso muito bom para middleware em .Net Core e autenticação pode ser encontrado aqui: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/
fonte
Para usar isso apenas para controladores específicos, por exemplo, use:
fonte
Eu acho que você pode ir com JWT (Json Web Tokens).
Primeiro você precisa instalar o pacote System.IdentityModel.Tokens.Jwt:
Você precisará adicionar um controlador para geração de token e autenticação como este:
Depois disso, atualize a classe Startup.cs para ficar assim:
E é isso, o que resta agora é colocar o
[Authorize]
atributo nos Controladores ou Ações que você deseja.Aqui está um link para um tutorial completo e direto.
http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/
fonte
Eu implementei
BasicAuthenticationHandler
para autenticação básica para que você possa usá-la com atributos padrãoAuthorize
eAllowAnonymous
.Registro em Startup.cs -
app.UseMiddleware<BasicAuthenticationMiddleware>();
. Com este código, você pode restringir qualquer controlador com o atributo standart Autorize:e use o atributo
AllowAnonymous
se você aplicar o filtro de autorização no nível do aplicativo.fonte
Neste repositório público do Github https://github.com/boskjoett/BasicAuthWebApi, você pode ver um exemplo simples de uma API da web ASP.NET Core 2.2 com pontos de extremidade protegidos por autenticação básica.
fonte
Como corretamente dito em posts anteriores, uma das maneiras é implementar um middleware de autenticação básica customizado. Eu encontrei o melhor código funcional com explicação neste blog: Basic Auth with custom middleware
Referi o mesmo blog, mas tive que fazer 2 adaptações:
Ao ler o nome de usuário e a senha do arquivo appsettings.json, adicione a propriedade estática somente leitura no arquivo de inicialização. Em seguida, leia appsettings.json. Finalmente, leia os valores de qualquer lugar no projeto. Exemplo:
fonte
Você pode usar um
ActionFilterAttribute
e adicione o atributo ao seu controlador
[BasicAuth("USR", "MyPassword")]
fonte
ASP.NET Core 2.0 com Angular
https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login
Certifique-se de usar o tipo de filtro de autenticação
[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
fonte