domingo, 19 de abril de 2015

Análise do Vídeo Web Api Security

Segue um post com anotações do vídeo abaixo que dá boas dicas para segurança de Web Api do Channel 9.

Authentication in the Host

Diferença entre Autenticação e Autorização

Authentication (Autenticação) para definir quem é você
Authorization (Autorização) para saber quais acessos você tem
A autenticação do Web Api é compartilhada com o MVC.
Referência com mais informações:
http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Referência para os diferentes tipos de autenticações e formas de configurações:
http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

Authentication using Message Handlers

Exemplo de autenticação somente didática (que não deve ser usado em produção) utilizando o DelegatingHandler:
https://github.com/MicrosoftLearning/WebAPIDesign/blob/master/05%20-%20Security/05bMessageHandlerAuthentication/Handlers/NaiveAuthHandler.cs

Token-based Authentication

Neste modelo:
· Autorização gera um Token
· Token dá acesso ao serviço
· Protege a senha que só é utilizada por uma parte terceira (Facebook, Google, Microsoft, Twitter etc)
  • Token é passado no cabeçalho das requisições

Authorization Filters

Custom Authorization Filters (Filtro de autorização customizado)

Exemplo de filtro de Autorização somente didática (que não deve ser usado em produção)
https://github.com/MicrosoftLearning/WebAPIDesign/blob/master/05%20-%20Security/05dAuthorizationFilter/Filters/NaiveAuthorizationFilter.cs

Role-based Authorization (Autorização baseada em perfil)

Definição da role baseada no que foi passado como usuário. Exemplo somente didático (que não deve ser usado em produção)
https://github.com/MicrosoftLearning/WebAPIDesign/blob/master/05%20-%20Security/05eRoleBasedAuthorization/Filters/NaiveAuthorizationFilter.cs
Utilização do Metadadados Authorize especificando quais perfis - separados por vírgula “,” - tem permissão aos métodos do Controller
https://github.com/MicrosoftLearning/WebAPIDesign/blob/master/05%20-%20Security/05eRoleBasedAuthorization/Controllers/WidgetsController.cs

Preventing Cross-Site Request Forgery

Cross-Site Request Forgery

Ataque Malicioso
Envio para o seu site através de sites terceiros
Tirar vantagem dos cookies gerados para os usuários
Para prevenir, utilizar anti-forgery token (tokan contra a falsificação)
Especialmente importante se vocês habilitar CORS (Cross origin resource sharing)

Mais informações sobre o assunto:
http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-%28csrf%29-attacks 
http://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

Implementação de verificação de Anti Forgery através do Handler:
https://github.com/MicrosoftLearning/WebAPIDesign/blob/master/05%20-%20Security/05fAntiForgery/Handlers/AntiForgeryHandler.cs