Protocolo SAML de início de sessão único

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

O diagrama de protocolo a seguir descreve a sequência de logon único. O serviço de nuvem (o provedor de serviços) usa uma ligação de redirecionamento HTTP para passar um AuthnRequest elemento (solicitação de autenticação) para o Microsoft Entra ID (o provedor de identidade). Em seguida, o Microsoft Entra ID usa uma ligação HTTP pós para postar um Response elemento no serviço de nuvem.

Captura de ecrã do fluxo de trabalho de início de sessão único (SSO).

Nota

Este artigo discute 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 para aplicativos no Microsoft Entra ID.

AuthnRequest

Para solicitar uma autenticação de usuário, os serviços de nuvem enviam um AuthnRequest elemento para o Microsoft Entra ID. Um exemplo de SAML 2.0 AuthnRequest pode se parecer com o exemplo a seguir:

<samlp:AuthnRequest
  xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
  ID="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w"
  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 Obrigatório O Microsoft Entra ID usa esse atributo para preencher o InResponseTo atributo da resposta retornada. ID não deve começar com um número, portanto, uma estratégia comum é anexar uma cadeia de caracteres como "ID" à representação de cadeia de caracteres de um GUID. Por exemplo, id6c1c178c166d486687be4aaf5e482730 é um ID válido.
Version Necessário Este parâmetro deve ser definido como 2.0.
IssueInstant Necessário Esta é uma cadeia de caracteres DateTime com um valor 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 deve corresponder ao RedirectUri do serviço de nuvem no Microsoft Entra ID.
ForceAuthn Opcional Este é um valor booleano. Se verdadeiro, significa que o usuário será forçado a se autenticar novamente, mesmo que tenha uma sessão válida com o 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 do usuário, usando o cookie de sessão, se existir. Se isso for verdade, o Microsoft Entra ID tenta autenticar o usuário usando o cookie de sessão.

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

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

Emissor

O Issuer elemento em um AuthnRequest 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 especificado durante o registro do aplicativo.

Um trecho SAML contendo o Issuer elemento se parece com o seguinte exemplo:

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

NomeIDPolicy

Este elemento solicita um formato de ID de nome específico na resposta e é opcional nos AuthnRequest elementos enviados para o Microsoft Entra ID.

Um NameIdPolicy elemento se parece com o exemplo a seguir:

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

Se NameIDPolicy for fornecido, você pode incluir seu atributo opcional Format . O Format atributo pode ter apenas um dos seguintes valores, qualquer outro valor resulta em um erro.

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

Se SPNameQualifier for especificado, o ID do Microsoft Entra inclui o mesmo SPNameQualifier na resposta.

O Microsoft Entra ID ignora o AllowCreate atributo.

RequestedAuthnContext

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

Âmbito

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

Se fornecido, não inclua o atributo ou RequesterID elementoProxyCount, IDPListOption pois eles não são suportados.

Assinatura

Um Signature elemento em AuthnRequest elementos é opcional. O Microsoft Entra ID pode ser configurado para impor o requisito de pedidos de autenticação assinados. Se habilitada, somente solicitações de autenticação assinadas serão aceitas, caso contrário, a verificação do solicitante será fornecida respondendo apenas a URLs de Serviço ao Consumidor de Asserção registradas.

Assunto

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

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

Response

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

<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="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w" 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>

Response

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

  • Destination: Quando o logon é concluído com êxito, ele é definido como o RedirectUri do provedor de serviços (serviço de nuvem).
  • InResponseTo: Isso é definido como o ID atributo do elemento que iniciou a AuthnRequest resposta.

Emissor

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

Por exemplo, uma resposta com o elemento Emissor pode ser semelhante ao seguinte exemplo:

<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>

Status

O Status elemento transmite o sucesso ou fracasso do sign-on. Ele inclui o StatusCode elemento , que contém um código ou um conjunto de códigos aninhados que representa o status da solicitação. Ele também inclui o StatusMessage elemento , que contém mensagens de erro personalizadas que são geradas durante o processo de logon.

O exemplo a seguir é uma resposta SAML a uma tentativa de logon malsucedida.

<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-dd22-eeeeee333333
    Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
    </samlp:Status>
</samlp:Response>

Asserção

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

Emissor

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

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

Assinatura

A ID do Microsoft Entra assina a asserção em resposta a uma entrada bem-sucedida. O Signature elemento contém uma assinatura digital que o serviço de nuvem pode usar para autenticar a origem para verificar a integridade da afirmação.

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

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

Assunto

Isto especifica o princípio que é o objeto das declarações na asserção. Ele contém um NameID elemento , que representa o usuário autenticado. O NameID valor é um identificador de destino direcionado apenas para o provedor de serviços que é o público do token. É persistente - pode ser revogado, mas nunca é reatribuído. Também é opaco, na medida em que não revela nada sobre o usuário e não pode ser usado como um identificador para consultas de atributos.

O Method atributo do SubjectConfirmation elemento é 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

Este 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 NotBefore atributos e NotOnOrAfter especificam o intervalo durante o qual a asserção é válida.

  • O valor do NotBefore atributo é igual ou ligeiramente (menos de um segundo) posterior ao valor do IssueInstant atributo do Assertion elemento. O Microsoft Entra ID não contabiliza nenhuma diferença de tempo entre ele e o serviço de nuvem (provedor de serviços) e não adiciona nenhum buffer a esse tempo.
  • O valor do NotOnOrAfter atributo é 70 minutos mais tarde do que o valor do NotBefore atributo.

Audiência

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

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

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

AttributeStatement

Isso contém reivindicações sobre o assunto ou usuário. O trecho a seguir contém um elemento de exemplo 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>
  • Reivindicação de nome - O valor do Name atributo (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) é o nome principal do usuário autenticado, como testuser@managedtenant.com.
  • Declaração ObjectIdentifier - O valor do ObjectIdentifier atributo (http://schemas.microsoft.com/identity/claims/objectidentifier) é o ObjectId do objeto de diretório que representa o usuário autenticado no ID do Microsoft Entra. ObjectId é um identificador seguro imutável, globalmente exclusivo e de reutilização do usuário autenticado.

Declaração AuthnStatement

Este elemento afirma que o sujeito da asserção foi autenticado por um determinado meio em um determinado momento.

  • O AuthnInstant atributo especifica o momento em que o usuário se autenticou com o ID do Microsoft Entra.
  • O AuthnContext elemento 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>