Protocolo SAML de logon único

Este artigo aborda as solicitações e respostas de autenticação SAML 2.0 que o Microsoft Entra ID suporta para logon único (SSO).

O diagrama de protocolo abaixo descreve a sequência de logon único. O serviço de nuvem (o provedor de serviços) usa uma ligação HTTP Redirect para passar um elemento AuthnRequest (solicitação de autenticação) para o Microsoft Entra ID (o provedor de identidade). Em seguida, o Microsoft Entra ID usa um vínculo de postagem HTTP para postar um elemento Response no serviço de nuvem.

Captura de tela do fluxo de trabalho de Logon Único (SSO).

Observação

Este artigo aborda o uso do SAML para logon único. Para obter mais informações sobre outras maneiras de lidar com o logon único (por exemplo, usando o OpenID Connect ou a autenticação integrada do Windows), consulte Logon único em aplicativos no Microsoft Entra ID.

AuthnRequest

Para solicitar a autenticação de um usuário, os serviços em nuvem enviam um elemento AuthnRequest para o Microsoft Entra ID. Um exemplo de SAML 2.0 AuthnRequest teria a seguinte a aparência:

<samlp:AuthnRequest
  xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
  ID="id6c1c178c166d486687be4aaf5e482730"
  Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
Parâmetro Tipo Descrição
ID Necessário O Microsoft Entra ID usa esse atributo para preencher o atributo InResponseTo da resposta retornada. Como a ID não deve começar com um número, uma estratégia comum é anexar uma cadeia de caracteres como "ID" à representação de cadeia de caracteres de um GUID. Por exemplo, id6c1c178c166d486687be4aaf5e482730 é uma ID válida.
Version Obrigatório Este parâmetro deve ser definido como 2.0.
IssueInstant Obrigatório Isso é uma cadeia de caracteres DateTime com um valor de UTC e formato de ida e volta ("o"). O Microsoft Entra ID espera um valor DateTime desse tipo, mas não avalia nem usa o valor.
AssertionConsumerServiceURL Opcional Se fornecido, esse parâmetro deverá corresponder ao RedirectUri do serviço de nuvem no Microsoft Entra ID.
ForceAuthn Opcional Esse é um valor booliano. Se for verdadeiro, significa que o usuário será forçado a se autenticar novamente, mesmo que tenha uma sessão válida no Microsoft Entra ID.
IsPassive Opcional Este é um valor booleano que especifica se o Microsoft Entra ID deve autenticar o usuário silenciosamente, sem interação com o usuário, usando o cookie de sessão, se houver um. Se isso for verdadeiro, o Microsoft Entra ID tentará autenticar o usuário usando o cookie da sessão.

Todos os outros AuthnRequest atributos, como Consent, Destination, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex, e ProviderName são ignorados.

Microsoft Entra ID também ignora o elemento Conditions em AuthnRequest.

emissor

O elemento Issuer em umaAuthnRequest deve corresponder exatamente a um dos ServicePrincipalNames no serviço de nuvem no Microsoft Entra ID. Normalmente, isso é definido como o URI da ID do aplicativo que é especificado durante o registro do aplicativo.

Um trecho de SAML contendo o elemento Issuer se parece com o exemplo a seguir:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>

NameIDPolicy

Esse elemento solicita um formato específico de ID de nome na resposta e é opcional em elementos AuthnRequest enviados ao Microsoft Entra ID.

Um elemento NameIdPolicy se parece com o seguinte exemplo:

<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>

Se NameIDPolicy for fornecido, você poderá incluir seu atributo Format opcional. O atributo Format pode ter apenas um dos valores a seguir. Qualquer outro valor resulta em um erro.

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Microsoft Entra ID emite a declaração NameID como um identificador par.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Microsoft Entra ID emite a declaração NameID no formato de endereço de email.
  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Esse valor permite que o Microsoft Entra ID selecione o formato da reivindicação. Microsoft Entra ID emite a declaração NameID como um identificador par.
  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient: o Azure Active Directory emite a declaração NameID NameID como um valor gerado aleatoriamente que é exclusivo à operação de SSO atual. Isso significa que o valor é temporário e não pode ser usado para identificar o usuário da autenticação.

