Defina um perfil técnico SAML em uma política personalizada do Azure Active Directory B2C

Observação

No Azure Active Directory B2C, as políticas personalizadas são projetadas principalmente para tratar de cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuários predefinidos. Se você ainda não fez isso, saiba mais sobre o pacote de início de política personalizado em Introdução às políticas personalizadas no Active Directory B2C.

O Azure AD B2C (Azure Active Directory B2C) dá suporte para o provedor de identidade do SAML 2.0. Este artigo descreve as especificações de um perfil técnico para interagir com um provedor de declarações compatível com esse protocolo padronizado. Com um perfil de técnico SAML, pode-se federar com um provedor de identidade baseado em SAML,como o ADFS e o Salesforce. Essa federação permite que usuários entrem com suas redes sociais existentes ou identidades corporativas.

Troca de metadados

Metadados são informações usadas no protocolo SAML para expor a configuração de uma entidade SAML, como um provedor de serviços ou o provedor de identidade. Metadados definem o local dos serviços, como entrada e saída, certificados, método de entrada e muito mais. O provedor de identidade usa os metadados para saber como se comunicar com o Azure AD B2C. Os metadados são configurados em formato XML e podem ser assinados com uma assinatura digital para que a outra parte possa validar a integridade dos metadados. Quando o Azure AD B2C federa com um provedor de identidade SAML, ele atua como provedor de serviços iniciando uma solicitação SAML e aguardando uma resposta SAML. E, em alguns casos, aceita autenticação SAML não solicitada, que também é conhecida como provedor de identidade iniciado.

Os metadados podem ser configurados em ambas as partes como "Metadados estáticos" ou "Metadados dinâmicos". No modo estático, você copia os metadados completos de uma parte e define-os em outra parte. No modo dinâmico, você define a URL para os metadados enquanto a outra parte lê a configuração dinamicamente. Os princípios são os mesmos, você define os metadados do perfil técnico do Azure AD B2C no seu provedor de identidade e define os metadados do provedor de identidade no Azure AD B2C.

Cada provedor de identidade SAML tem diferentes etapas para expor e definir o provedor de serviços, neste caso, o Azure AD B2C, e definir os metadados do Azure AD B2C no provedor de identidade. Confira a documentação do provedor de identidade para obter orientação sobre como fazer isso.

O exemplo a seguir mostra um endereço de URL para os metadados do SAML de um perfil técnico do Azure AD B2C:

https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile

Substitua os seguintes valores:

  • nome do locatário seu com o nome do locatário, como fabrikam.b2clogin.com.
  • your-policy pelo nome da política. Use a política em que você configura o perfil técnico do provedor SAML ou uma política que herda dessa política.
  • seu perfil técnico com seu nome de perfil técnico do provedor de identidade SAML.

Troca de certificados de autenticação digital

Para criar uma relação de confiança entre o Azure AD B2C e o seu provedor de identidade SAML, você precisa fornecer um certificado X509 válido com a chave privada. Faça upload do certificado com a chave privada (arquivo .pfx) para o repositório de chaves de política do Azure AD B2C. O Azure AD B2C assina digitalmente a solicitação de entrada SAML usando o certificado que você fornecer.

O certificado é usado dos seguintes modos:

  • O Azure AD B2C gera e assina uma solicitação SAML, usando a chave privada do Azure AD B2C do certificado. A solicitação SAML é enviada ao provedor de identidade, que valida a solicitação usando a chave pública do Azure AD B2C do certificado. O certificado público do Azure AD B2C é acessível por meio de metadados do perfil técnico. Como alternativa, você pode fazer upload manualmente do arquivo .cer para seu provedor de identidade SAML.
  • O provedor de identidade assina os dados enviados para o Azure AD B2C usando a chave privada do provedor de identidade do certificado. O Azure AD B2C valida os dados usando o certificado público do provedor de identidade. Cada provedor de identidade tem diferentes etapas para a configuração. Confira a documentação dos seu provedor de identidade para obter orientação sobre como fazer isso. No Azure AD B2C, sua política precisa acessar a chave pública do certificado usando metadados do provedor de identidade.

