Windows Identity Foundation (WIF) e o Claims based Authenticaion & Authorization (CBA)
Olá pessoal, tudo certo?
Esta semana eu gravei com o Markus mais um ArqCast, desta vez sobre Identidade, Autenticação e Autorização, aproveitando para falar também do projeto “Geneva” Framework. Agora, esse projeto tem um novo nome, Windows Identity Foundation (WIF) .
O projeto “Geneva” é uma iniciativa Microsoft na linha do “Claims based Authentication”, ou autenticação baseada em declarações. Existem diversas vantagens nessa abordagem, principalmente no desacoplamento entre aplicações e provedores de identidade, assim como na maior interoperabilidade entre plataformas. É possível a construção de um verdadeiro Single Sign-On entre diferentes infraestruturas e plataformas através de um modelo CBA.
Back to Basics : Identidades
Em nossas soluções, tratamos identidade com o objetivo de garantir as questões de acesso de um usuário aos recursos disponíveis na arquitetura ou solução. Perguntas como "quem é você?", "o que você pode fazer?", "como posso personalizar minha aplicação para você?", são exemplos que tratamos nesse contexto, além de lidar com a segurança e a integridade das informações disponíveis.
No dia-a-dia, temos diversas opções para esse tipo de tratamento, como contas de domínio Windows, Kerberos, autenticação via WebForms, AD, OpenID, modelos customizados pela empresa, etc.
Porém, quando tratamos identidades, diversos desafios aparecem como o gerenciamento de usuários, o gerenciamento de permissões, a proteção de informações confidenciais, a integração entre aplicações e sistemas, para citar alguns.
Um cenário muito comum hoje em dia é o uso de autenticação corporativa via AD – Active Directory e autorização via Roles, através do Authorization Manager (AzMan). Para esse tipo de desenvolvimento, recomendo conferir a Enteprise Library 4.1 e seus Hands-on Labs, para os blocos de autenticação/autorização. Veja mais aqui!
Back to Basics : Authorization Manager (AzMan)
O AzMan (ou Authorization Manager) tem sido uma excelente alternativa para a implementação de um modelo de segurança baseado em Roles e Permissões em nossas aplicações. Para quem não se lembra, ele existe desde o Windows Server 2003, sendo muito usado em aplicações Web e Desktop com a dupla W2k3 e Windows XP. A própria Enterprise Library 4.1 oferece suporte para a configuração de cenários com Role Security usando AzMan de um modo muito fácil.
Já no Windows Server 2008 e no Windows Vista, o AzMan passou a suportar o SQL Server como Storage para permissões. Antes disso, apenas metadados em AD, ADAM e arquivos XML eram suportados.
Mais recentemente, o Windows Server 2008, Windows Server 2008 R2, Windows Vista e Windows 7 oferecem agora o AzMan MMC Snap-in, suportando aplicações customizadas com Storages diversos como tabelas em banco, AD LDS, diretórios LDAP, entre outros recursos baseados em componentes chamados Custom Object Picker (que ficou mais interessado, vale olhar aqui!). Outro link interessante sobre AzMan é esse aqui!
Uma solução muito interessante também é o NetSqlAzMan, que implementar uma solução desacoplada para .NET 3.5, baseada em Role Security.
NetSqlAzMan - .NET SQL Authorization Manager
Ref.: https://netsqlazman.codeplex.com/
Um modelo baseado em Identidades Federadas
A partir do cenário acima, já deu para perceber que TIPros, assim como desenvolvedores sofrem no tratamento das questões de segurança. Da mesma forma, nossos usuários sofrem na ausência de um modelo de identidade única, com tantas senhas e credenciais sendo apresentadas para os sistemas. Haja post-it para guardar tanta senha!! :)
Uma resposta para aliviar esses problemas é o modelo de Identidades Federadas, baseado no WS-Federation.
O WS-Federation é uma especificação para federação de identidades, desenvolvida como padrão aberto por diversas empresas (BEA, BMC, CA, IBM, Microsoft, Novell, entre outras). O WS-Federation permite a definição de regiões separadas de segurança, para o tráfego de identidades, atributos de identidades e autenticação via declarações (Claims). Um dos elementos principais do modelo é a definição de tokens de segurança, com declarações que escolhemos para o mapeamento de identidades. Através dos artibutos escolhidos, nossa aplicação pode decidir pela autorização ou não de um usuário, para uma determinada funcionalidade.
Por trás deste modelo temos o protocolo SAML 2.0 - Security Assertion Markup Language, que é um padrão aberto baseado em XML, para a troca de identidades entre regiões de segurança distintas.
O desenho a seguir ilustra uma negociação entre um usuário (User Agent) e um serviços (Service Provider). Para uma requisição do usuário, veja que um provedor de identidades (Identity Provider) é envolvido, oferecendo uma identidade de usuário, que será apresentada junto ao Service Provider, para o consumo da funcionalidade desejada.
Esse é o modelo que está por trás do CBA, base do projeto “Geneva”.
Componentes do projeto “Geneva”
O projeto “Geneva” nasce com uma série de componentes sobre a plataforma Microsoft, envolvendo:
- Active Directory Federation Services (ADFS) – codinome “Geneva” Server
- Windows Identity Foundation (WIF) – codinome “Geneva” Framework;
- Windows Cardspace, codinome CardSpace “Geneva”, para usuários finais e estações de trabalho;
Um desenho que aparece na documentação do Geneva Beta 2 segue abaixo (claro, alguns nomes estão mudando, mas a idéia é dar uma visão geral sobre o “Geneva”, que já foi chamado de “Zermatt” inclusive… :)
Bastante coisa chegando! Podemos ficar até confusos com tanta coisa, não é mesmo?
A boa notícia é que o time do Patterns & Practices já está trabalhando num guia bem completo sobre Identidade, Autenticação e Autorização. Olha só um mapa desse guia:
Quando o material ficar pronto, eu divulgo por aqui! Aguardem…
Para você que ficou interessado no “Geneva” e no uso de um modelo CBA, veja os links abaixo:
“Geneva” Team Blog
Ref.: https://blogs.msdn.com/card/archive/2009/07/22/official-name-for-geneva.aspx
Microsoft Code Name "Geneva"
Ref.: https://www.microsoft.com/forefront/geneva/en/us/
Evaluate Microsoft Code Name “Geneva” beta 2 today
Ref.: https://msdn.microsoft.com/en-us/evalcenter/dd440951.aspx
Microsoft Code Name "Geneva" Beta 2 (de 18 de agosto de 2009)
Ref.: https://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=118c3588-9070-426a-b655-6cec0a92c10b
Security Assertion Markup Language
Ref.: https://en.wikipedia.org/wiki/SAML_2.0
Outro material bem legal segue abaixo:
Geneva Interop Whitepapers (Setembro/2009)
Ref.: https://www.microsoft.com/downloads/details.aspx?familyid=9EB1F3C7-84DA-40EB-B9AA-44724C98E026&displaylang=en#filelist
Geneva Whitepapers and Datasheet (Maio/2009)
Ref.: https://www.microsoft.com/downloads/details.aspx?familyid=9CA5C685-3172-4D8F-81CB-1A59BDC9F7E3&displaylang=en
E não podia esquecer os posts do Markus, aqui! ITPros, Desenvolvedor e Arquitetos, fiquem ligados!!!
Por enquanto é só! Até o próximo post :)
Waldemir.