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 a seguir 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.
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="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 |
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çãoNameID
como um identificador par.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: Microsoft Entra ID emite a declaraçãoNameID
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çãoNameID
como um identificador par.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: o Azure Active Directory emite a declaraçãoNameID
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="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>
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 oDestination
do provedor de serviços (serviço de nuvem).InResponseTo
: isso é definido como o atributoID
do elementoAuthnRequest
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/aaaabbbb-0000-cccc-1111-dddd2222eeee/</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-dd22-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 atributoIssueInstant
do elementoAssertion
. 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 atributoNotBefore
.
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, comotestuser@managedtenant.com
. - ObjectIdentifier Claim - O valor do atributo
ObjectIdentifier
(http://schemas.microsoft.com/identity/claims/objectidentifier
) é oObjectId
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>