- SAML (Single Assertion Markup Language) é um padrão que define regras para trocar mensagens relacionadas à segurança no formato XML
- É usado principalmente para troca de mensagens entre três ou mais entidades independentes
- Um cenário comum é quando dois sistemas de software feitos por empresas diferentes e um usuário estão envolvidos
- Os dois sistemas precisam trocar informações sobre o usuário
- Também é possível fazer uma integração customizada, mas ela é difícil de manter
- O SAML simplifica trabalhos complexos de integração ao fazer com que os sistemas sigam as mesmas regras
Formato das mensagens SAML
- As mensagens SAML são compostas em formato XML
- Ele define a sintaxe das mensagens e informa como processar seu conteúdo com segurança
- Ao receber a tag
<Response>, por exemplo, você sabe que deve procurar a tag <Assertion>
- Ele fornece diretrizes sobre como é uma assinatura digital e como processar mensagens para evitar problemas de segurança
A flexibilidade do SAML
- O SAML foi projetado com ênfase em flexibilidade. Em princípio, dá para fazer muita coisa com SAML, mas essa flexibilidade leva à complexidade
- A especificação do SAML tem inúmeras exceções, muitos ifs e exemplos, o que adiciona edge cases
- Como o SAML é antigo, algumas pessoas aproveitam essa flexibilidade
- Em ambientes reais de produção, especialmente em sistemas legados, às vezes o SAML se comporta de forma incomum
- Na maioria dos casos, a vida fica mais fácil se você se concentrar apenas em um pequeno subconjunto do SAML
O objetivo real de uso do SAML
- O SAML é usado principalmente para Single Sign-On (SSO)
- O SAML define alguns tipos estranhos de SSO, mas normalmente usa-se o Web Browser SSO Profile
- O usuário final primeiro se autentica em um sistema centralizado e depois acessa o aplicativo de software desejado
- O usuário não se autentica diretamente no aplicativo
- Por exemplo, se você já usou o Okta para acessar seu e-mail, então usou o Web Browser SSO Profile
Entidades envolvidas no SSO
- Há três partes envolvidas no SSO:
- usuário: a pessoa que quer usar o aplicativo
- provedor de serviços (SP): o próprio aplicativo
- provedor de identidade (IDP): o serviço central que o usuário usa para autenticação
- O IDP de cada cliente pode ser visto como um banco de dados. Ele acompanha dados sobre as pessoas
- As empresas costumam usar provedores de identidade para atribuir funcionários a departamentos e conceder diferentes permissões
- Sempre que um usuário faz login via SAML, é preciso buscar informações no IDP. No SSO, normalmente pede-se ao IDP para confirmar a identidade do usuário
- É necessário ter uma relação de confiança pré-configurada com o IDP
- Todo cliente que usa SAML SSO precisa da sua própria configuração no aplicativo
- Porém, não se trocam mensagens diretamente com o IDP. No SAML SSO, o provedor de serviços e o provedor de identidade se comunicam por meio do navegador do usuário
Como funciona a interação entre entidades no SAML
- Processo típico de SAML SSO:
- O usuário tenta acessar uma parte do aplicativo no navegador web
- Verifica-se se o usuário tem um contexto de segurança válido
- Como o usuário não tem um contexto de segurança válido, a página de login é exibida
- O usuário insere alguma informação (por exemplo, endereço de e-mail), e isso é usado para determinar o método de login apropriado
- O usuário é redirecionado para o endereço web do IDP, e uma mensagem SAML é enviada ao IDP por meio do navegador do usuário
- O IDP mostra ao usuário um prompt pedindo credenciais. O usuário é autenticado com sucesso
- O IDP redireciona o usuário de volta ao aplicativo com uma mensagem SAML que transmite informações sobre a autenticação do usuário
- A mensagem SAML é processada e conclui-se que é necessário estabelecer um contexto de segurança para o usuário
- O usuário recebe acesso à parte desejada do aplicativo
- Também é possível iniciar o processo de SAML SSO a partir do provedor de identidade
- Nesse caso, você recebe uma resposta de autenticação sem enviar antes uma solicitação de autenticação
- Ao implementar suporte a SAML SSO, é preciso estar preparado para SSO iniciado pelo IDP
Mensagens trocadas no SAML
- Em SAML SSO, há principalmente dois tipos de mensagens de interesse
- A mensagem que vai do provedor de serviços para o IDP é chamada de solicitação SAML (request)
- A mensagem que volta do IDP para o provedor de serviços é chamada de resposta SAML (response)
- A solicitação SAML, na prática, não é tão complexa. Basta enviar XML via redirecionamento HTTP
- Inclui-se um ID na tag
<AuthnRequest> para que o IDP possa associar a <Response> à solicitação original
- Também se envia ao IDP os dados envolvidos pela tag
<Issuer> para informar quem você é
- A resposta SAML é mais complicada. Em geral, ela é enviada via POST
<Response> envolve conceitualmente algumas tags <Assertion>
<Assertion> envolve claims sobre o usuário (quem ele é, como foi autenticado pelo IDP etc.)
- Decide-se se o usuário deve fazer login ou não processando a Assertion
Observações
- Muitos detalhes foram omitidos aqui, especialmente pontos importantes para segurança
- A menos que você tenha interesse pessoal em SAML ou um motivo profissional para investigá-lo a fundo, não é recomendável implementar por conta própria um login baseado em SAML. É perda de tempo
- Se você quiser configurar SAML o mais rápido possível, oferecemos o SSOReady, um projeto open source que abstrai o SAML. Ele vai poupar muito tempo e dor de cabeça
Ainda não há comentários.