13 pontos por xguru 2024-07-29 | Ainda não há comentários. | Compartilhar no WhatsApp
  • 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:
    1. usuário: a pessoa que quer usar o aplicativo
    2. provedor de serviços (SP): o próprio aplicativo
    3. 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:
    1. O usuário tenta acessar uma parte do aplicativo no navegador web
    2. Verifica-se se o usuário tem um contexto de segurança válido
    3. Como o usuário não tem um contexto de segurança válido, a página de login é exibida
    4. 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
    5. 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
    6. O IDP mostra ao usuário um prompt pedindo credenciais. O usuário é autenticado com sucesso
    7. 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
    8. A mensagem SAML é processada e conclui-se que é necessário estabelecer um contexto de segurança para o usuário
    9. 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.

Ainda não há comentários.