Se SPNameQualifier for especificado, o Microsoft Entra ID incluirá o mesmo SPNameQualifier na resposta.

Microsoft Entra ID ignora o atributo AllowCreate.

RequestedAuthnContext

O elemento RequestedAuthnContext especifica os métodos de autenticação desejados. O item é opcional em elementos de AuthnRequest enviados para o Microsoft Entra ID. Microsoft Entra ID dá AuthnContextClassRef suporte a valores como urn:oasis:names:tc:SAML:2.0:ac:classes:Password.

Scoping

O elemento Scoping, que inclui uma lista de provedores de identidade, é opcional em elementos enviados AuthnRequest para o Microsoft Entra ID.

Se fornecido, não inclua o atributo ProxyCount ou elemento IDPListOption ou RequesterID, pois eles não têm suporte.

Assinatura

Um Signature elemento em AuthnRequest elementos é opcional. O Microsoft Entra ID pode ser configurado para impor o requisito de solicitações de autenticação assinadas. Se habilitado, somente as solicitações de autenticação assinadas serão aceitas. Caso contrário, a verificação do solicitante será fornecida respondendo apenas às URLs do Serviço do Consumidor de Declaração registradas.

Assunto

Não inclua um elemento Subject. O Microsoft Entra ID não suporta a especificação de um assunto em AuthnRequest e retornará um erro se um for fornecido.

Em vez disso, um assunto pode ser fornecido adicionando um parâmetro login_hint para a solicitação HTTP à URL de logon único, com o NameID do assunto como o valor do parâmetro.

Resposta

Quando um logon solicitado é concluído com êxito, o Microsoft Entra ID publica uma resposta no serviço de nuvem. Uma resposta para uma tentativa de logon bem-sucedida se parece com este exemplo:

<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="id758d0ef385634593a77bdf7e632984b6" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
    ...
  </ds:Signature>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
  <Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
    <Issuer>https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
    <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
      ...
    </ds:Signature>
    <Subject>
      <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
      </SubjectConfirmation>
    </Subject>
    <Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
      <AudienceRestriction>
        <Audience>https://www.contoso.com</Audience>
      </AudienceRestriction>
    </Conditions>
    <AttributeStatement>
      <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
        <AttributeValue>testuser@contoso.com</AttributeValue>
      </Attribute>
      <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
        <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
      </Attribute>
      ...
    </AttributeStatement>
    <AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
      <AuthnContext>
        <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
      </AuthnContext>
    </AuthnStatement>
  </Assertion>
</samlp:Response>

Resposta

O elemento Response inclui os resultados da solicitação de autorização. O Microsoft Entra ID define os valores ID, Version eIssueInstant no elemento Response. Ele também define os seguintes atributos:

  • RedirectUri: quando o logon for concluído com sucesso, será definido como o Destination do provedor de serviços (serviço de nuvem).
  • InResponseTo: isso é definido como o atributo ID do elemento AuthnRequest que iniciou a resposta.

Emissor

Microsoft Entra ID define o elemento Issuer como https://sts.windows.net/<TenantIDGUID>/ em que <TenantIDGUID> é a ID do locatário do Microsoft Entra.

Por exemplo, uma resposta com o elemento Issuer poderia ter a aparência deste exemplo:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>

Status

O elemento Status transmite o êxito ou a falha de logon. Ele inclui o elemento StatusCode, que contém um código ou um conjunto de códigos aninhados que representam o status da solicitação. Ele também inclui o elemento StatusMessage , que contém mensagens de erro personalizadas que são geradas durante o processo de logon.

O exemplo a seguir é uma resposta SAML para uma tentativa de logon com falha.

<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
      <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
    </samlp:StatusCode>
    <samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
    Trace ID: 0000aaaa-11bb-cccc-dd33-eeeeee333333
    Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
    </samlp:Status>
</samlp:Response>

Asserção

Além dos elementos ID, IssueInstant e Version, o Microsoft Entra ID define os seguintes elementos no elemento Assertion da resposta.

