Definir um perfil técnico do fornecedor de identidade SAML numa política personalizada do Azure Active Directory B2C
Nota
No Azure Active Directory B2C, as políticas personalizadas são concebidas principalmente para abordar cenários complexos. Para a maioria dos cenários, recomendamos que utilize fluxos de utilizador incorporados. Se ainda não o fez, saiba mais sobre o pacote de introdução de políticas personalizadas em Introdução às políticas personalizadas no Active Directory B2C.
O Azure Active Directory B2C (Azure AD B2C) fornece suporte para o fornecedor de identidade SAML 2.0. Este artigo descreve as especificidades de um perfil técnico para interagir com um fornecedor de afirmações que suporta este protocolo padronizado. Com um perfil técnico SAML, pode federar com um fornecedor de identidade baseado em SAML, como o ADFS e o Salesforce. Esta federação permite que os seus utilizadores iniciem sessão com as respetivas identidades sociais ou empresariais existentes.
Troca de metadados
Os metadados são informações utilizadas no protocolo SAML para expor a configuração de uma parte SAML, como um fornecedor de serviços ou um fornecedor de identidade. Os metadados definem a localização dos serviços, como o início de sessão e o fim de sessão, certificados, método de início de sessão e muito mais. O fornecedor de identidade utiliza os metadados para saber como comunicar com Azure AD B2C. Os metadados estão configurados no formato XML e podem ser assinados com uma assinatura digital para que a outra parte possa validar a integridade dos metadados. Quando Azure AD federações B2C com um fornecedor de identidade SAML, atua como um fornecedor de serviços que inicia um pedido SAML e aguarda uma resposta SAML. E, em alguns casos, aceita a autenticação SAML não solicitada, que também é conhecida como fornecedor de identidade iniciada.
Os metadados podem ser configurados em ambas as partes como "Metadados Estáticos" ou "Metadados Dinâmicos". No modo estático, copia todos os metadados de uma entidade e define-os na outra parte. No modo dinâmico, define o URL para os metadados enquanto a outra parte lê a configuração dinamicamente. Os princípios são os mesmos, define os metadados do perfil técnico Azure AD B2C no seu fornecedor de identidade e define os metadados do fornecedor de identidade no Azure AD B2C.
Cada fornecedor de identidade SAML tem passos diferentes para expor e definir o fornecedor de serviços, neste caso Azure AD B2C e definir os metadados Azure AD B2C no fornecedor de identidade. Veja a documentação do seu fornecedor de identidade para obter orientações sobre como fazê-lo.
O exemplo seguinte mostra um endereço DE URL para os metadados SAML de um perfil técnico 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:
- your-tenant-name com o seu nome de inquilino, como fabrikam.b2clogin.com.
- a sua política com o nome da sua política. Utilize a política onde configura o perfil técnico do fornecedor SAML ou uma política que herda dessa política.
- o seu perfil técnico com o nome do perfil técnico do seu fornecedor de identidade SAML.
Troca de certificados de assinatura digital
Para criar uma confiança entre Azure AD B2C e o seu fornecedor de identidade SAML, tem de fornecer um certificado X509 válido com a chave privada. Carregue o certificado com a chave privada (ficheiro .pfx) para o arquivo de chaves de política Azure AD B2C. Azure AD B2C assina digitalmente o pedido de início de sessão SAML com o certificado que fornecer.
O certificado é utilizado das seguintes formas:
- Azure AD B2C gera e assina um pedido SAML com a chave privada Azure AD B2C do certificado. O pedido SAML é enviado para o fornecedor de identidade, que valida o pedido com Azure AD chave pública B2C do certificado. O Azure AD certificado público B2C está acessível através de metadados de perfil técnico. Em alternativa, pode carregar manualmente o ficheiro .cer para o seu fornecedor de identidade SAML.
- O fornecedor de identidade assina os dados enviados para Azure AD B2C com a chave privada do fornecedor de identidade do certificado. Azure AD B2C valida os dados com o certificado público do fornecedor de identidade. Cada fornecedor de identidade tem passos diferentes para a configuração. Veja a documentação do seu fornecedor de identidade para obter orientações sobre como fazê-lo. No Azure AD B2C, a sua política precisa de acesso à chave pública do certificado através dos metadados do fornecedor de identidade.
Um certificado autoassinado é aceitável para a maioria dos cenários. Para ambientes de produção, é recomendado utilizar um certificado X509 emitido por uma autoridade de certificação. Além disso, conforme descrito mais adiante neste documento, para um ambiente de não produção, pode desativar a assinatura SAML em ambos os lados.
O diagrama seguinte mostra os metadados e a troca de certificados:
Encriptação digital
Para encriptar a asserção de resposta SAML, o fornecedor de identidade utiliza sempre uma chave pública de um certificado de encriptação num perfil técnico Azure AD B2C. Quando Azure AD B2C precisa de desencriptar os dados, utiliza a parte privada do certificado de encriptação.
Para encriptar a asserção da resposta SAML:
- Carregue um certificado X509 válido com a chave privada (ficheiro .pfx) para o arquivo de chaves de política Azure AD B2C.
- Adicione um elemento CryptographicKey com um identificador de
SamlAssertionDecryption
à coleção CryptographicKeys do perfil técnico. Defina StorageReferenceId como o nome da chave de política que criou no passo 1. - Defina os metadados do perfil técnico WantEncryptedAssertions como
true
. - Atualize o fornecedor de identidade com os novos metadados de perfil técnico Azure AD B2C. Deverá ver o KeyDescriptor com a propriedade use definida para
encryption
conter a chave pública do certificado.
O exemplo seguinte mostra a secção Descritor de Chaves dos metadados SAML utilizados para encriptação:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Protocolo
O atributo Nome do elemento Protocolo tem de ser definido como SAML2
.
Afirmações de entrada
O elemento InputClaims é utilizado para enviar um NameId no Assunto do Pedido de Autenticação SAML. Para tal, adicione uma afirmação de entrada com um PartnerClaimType definido subject
como, conforme mostrado abaixo.
<InputClaims>
<InputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="subject" />
</InputClaims>
Afirmações de saída
O elemento OutputClaims contém uma lista de afirmações devolvidas pelo fornecedor de identidade SAML na AttributeStatement
secção . Poderá ter de mapear o nome da afirmação definida na política para o nome definido no fornecedor de identidade. Também pode incluir afirmações que não são devolvidas pelo fornecedor de identidade, desde que defina o DefaultValue
atributo.
Afirmação de saída do nome do requerente
Para ler o NameId da asserção SAML no Assunto como uma afirmação normalizada, defina a afirmação PartnerClaimType como o SPNameQualifier
valor do atributo . Se o SPNameQualifier
atributo não for apresentado, defina a afirmação PartnerClaimType para o NameQualifier
valor do atributo .
Asserçã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>
Afirmação de saída:
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />
Se os SPNameQualifier
atributos ou NameQualifier
não forem apresentados na asserção SAML, defina a afirmação PartnerClaimType como assertionSubjectName
. Confirme que NameId é o primeiro valor em XML de asserção. Quando define mais do que uma asserção, Azure AD B2C escolhe o valor do assunto da última asserção.
O exemplo seguinte mostra as afirmações devolvidas por um fornecedor de identidade SAML:
- A afirmação issuerUserId está mapeada para a afirmação assertionSubjectName .
- A afirmação first_name está mapeada para a afirmação givenName .
- A reivindicação last_name está mapeada para a reivindicação do sobrenome .
- A afirmação displayName está mapeada para a afirmação de nome .
- A afirmação de e-mail sem mapeamento de nomes.
O perfil técnico também devolve afirmações que não são devolvidas pelo fornecedor de identidade:
- A afirmação identityProvider que contém o nome do fornecedor de identidade.
- A afirmação authenticationSource com um valor predefinido 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 que são utilizados para modificar as afirmações de saída ou gerar novas.
Metadados
Atributo | Necessário | Descrição |
---|---|---|
PartnerEntity | Yes | URL dos metadados do fornecedor de identidade SAML. Em alternativa, copie os metadados do fornecedor de identidade e incorpore-os no elemento <![CDATA[Your IDP metadata]]> CDATA . A incorporação dos metadados do fornecedor de identidade não é recomendada. O fornecedor de identidade pode alterar as definições ou atualizar o certificado. Se os metadados do fornecedor de identidade tiverem sido alterados, obtenha os novos metadados e atualize a política com o novo. |
WantSignedRequests | No | Indica se o perfil técnico requer a assinatura de todos os pedidos de autenticação de saída. Valores possíveis: true ou false . O valor predefinido é true . Quando o valor está definido como true , a chave criptográfica SamlMessageSigning tem de ser especificada e todos os pedidos de autenticação de saída são assinados. Se o valor estiver definido como false , os parâmetros SigAlg e Signature (cadeia de consulta ou parâmetro post) são omitidos do pedido. Estes metadados também controlam o atributo AuthnRequestsSigned dos metadados, que é o resultado nos metadados do perfil técnico Azure AD B2C que é partilhado com o fornecedor de identidade. Azure AD B2C não assinará o pedido se o valor de WantSignedRequests nos metadados do perfil técnico estiver definido como false e os metadados do fornecedor de identidade WantAuthnRequestsSigned estiverem definidosfalse ou não especificados. |
XmlSignatureAlgorithm | No | O método que Azure AD B2C utiliza para assinar o pedido SAML. Estes metadados controlam o valor do parâmetro SigAlg (cadeia de consulta ou parâmetro post) no pedido SAML. Valores possíveis: Sha256 , Sha384 , Sha512 , ou Sha1 (predefinição). Certifique-se de que configura o algoritmo de assinatura em ambos os lados com o mesmo valor. Utilize apenas o algoritmo suportado pelo certificado. |
WantSignedAssertions | No | Indica se o perfil técnico requer a assinatura de todas as asserções recebidas. Valores possíveis: true ou false . O valor predefinido é true . Se o valor estiver definido como true , todas as asserções enviadas saml:Assertion pelo fornecedor de identidade para Azure AD B2C têm de ser assinadas. Se o valor estiver definido como false , o fornecedor de identidade não deve assinar as asserções, mas mesmo que o faça, Azure AD B2C não validará a assinatura. Estes metadados também controlam o sinalizador de metadados WantAssertionsSigned, que é o resultado nos metadados do perfil técnico Azure AD B2C que é partilhado com o fornecedor de identidade. Se desativar a validação de asserções, também poderá querer desativar a validação da assinatura de resposta (para obter mais informações, consulte ResponsesSigned). |
Respostas Assinadas | No | Valores possíveis: true ou false . O valor predefinido é true . Se o valor estiver definido como false , o fornecedor de identidade não deve assinar a resposta SAML, mas mesmo que o faça, Azure AD B2C não validará a assinatura. Se o valor estiver definido como true , a resposta SAML enviada pelo fornecedor de identidade para Azure AD B2C é assinada e tem de ser validada. Se desativar a validação da resposta SAML, também poderá querer desativar a validação da assinatura de asserção (para obter mais informações, consulte WantSignedAssertions). |
WantEncryptedAssertions | No | Indica se o perfil técnico requer que todas as asserções recebidas sejam encriptadas. Valores possíveis: true ou false . O valor predefinido é false . Se o valor estiver definido como true , as asserções enviadas pelo fornecedor de identidade para Azure AD B2C têm de ser assinadas e a chave criptográfica SamlAssertionDecryption tem de ser especificada. Se o valor estiver definido como true , os metadados do perfil técnico Azure AD B2C incluem a secção de encriptação. O fornecedor de identidade lê os metadados e encripta a asserção de resposta SAML com a chave pública fornecida nos metadados do perfil técnico Azure AD B2C. Se ativar a encriptação de asserções, também poderá ter de desativar a validação da assinatura de resposta (para obter mais informações, consulte ResponsesSigned). |
NameIdPolicyFormat | No | Especifica restrições no identificador de nome a utilizar para representar o assunto pedido. Se for omitido, pode ser utilizado qualquer tipo de identificador suportado pelo fornecedor de identidade do requerente pedido. Por exemplo, urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified .
NameIdPolicyFormat pode ser utilizado com NameIdPolicyAllowCreate. Veja a documentação do seu fornecedor de identidade para obter orientações sobre quais as políticas de ID de nome suportadas. |
NameIdPolicyAllowCreate | No | Ao utilizar NameIdPolicyFormat, também pode especificar a AllowCreate propriedade nameIDPolicy. O valor destes metadados é true ou false para indicar se o fornecedor de identidade tem permissão para criar uma nova conta durante o fluxo de início de sessão. Veja a documentação do seu fornecedor de identidade para obter orientações sobre como fazê-lo. |
AuthenticationRequestExtensions | No | Elementos opcionais de extensão de mensagem de protocolo acordados entre Azure AD B2C e o fornecedor de identidade. A extensão é apresentada no formato XML. Adicione os dados XML dentro do elemento <![CDATA[Your IDP metadata]]> CDATA . Verifique a documentação do seu fornecedor de identidade para ver se o elemento extensions é suportado. |
IncludeAuthnContextClassReferences | No | Especifica uma ou mais referências de URI que identificam classes de contexto de autenticação. Por exemplo, para permitir que um utilizador inicie sessão apenas com nome de utilizador e palavra-passe, defina o valor como urn:oasis:names:tc:SAML:2.0:ac:classes:Password . Para permitir o início de sessão através do nome de utilizador e da palavra-passe numa sessão protegida (SSL/TLS), especifique PasswordProtectedTransport . Veja a documentação do seu fornecedor de identidade para obter orientações sobre os URIs AuthnContextClassRef suportados. Especifique vários URIs como uma lista delimitada por vírgulas. |
IncludeKeyInfo | No | Indica se o pedido de autenticação SAML contém a chave pública do certificado quando o enlace está definido como HTTP-POST . Valores possíveis: true ou false . |
IncludeClaimResolvingInClaimsHandling | No | Para afirmações de entrada e saída, especifica se a resolução de afirmações está incluída no perfil técnico. Valores possíveis: true , ou false (predefinição). Se quiser utilizar uma resolução de afirmações no perfil técnico, defina esta opção como true . |
SingleLogoutEnabled | No | Indica se durante o início de sessão o perfil técnico tenta terminar sessão a partir de fornecedores de identidade federados. Para obter mais informações, veja Azure AD início de sessão B2C. Valores possíveis: true (predefinição) ou false . |
ForceAuthN | No | Transmite o valor ForceAuthN no pedido de autenticação SAML para determinar se o IDP SAML externo será forçado a pedir autenticação ao utilizador. Por predefinição, Azure AD B2C define o valor ForceAuthN como falso no início de sessão inicial. Se a sessão for reposta (por exemplo, com o prompt=login no OIDC), o valor ForceAuthN será definido como true . Definir o item de metadados conforme mostrado abaixo irá forçar o valor de todos os pedidos para o IDP externo. Valores possíveis: true ou false . |
ProviderName | No | Transmite o valor ProviderName no pedido de autenticação SAML. |
Chaves criptográficas
O elemento CryptographicKeys contém os seguintes atributos:
Atributo | Necessário | Descrição |
---|---|---|
SamlMessageSigning | Yes | O certificado X509 (conjunto de chaves RSA) a utilizar para assinar mensagens SAML. Azure AD B2C utiliza esta chave para assinar os pedidos e enviá-los para o fornecedor de identidade. |
SamlAssertionDecryption | Não* | O certificado X509 (conjunto de chaves RSA). Um fornecedor de identidade SAML utiliza a parte pública do certificado para encriptar a asserção da resposta SAML. Azure AD B2C utiliza a parte privada do certificado para desencriptar a asserção. * Necessário se o IDP externo encriptar as asserções SAML. |
MetadataSigning | No | O certificado X509 (conjunto de chaves RSA) a utilizar para assinar metadados SAML. Azure AD B2C utiliza esta chave para assinar os metadados. |
Passos seguintes
Veja os seguintes artigos para obter exemplos de trabalho com fornecedores de identidade SAML no Azure AD B2C: