Índice


Security Assertion Markup Language (SAML)


O SAML (Security Assertion Markup Language) é um padrão baseado em XML para a autenticação e autorização de informações entre dois parceiros confiáveis. Ele é baseado em outros padrões:


Atores em SAML

Identity Provider (IDP) / Asserting Party

Service Provider (SP) / Relying Party

User


SAML no Identity


O Identity suporta o Single Sign On baseado no SAML 2.0. Eles suportam os SSO SP-initiated e IDP-initiated.

SAML - DOIS CENÁRIOS - Responsabilidades do Service Provider

Funcionalidades de alto nível do SP para SSO IDP - initiated


  1. Recebe a resposta SAML.

  2. Verifica a assinatura.

  3. Valida a resposta SAML.

  4. Verifica o status da resposta, se foi uma autenticação válida ou não. Se o status for uma falha, ignora a assertion.

  5. Valida o emissor. Isto exige que o IDP seja registrado com o SP.

  6. Se criptografado, descriptografa a assertion.

  7. Valida que a resposta possui uma assertion, declarações de autenticação e declarações de atributos.

  8. Certifica-se que a assertion é valida na instância dada e é intencionada para o SP.

  9. Determina a autorização dos usuários baseado nas declarações de autenticação e atributos na assertion.

  10. Se autorizado, redireciona o usuário para o recurso requisitado/protegido.


Funcionalidades de alto nível do SP para SSO SP-initiated


  1. Gera a requisição de autenticação e envia para o IDP.
  2. Recebe a resposta SAML.
  3. Verifica a assinatura.
  4. Valida a resposta SAML.
  5. Verifica o status da resposta, se foi uma autenticação válida ou não. Se o status for uma falha, ignora a assertion.
  6. Valida o emissor. Isto exige que o IDP seja registrado com o SP.
  7. Descriptografa a assertion.
  8. Valida que a resposta possui uma assertion, declarações de autenticação e declarações de atributos.
  9. Certifica-se que a assertion é valida na instância dada e é intencionada para o SP.
  10. Determina a autorização dos usuários baseado nas declarações de autenticação e atributos na assertion.
  11. Se autorizado, redireciona o usuário para o recurso requisitado/protegido.


SAML de Exemplo

Requisição SAML do Google Apps

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                AssertionConsumerServiceURL="https://www.google.com/a/domain.com/acs"
                ID="cknmoleiackllcefehnhjinlfiaajgggmeaffkfa"
                IsPassive="false"
                IssueInstant="2012-10-18T23:40:09Z"
                ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                ProviderName="google.com"
                Version="2.0">              
                <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">google.com</saml:Issuer>         
                <samlp:NameIDPolicy
                                AllowCreate="true"
                                Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/>
</samlp:AuthnRequest>


Resposta SAML do Identity

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:Response Destination="https://login.salesforce.com"
    ID="_13302cb62e037657beae3cac41a35218"
    IssueInstant="2013-12-20T21:45:08.659Z" Version="2.0"
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <saml2:Issuer
    Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">TotvsLabs</saml2:Issuer>    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>          
……………………………………      
  
<ds:SignatureValue>Kco2wsDhR5LrpyZhp869SHtc0v9G5OTe/sPkTF8cqMoAeWJSdcFUc1HMyNkpnY8Cfyp1jE7SNYSalK7yE7aOL7QV7wDuBTAb/G2u7mHDTIOIW3TG1wxOI6uZT2NmL4UFGuVbg8lNB59Fca63lVvGawPxZ8PdjU2F/nR3vEJOLLo=</ds:SignatureValue>
        <ds:KeyInfo>
            
 <ds:X509Data>               
<ds:X509Certificate>MIICBjCCAW8CBgFC6DL/BTANBgkqhkiG9w0BAQsFADBJMSYwJAYDVQQLEx1Ub3R2c0xhYnMgUHJp………………………Bmfp9VNd6/zu
 </ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
  </ds:Signature>    <saml2p:Status xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
        <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </saml2p:Status>
    <saml2:Assertion ID="_5ed003a04c22e77bbf0aa57da0658e6b"
        IssueInstant="2013-12-20T21:45:08.714Z" Version="2.0"
        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">TotvsLabs</saml2:Issuer>
        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:SignedInfo>
          ……………………………           
</ds:SignedInfo>           
<ds:SignatureValue>Gant8FV0/+nB63AsU7T4Qv8sLb5xw6xeTrcPYIbxlqpROTwb1ihjvaGM5eZbap/yFAqFA6MVpsJ7yaTIYtcLajnE9NTf1Hqiq6rjuLUUAOiamgkmDr5iq83VqjrfCjQBf4/5VtxmI5nHdEbOFmaRy797GZQJ5fk5lQA+fxNbAKc=</ds:SignatureValue>
            <ds:KeyInfo>
       
          <ds:X509Data>                   
<ds:X509Certificate>MIICBjCCAW8CBgFC6DL/BTANBgkqhkiG9w0BAQsFADBJMSYwJAYDVQQLEx1Ub3R2c0xhYnMgUHJp………………………Bmfp9VNd6/zu</ds:X509Certificate>
                </ds:X509Data>
            </ds:KeyInfo>
        </ds:Signature>
        <saml2:Subject>
            <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">[email protected]</saml2:NameID>
            <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml2:SubjectConfirmationData
                    NotOnOrAfter="2013-12-20T21:55:08.714Z" Recipient="https://login.salesforce.com"/>
            </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions NotBefore="2013-12-20T21:45:08.714Z" NotOnOrAfter="2013-12-20T21:55:08.714Z">
            <saml2:AudienceRestriction>
   <saml2:Audience>https://saml.salesforce.com</saml2:Audience>            </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement AuthnInstant="2013-12-20T21:45:08.525Z">
            <saml2:AuthnContext>                <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
            </saml2:AuthnContext>
        </saml2:AuthnStatement>
        <saml2:AttributeStatement>
            <saml2:Attribute FriendlyName="Role" Name="Role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
                <saml2:AttributeValue
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">user</saml2:AttributeValue>
            </saml2:Attribute>
  </saml2:AttributeStatement>    </saml2:Assertion>
</saml2p:Response>



<!-- Hotjar Tracking Code for tdn.totvs.com -->
<script>
    (function(h,o,t,j,a,r){
        h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
        h._hjSettings={hjid:577655,hjsv:5};
        a=o.getElementsByTagName('head')[0];
        r=o.createElement('script');r.async=1;
        r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
        a.appendChild(r);
    })(window,document,'//static.hotjar.com/c/hotjar-','.js?sv=');
</script>