Um certificado autoassinado é aceitável para a maioria dos cenários. Para ambientes de produção, é recomendável usar um certificado X509 emitido por uma autoridade de certificação. Além disso, conforme descrito posteriormente neste documento, para um ambiente de não produção é possível desabilitar a assinatura do SAML em ambos os lados.

O diagrama a seguir mostra a troca de metadados e do certificado:

troca de metadados e do certificado

Criptografia digital

Para criptografar a declaração de resposta SAML, o provedor de identidade sempre usa uma chave pública de um certificado de criptografia em um perfil técnico do Azure AD B2C. Quando o Azure AD B2C precisa descriptografar os dados, ele usa a parte privada do certificado de criptografia.

Para criptografar a declaração de resposta SAML:

  1. Faça upload do certificado X509 válido com a chave privada (arquivo .pfx) para o repositório de chaves de política do Azure AD B2C.
  2. Adicione um elemento CryptographicKey com um identificador de SamlAssertionDecryption à coleção CryptographicKeys do perfil técnico. Defina StorageReferenceId para o nome da chave de política que você criou na etapa 1.
  3. Defina os metadados do perfil técnico WantsEncryptedAssertions para true.
  4. Atualize o provedor de identidade com os novos metadados de perfil técnico do Azure AD B2C. Você deve ver KeyDescriptor com a propriedade use definida como encryption contendo a chave pública do certificado.

O exemplo a seguir mostra a seção Descritor de Chave dos metadados SAML usados para criptografia:

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

Protocolo

O atributo Name do elemento Protocol precisa ser definido como SAML2.

Declarações de entrada

O elemento InputClaims é usado para enviar um NameID no Subject da solicitação AuthN SAML. Para fazer isso, adicione uma declaração de entrada com um PartnerClaimType definido como subject, conforme mostrado abaixo.

<InputClaims>
	<InputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="subject" />
</InputClaims>

Declarações de saída

O elemento OutputClaims contém uma lista de declarações retornadas pelo provedor de identidade SAML na seção AttributeStatement. Talvez seja necessário mapear o nome da declaração definida em sua política para o nome definido no provedor de identidade. Você também pode incluir declarações que não são retornadas pelo provedor de identidade, desde que você defina o atributo DefaultValue.

Declaração de saída do nome da entidade

Para ler o NameId da declaração SAML no Subject como uma declaração normalizada, defina a declaração PartnerClaimType como o valor do atributo SPNameQualifier. Se o atributo SPNameQualifier não for apresentado, defina a declaração PartnerClaimType como o valor do atributo NameQualifier.

Declaração SAML:

<saml:Subject>
  <saml:NameID SPNameQualifier="http://your-idp.com/unique-identifier" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">david@contoso.com</saml:NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="_cd37c3f2-6875-4308-a9db-ce2cf187f4d1" NotOnOrAfter="2020-02-15T16:23:23.137Z" Recipient="https://your-tenant.b2clogin.com/your-tenant.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" />
    </SubjectConfirmation>
  </saml:SubjectConfirmation>
</saml:Subject>

Declaração de saída:

<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />

Se ambos os atributos SPNameQualifier ou NameQualifier não forem apresentados na declaração SAML, defina a declaração PartnerClaimType como assertionSubjectName. Verifique se o NameId é o primeiro valor na declaração XML. Quando definir mais de uma asserção, o Azure AD B2C escolherá o valor do assunto da última declaração.

O exemplo a seguir mostra as declarações retornadas por um provedor de identidade SAML:

  • A declaração socialIdpUserId é mapeada para a declaração assertionSubjectName.
  • A declaração first_name é mapeada para a declaração givenName.
  • A declaração last_name é mapeada para a declaração surname.
  • A declaraçãoDisplayName é mapeada para a declaração de nome.
  • A declaração email sem mapeamento de nome.

O perfil técnico também retorna declarações que não são retornadas pelo provedor de identidade:

  • A declaração identityProvider que contém o nome do provedor de identidade.
  • A declaração authenticationSource com um valor padrão de socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="assertionSubjectName" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email"  />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