emissor

Isso é definido como https://sts.windows.net/<TenantIDGUID>/onde <TenantIDGUID> é a ID do locatário do Microsoft Entra.

<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Assinatura

O Microsoft Entra ID assina a afirmação em resposta a um logon bem-sucedido. O elemento Signature contém uma assinatura digital que o serviço de nuvem pode usar para autenticar e verificar a integridade da asserção.

Para gerar essa assinatura digital, o Microsoft Entra ID usa a chave de assinatura no elemento IDPSSODescriptor de seu documento de metadados.

<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
  digital_signature_here
</ds:Signature>

Assunto

Especifica o princípio que é o assunto das instruções na declaração. Ele contém um elemento NameID que representa o usuário autenticado. O valor NameID é um identificador de destino que é direcionado somente para o provedor de serviços que é o público-alvo do token. É persistente - pode ser revogado, mas nunca é reatribuído. Ele também é opaco, no sentido de não revelar nada sobre o usuário e não poder ser usado como um identificador para consultas de atributo.

O atributo Method do elemento SubjectConfirmation é sempre definido como urn:oasis:names:tc:SAML:2.0:cm:bearer.

<Subject>
  <NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
  </SubjectConfirmation>
</Subject>

Condições

Esse elemento especifica as condições que definem o uso aceitável de asserções SAML.

<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
  <AudienceRestriction>
    <Audience>https://www.contoso.com</Audience>
  </AudienceRestriction>
</Conditions>

Os atributos NotBefore e NotOnOrAfter especificam o intervalo durante o qual a asserção é válida.

  • O valor do atributo NotBefore é igual ou ligeiramente mais lento (menos de um segundo) do que o valor do atributo IssueInstant do elemento Assertion. O Microsoft Entra ID não leva em conta nenhuma diferença de horário entre ele e o serviço de nuvem (provedor de serviços) e não adiciona nenhum buffer a esse horário.
  • O valor do atributo NotOnOrAfter é 70 minutos depois do valor do atributo NotBefore.

Público

Ele contém um URI que identifica um público-alvo. O Microsoft Entra ID define o valor desse elemento como o valor do elemento Issuer do AuthnRequest que iniciou o logon. Para avaliar o valor Audience, use o valor do App ID URI que foi especificado durante o registro do aplicativo.

<AudienceRestriction>
  <Audience>https://www.contoso.com</Audience>
</AudienceRestriction>

Assim como o valor Issuer, o valor Audience deve corresponder exatamente a um dos nomes da entidade de serviço que representa o serviço de nuvem no Microsoft Entra ID. No entanto, se o valor do elemento Issuer não é um valor URI, o valor Audience na resposta é o Issuer valor prefixado com spn:.

AttributeStatement

Ele contém declarações sobre o assunto ou o usuário. O trecho a seguir contém um exemplo de elemento AttributeStatement . As reticências indicam que o elemento pode incluir vários atributos e valores de atributo.

<AttributeStatement>
  <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
    <AttributeValue>testuser@contoso.com</AttributeValue>
  </Attribute>
  <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
    <AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
  </Attribute>
  ...
</AttributeStatement>
  • Declaração de Nome: o valor do atributo Name (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) é o nome UPN do usuário autenticado, como testuser@managedtenant.com.
  • ObjectIdentifier Claim - O valor do atributo ObjectIdentifier (http://schemas.microsoft.com/identity/claims/objectidentifier) é o ObjectId do objeto do directory que representa o usuário autenticado no Microsoft Entra ID. ObjectId é um identificador seguro globalmente exclusivo, imutável e reutilizável do usuário autenticado.

AuthnStatement

Esse elemento declara que o assunto de asserção foi autenticado por um meio específico em determinado momento.

  • O atributo AuthnInstant especifica a hora em que o usuário se autenticou com o Microsoft Entra ID.
  • O elemento AuthnContext especifica o contexto de autenticação usado para autenticar o usuário.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
  <AuthnContext>
    <AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
  </AuthnContext>
</AuthnStatement>