Opções para registrar um aplicativo SAML no Azure AD B2C
Este artigo descreve as opções de configuração que estão disponíveis quando você está conectando o Azure Ative Directory B2C (Azure AD B2C) com seu aplicativo SAML (Security Assertion Markup Language).
Antes de começar, use o seletor Escolha um tipo de política para escolher o tipo de política que você está configurando. O Azure Ative Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos de usuário predefinidos ou por meio de políticas personalizadas totalmente configuráveis. As etapas necessárias neste artigo são diferentes para cada método.
Este recurso está disponível apenas para políticas personalizadas. Para as etapas de configuração, selecione Política personalizada no seletor anterior.
Especificar uma assinatura de resposta SAML
Você pode especificar um certificado a ser usado para assinar as mensagens SAML. A mensagem é o elemento dentro da resposta SAML enviada para o <samlp:Response>
aplicativo.
Se ainda não tiver uma chave de política, crie uma. Em seguida, configure o item de SamlMessageSigning
metadados no perfil técnico do Emissor de Token SAML. StorageReferenceId
deve fazer referência ao nome da chave da política.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Algoritmo de assinatura
Você pode configurar o algoritmo de assinatura usado para assinar a asserção SAML. Os valores possíveis são Sha256
, , Sha512
Sha384
, ou Sha1
. Verifique se o perfil técnico e o aplicativo usam o mesmo algoritmo de assinatura. Utilize apenas o algoritmo suportado pelo certificado.
Configure o algoritmo de assinatura usando a chave de metadados dentro do elemento de XmlSignatureAlgorithm
terceira parte Metadata
confiável.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Verifique a assinatura da asserção SAML
Quando seu aplicativo espera que a seção de asserção SAML seja assinada, certifique-se de que o provedor de serviços SAML defina como WantAssertionsSigned
true
. Se estiver definido como false
ou não existir, a seção de asserção não será assinada.
O exemplo a seguir mostra metadados para um provedor de serviços SAML, com WantAssertionsSigned
definido como true
.
<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
<SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</SPSSODescriptor>
</EntityDescriptor>
Certidão de assinatura
Sua política deve especificar um certificado a ser usado para assinar a seção de asserções SAML da resposta SAML. Se ainda não tiver uma chave de política, crie uma. Em seguida, configure o item de SamlAssertionSigning
metadados no perfil técnico do Emissor de Token SAML. StorageReferenceId
deve fazer referência ao nome da chave da política.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Habilitar criptografia em asserções SAML
Quando seu aplicativo espera que as asserções SAML estejam em um formato criptografado, verifique se a criptografia está habilitada na política do Azure AD B2C.
O Azure AD B2C usa o certificado de chave pública do provedor de serviços para criptografar a asserção SAML. A chave pública deve existir no ponto de extremidade de metadados do aplicativo SAML com o KeyDescriptor
use
valor definido como Encryption
, conforme mostrado no exemplo a seguir:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Para permitir que o Azure AD B2C envie declarações criptografadas, defina o item de WantsEncryptedAssertion
metadados como true
no perfil técnico da terceira parte confiável. Você também pode configurar o algoritmo usado para criptografar a asserção SAML.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="WantsEncryptedAssertions">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Método de encriptação
Para configurar o método de criptografia usado para criptografar os dados de asserção SAML, defina a DataEncryptionMethod
chave de metadados dentro da terceira parte confiável. Os valores possíveis são Aes256
(padrão), Aes192
, , Sha512
ou Aes128
. Os metadados controlam o <EncryptedData>
valor do elemento na resposta SAML.
Para configurar o método de criptografia para criptografar a cópia da chave que foi usada para criptografar os dados de asserção SAML, defina a KeyEncryptionMethod
chave de metadados dentro da terceira parte confiável. Os valores possíveis são:
Rsa15
(padrão): algoritmo RSA Public Key Cryptography Standard (PKCS) Versão 1.5.RsaOaep
: Algoritmo de encriptação RSA Optimal Asymmetric Encryption Padding (OAEP).
Os metadados controlam o <EncryptedKey>
valor do elemento na resposta SAML.
O exemplo a seguir mostra a EncryptedAssertion
seção de uma asserção SAML. O método de dados criptografados é , e o método de chave criptografada é Aes128
Rsa15
.
<saml:EncryptedAssertion>
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
<dsig:KeyInfo>
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</dsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml:EncryptedAssertion>
Você pode alterar o formato das asserções criptografadas. Para configurar o formato de encriptação, defina a chave de UseDetachedKeys
metadados na entidade confiadora. Valores possíveis: true
ou false
(padrão). Quando o valor é definido como , as chaves desanexadas adicionam a asserção criptografada como true
um filho de em vez de EncryptedAssertion
EncryptedData
.
Configure o método e o formato de criptografia usando as chaves de metadados dentro do perfil técnico da terceira parte confiável:
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="DataEncryptionMethod">Aes128</Item>
<Item Key="KeyEncryptionMethod">Rsa15</Item>
<Item Key="UseDetachedKeys">false</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Configurar fluxo iniciado pelo IdP
Quando seu aplicativo espera receber uma asserção SAML sem primeiro enviar uma solicitação SAML AuthN para o provedor de identidade (IdP), você deve configurar o Azure AD B2C para fluxo iniciado pelo IdP.
No fluxo iniciado pelo IdP, o provedor de identidade (Azure AD B2C) inicia o processo de entrada. O provedor de identidade envia uma resposta SAML não solicitada para o provedor de serviços (seu aplicativo de terceira parte confiável).
Atualmente, não oferecemos suporte a cenários em que o provedor de identidade inicial é um provedor de identidade externo federado com o Azure AD B2C, como os Serviços de Federação do Ative Directory ou o Salesforce. O fluxo iniciado pelo IdP é suportado apenas para autenticação de conta local no Azure AD B2C.
Para habilitar o fluxo iniciado pelo IdP, defina o item de IdpInitiatedProfileEnabled
metadados como true
no perfil técnico da terceira parte confiável.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="IdpInitiatedProfileEnabled">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Para entrar ou inscrever um usuário por meio do fluxo iniciado pelo IdP, use a seguinte URL:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state>
Substitua os seguintes valores:
- Substitua
<tenant-name>
pelo nome do locatário. - Substitua
<policy-name>
pelo nome da sua política de terceira parte confiável SAML. - Substitua
<app-identifier-uri>
peloidentifierUris
valor no arquivo de metadados, comohttps://contoso.onmicrosoft.com/app-name
. - [Opcional] substitua
<relay-state>
por um valor incluído na solicitação de autorização que também é retornado na resposta do token. Orelay-state
parâmetro é usado para codificar informações sobre o estado do usuário no aplicativo antes da solicitação de autenticação ocorrer, como a página em que ele estava.
Política de exemplo
Você pode usar uma política de exemplo completa para testar com o aplicativo de teste SAML:
- Baixe a política de exemplo de login iniciada pelo SAML-SP.
- Atualize
TenantId
para corresponder ao seu nome de locatário. Este artigo usa o exemplo contoso.b2clogin.com. - Mantenha o nome da política B2C_1A_signup_signin_saml.
Configurar o tempo de vida da resposta SAML
Você pode configurar o período de tempo em que a resposta SAML permanece válida. Defina o tempo de vida usando o TokenLifeTimeInSeconds
item de metadados dentro do perfil técnico do Emissor de Token SAML. Esse valor é o número de segundos que pode decorrer do carimbo de data/hora, calculado no momento da emissão do NotBefore
token. O tempo de vida padrão é de 300 segundos (cinco minutos).
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenLifeTimeInSeconds">400</Item>
</Metadata>
...
</TechnicalProfile>
Configurar a distorção de tempo de uma resposta SAML
Você pode configurar a distorção de tempo aplicada ao carimbo de tempo de resposta NotBefore
SAML. Essa configuração garante que, se os tempos entre duas plataformas não estiverem sincronizados, a asserção SAML ainda será considerada válida quando estiver dentro dessa inclinação de tempo.
Defina a distorção de tempo usando o TokenNotBeforeSkewInSeconds
item de metadados dentro do perfil técnico do Emissor de Token SAML. O valor de inclinação é dado em segundos, com um valor padrão de 0. O valor máximo é 3600 (uma hora).
Por exemplo, quando TokenNotBeforeSkewInSeconds
é definido como 120
segundos:
- O token é emitido às 13:05:10 UTC.
- O token é válido a partir das 13:03:10 UTC.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenNotBeforeSkewInSeconds">120</Item>
</Metadata>
...
</TechnicalProfile>
Remover milissegundos da data e hora
Você pode especificar se milissegundos serão removidos dos valores de data e hora dentro da resposta SAML. (Esses valores incluem IssueInstant
, , NotOnOrAfter
NotBefore
, e AuthnInstant
.) Para remover os milissegundos, defina a chave de RemoveMillisecondsFromDateTime
metadados na terceira parte confiável. Valores possíveis: false
(padrão) ou true
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
<Item Key="RemoveMillisecondsFromDateTime">true</Item>
</Metadata>
<OutputClaims>
...
</OutputClaims>
<SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
</TechnicalProfile>
</RelyingParty>
Usar um ID de emissor para substituir um URI do emissor
Se você tiver vários aplicativos SAML que dependem de valores diferentes entityID
, poderá substituir o IssuerUri
valor em seu arquivo de terceira parte confiável. Para substituir o URI do emissor, copie o perfil técnico com o ID do arquivo base e substitua o Saml2AssertionIssuer
IssuerUri
valor.
Gorjeta
Copie a <ClaimsProviders>
seção da base e preserve esses elementos no provedor de declarações: <DisplayName>Token Issuer</DisplayName>
, , <TechnicalProfile Id="Saml2AssertionIssuer">
e <DisplayName>Token Issuer</DisplayName>
.
Exemplo:
<ClaimsProviders>
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Metadata>
<Item Key="IssuerUri">customURI</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpInSAML" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
…
Gerir uma sessão
Você pode gerenciar a sessão entre o Azure AD B2C e o aplicativo de terceira parte confiável SAML usando o elemento e o UseTechnicalProfileForSessionManagement
SamlSSOSessionProvider.
Forçar os usuários a se autenticarem novamente
Para forçar os usuários a se autenticarem novamente, o aplicativo pode incluir o ForceAuthn
atributo na solicitação de autenticação SAML. O ForceAuthn
atributo é um valor booleano. Quando estiver definido como true
, a sessão do usuário será invalidada no Azure AD B2C e o usuário será forçado a se autenticar novamente.
A seguinte solicitação de autenticação SAML demonstra como definir o ForceAuthn
atributo como true
.
<samlp:AuthnRequest
Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
ForceAuthn="true" ...>
...
</samlp:AuthnRequest>
Assinar os metadados SAML do Azure AD B2C IdP
Você pode instruir o Azure AD B2C a assinar seu documento de metadados para o provedor de identidade SAML, se o aplicativo exigir. Se ainda não tiver uma chave de política, crie uma. Em seguida, configure o item de MetadataSigning
metadados no perfil técnico do Emissor de Token SAML. StorageReferenceId
deve fazer referência ao nome da chave da política.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Depurar o protocolo SAML
Para ajudar a configurar e depurar a integração com seu provedor de serviços, você pode usar uma extensão de navegador para o protocolo SAML. As extensões de navegador incluem a extensão SAML DevTools para Chrome, SAML-tracer para Firefox e ferramentas de desenvolvedor para Edge ou Internet Explorer.
Usando essas ferramentas, você pode verificar a integração entre seu aplicativo e o Azure AD B2C. Por exemplo:
- Verifique se a solicitação SAML contém uma assinatura e determine qual algoritmo é usado para entrar na solicitação de autorização.
- Verifique se o Azure AD B2C retorna uma mensagem de erro.
- Verifique se a seção de asserção está criptografada.
Próximos passos
- Encontre mais informações sobre o protocolo SAML no site do OASIS.
- Obtenha o aplicativo Web de teste SAML do repositório da comunidade GitHub do Azure AD B2C.