O elemento OutputClaimsTransformations pode conter uma coleção de elementos OutputClaimsTransformation usados para modificar as declarações de saída ou gerar novas declarações.

Metadados

Atributo Obrigatório Descrição
PartnerEntity Sim URL dos metadados do provedor de identidade SAML. Copie os metadados do provedor de identidade e adicione-o dentro do elemento CDATA <![CDATA[Your IDP metadata]]>. Não é recomendável inserir os metadados do provedor de identidade. O provedor de identidade pode alterar as configurações ou atualizar o certificado. Se os metadados do provedor de identidade tiverem sido alterados, obtenha os novos metadados e atualize sua política com o novo.
WantsSignedRequests Não Indica se o perfil técnico requer que todas as solicitações de autenticação de saída sejam assinadas. Valores possíveis: true ou false. O valor padrão é true. Quando o valor é definido como true, a chave de criptografia SamlMessageSigning deve ser especificada e todas as solicitações de autenticação de saída devem estar assinadas. Se o valor for definido como false, os parâmetros SigAlg e Signature (cadeia de caracteres de consulta ou parâmetro de postagem) serão omitidos da solicitação. Esses metadados também controlam o atributo AuthnRequestsSigned dos metadados, que é a saída nos metadados do perfil técnico do Azure AD B2C que é compartilhado com o provedor de identidade. O Azure AD B2C não assina a solicitação se o valor de WantsSignedRequests no perfil técnico de metadados for definido como false e os metadados do provedor de identidade WantAuthnRequestsSigned forem definidos como false ou não especificado.
XmlSignatureAlgorithm Não O método que o Azure AD B2C usa para assinar a solicitação SAML. Esse metadado controla o valor do parâmetro SigAlg (cadeia de caracteres de consulta ou parâmetro de postagem) na solicitação SAML. Valores possíveis: Sha256, Sha384, Sha512 ou Sha1 (padrão). Certifique-se de configurar o algoritmo de assinatura em ambos os lados com o mesmo valor. Use apenas o algoritmo com suporte do seu certificado.
WantsSignedAssertions Não Indica se o perfil técnico exige que todas as declarações de entrada estejam assinadas. Valores possíveis: true ou false. O valor padrão é true. Se o valor for definido como true, todas as declarações da seção saml:Assertion enviadas pelo provedor de identidade para o Azure AD B2C deverão estar assinadas. Se o valor for definido como false, o provedor de identidade não deverá assinar as declarações, mas, mesmo se isso acontecer, o Azure AD B2C não validará a assinatura. Esses metadados também controlam o WantsAssertionsSigned do sinalizador de metadados, que é a saída nos metadados do perfil técnico do Azure AD B2C que é compartilhado com o provedor de identidade. Se você desabilitar a validação de declarações, também deverá desabilitar a validação de assinatura de resposta (para obter mais informações, confira ResponsesSigned).
ResponsesSigned Não Valores possíveis: true ou false. O valor padrão é true. Se o valor for definido como false, o provedor de identidade não deverá assinar a resposta SAML, mas, mesmo se isso acontecer, o Azure AD B2C não validará a assinatura. Se o valor for definido como true, a resposta SAML enviada pelo provedor de identidade para o Azure AD B2C será assinada e deverá ser validada. Se você desabilitar a validação da resposta SAML, também deverá desabilitar a validação de assinatura da declaração (para obter mais informações, confira WantsSignedAssertions).
WantsEncryptedAssertions Não Indica se o perfil técnico exige que todas as declarações de entrada estejam criptografadas. Valores possíveis: true ou false. O valor padrão é false. Se o valor for definido como true, as declarações enviadas pelo provedor de identidade para o Azure AD B2C deverão ser assinadas e a chave de criptografia SamlAssertionDecryption deverá ser especificada. Se o valor for definido como true, os metadados do perfil técnico do Azure AD B2C incluirão a seção de criptografia. O provedor de identidade lê os metadados e criptografa a declaração de resposta SAML com a chave pública que é fornecida nos metadados do perfil técnico do Azure AD B2C. Se você habilitar a criptografia de declarações, também precisará desabilitar a validação de assinatura de resposta (para obter mais informações, confira ResponsesSigned).
NameIdPolicyFormat Não Especifica as restrições d o identificador de nome a ser usado para representar o assunto solicitado. Se omitido, qualquer tipo de identificador com suporte pelo provedor de identidade para o assunto solicitado pode ser usado. Por exemplo, urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified. NameIdPolicyFormat pode ser usado com NameIdPolicyAllowCreate. Examine a documentação do provedor de identidade para obter orientação sobre qual nome há suporte para políticas de ID.
NameIdPolicyAllowCreate Não Ao usar NameIdPolicyFormat, também se pode especificar a AllowCreate propriedade do NameIDPolicy. O valor de metadados é true ou false para indicar se o provedor de identidade tem permissão para criar uma nova conta durante o fluxo de entrada. Confira a documentação do provedor de identidade para obter orientação sobre como fazer isso.
AuthenticationRequestExtensions Não Os elementos de extensão de mensagem do protocolo opcional são acordados entre o Azure AD B2C e o provedor de identidade. A extensão é apresentada no formato XML. Adicione os dados XML dentro do elemento CDATA <![CDATA[Your IDP metadata]]>. Verifique a documentação do provedor de identidade para ver se o elemento de extensões é suportado.
IncludeAuthnContextClassReferences Não Especifique uma ou mais referências de URI que identifica as classes de contexto de autenticação. Por exemplo, para permitir que um usuário entre com o nome de usuário e senha apenas, defina o valor urn:oasis:names:tc:SAML:2.0:ac:classes:Password. Para permitir a entrada com o nome de usuário e senha ao longo de uma sessão protegida (SSL/TLS), especifique PasswordProtectedTransport. Examine a documentação do provedor de identidade para obter orientação sobre os URIs AuthnContextClassRef suportados. Especifique vários URIs como uma lista delimitada por vírgulas.
IncludeKeyInfo Não Indica se a solicitação de autenticação SAML contém a chave pública do certificado quando a associação é definida como HTTP-POST. Valores possíveis: true ou false.
IncludeClaimResolvingInClaimsHandling Não Em declarações de entrada e saída, especifica se a resolução de declarações está incluída no perfil técnico. Valores possíveis: true ou false (padrão). Se quiser usar um resolvedor de declarações no perfil técnico, defina como true.
SingleLogoutEnabled Não Indica se, durante a entrada, o perfil técnico tenta sair de provedores de identidade federada. Para obter mais informações, consulte Saída da sessão do Azure AD B2C. Valores possíveis: true (padrão) ou false.
ForceAuthN No Passa o valor ForceAuthN na solicitação de autenticação SAML para determinar se o IdP do SAML externo será forçado a solicitar autenticação ao usuário. Por padrão, o Azure AD B2C define o valor ForceAuthN como falso no logon inicial. Se a sessão for redefinida (usando o prompt=login no OIDC, por exemplo), o valor ForceAuthN será definido como true. A definição do item de metadados, conforme mostrado abaixo, forçará o valor de todas as solicitações ao IdP externo. Valores possíveis: true ou false.
ProviderName Não Passa o valor ProviderName na solicitação de autenticação SAML.

Chaves criptográficas

O elemento CryptographicKeys contém os seguintes atributos:

Atributo Obrigatório Descrição
SamlMessageSigning Sim O certificado X509 (conjunto de chaves RSA) a ser usado para assinar as mensagens de SAML. O Azure AD B2C usa essa chave para assinar as solicitações e enviá-las para o provedor de identidade.
SamlAssertionDecryption Não* Um certificado X509 (conjunto de chaves RSA). Um provedor de identidade SAML usa a parte pública do certificado para criptografar a asserção da resposta SAML. O Azure AD B2C usa a parte privada do certificado para descriptografar a declaração.

*Obrigatório quando o IDP externo criptografa declarações SAML.
MetadataSigning Não O certificado X509 (conjunto de chaves RSA) a ser usado para assinar os metadados de SAML. O Azure AD B2C usa essa chave para assinar os metadados.

Próximas etapas

Consulte os seguintes artigos para obter exemplos de como trabalhar com provedores de identidade SAML no Azure AD B2C: