Definir um perfil técnico do provedor de identidade SAML em uma política personalizada do Azure Ative Directory B2C
Nota
No Azure Ative Directory B2C, as políticas personalizadas são projetadas principalmente para lidar com cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuário internos. Se você não tiver feito isso, saiba mais sobre o pacote inicial de políticas personalizadas em Introdução às políticas personalizadas no Ative Directory B2C.
O Azure Ative Directory B2C (Azure AD B2C) fornece suporte para o provedor de identidade SAML 2.0. Este artigo descreve as especificidades de um perfil técnico para interagir com um provedor de declarações que oferece suporte a esse protocolo padronizado. Com um perfil técnico SAML, você pode federar com um provedor de identidade baseado em SAML, como ADFS e Salesforce. Essa federação permite que seus usuários entrem com suas identidades sociais ou corporativas existentes.
Intercâmbio de metadados
Metadados são informações usadas no protocolo SAML para expor a configuração de uma parte SAML, como um provedor de serviços ou provedor de identidade. Os 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 se federa com um provedor de identidade SAML, ele age como um 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 inteiros de uma parte e os define na 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 em seu provedor de identidade e define os metadados do provedor de identidade no Azure AD B2C.
Cada provedor de identidade SAML tem etapas diferentes 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. Consulte a documentação do seu provedor de identidade para obter orientação sobre como fazer isso.
O exemplo a seguir mostra um endereço de URL para os metadados 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:
- seu-nome-do-locatário com o nome do locatário, como fabrikam.b2clogin.com.
- A sua política com o nome da sua apólice. Use a política na qual você configura o perfil técnico do provedor SAML ou uma política herdada dessa política.
- seu perfil técnico com o nome do perfil técnico do provedor de identidade SAML.
Troca de certificados de assinatura digital
Para criar uma relação de confiança entre o Azure AD B2C e seu provedor de identidade SAML, você precisa fornecer um certificado X509 válido com a chave privada. Carregue o certificado com a chave privada (ficheiro .pfx) para o armazenamento de chaves de política do Azure AD B2C. O Azure AD B2C assina digitalmente a solicitação de entrada SAML usando o certificado fornecido.
O certificado é utilizado das seguintes formas:
- 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 pode ser acessado por meio de metadados de perfil técnico. Como alternativa, você pode carregar manualmente o 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 etapas diferentes para configuração, consulte a documentação do 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 os 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 que não seja de produção, você pode desabilitar a assinatura SAML em ambos os lados.
O diagrama a seguir mostra os metadados e a troca de certificados:
Encriptação 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 asserção de resposta SAML:
- Carregue um certificado X509 válido com a chave privada (arquivo .pfx) no repositório de chaves de política do Azure AD B2C.
- Adicione um elemento CryptographicKey com um identificador de
SamlAssertionDecryption
à coleção CryptographicKeys do perfil técnico. Defina o StorageReferenceId como o nome da chave de política criada na etapa 1. - Defina os metadados do perfil técnico WantsEncryptedAssertions como
true
. - Atualize o provedor de identidade com os novos metadados de perfil técnico do Azure AD B2C. Você deve ver o KeyDescriptor com a propriedade use definida como
encryption
contendo a chave pública do seu 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 dentro do Subject da solicitação SAML AuthN. Para conseguir isso, adicione uma declaração de entrada com um PartnerClaimType definido como subject
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 AttributeStatement
seção . 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 DefaultValue
atributo.
Declaração de saída do nome do assunto
Para ler a asserção SAML NameId no Assunto como uma declaração normalizada, defina a declaração PartnerClaimType como o SPNameQualifier
valor do atributo. Se o SPNameQualifier
atributo não for apresentado, defina a declaração PartnerClaimType como o NameQualifier
valor do atributo.
Afirmaçã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>
Reivindicação de saída:
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />
Se ambos ou SPNameQualifier
NameQualifier
atributos não forem apresentados na asserção SAML, defina a declaração PartnerClaimType como assertionSubjectName
. Verifique se NameId é o primeiro valor no XML de asserção. Quando você define mais de uma asserção, o Azure AD B2C seleciona o valor do assunto da última asserção.
O exemplo a seguir mostra as declarações retornadas por um provedor de identidade SAML:
- A declaração issuerUserId é mapeada para a declaração assertionSubjectName .
- A declaração first_name é mapeada para a declaração givenName .
- A reivindicação last_name é mapeada para a reivindicação de sobrenome .
- A declaração displayName é mapeada para a declaração de nome .
- A declaração de e-mail 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 que são usados para modificar as declarações de saída ou gerar novas.
Metadados
Atributo | Necessário | Description |
---|---|---|
EntidadeParceira | Sim | URL dos metadados do provedor de identidade SAML. Ou copie os metadados do provedor de identidade e incorpore-os dentro do elemento <![CDATA[Your IDP metadata]]> CDATA . A incorporação dos metadados do provedor de identidade não é recomendada. 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 predefinido é true . Quando o valor é definido como true , a chave criptográfica SamlMessageSigning precisa ser especificada e todas as solicitações de autenticação de saída são assinadas. Se o valor for definido como false , os parâmetros SigAlg e Signature (string de consulta ou parâmetro post) serão omitidos da solicitação. Esses metadados também controlam o atributo AuthnRequestsSigned de metadados, que é a saída nos metadados do perfil técnico do Azure AD B2C compartilhado com o provedor de identidade. O Azure AD B2C não assina a solicitação se o valor de WantsSignedRequests nos metadados do perfil técnico estiver definido como false e os metadados do provedor de identidade WantAuthnRequestsSigned estiverem definidos como false ou não especificados. |
XmlSignatureAlgorithm | Não | O método que o Azure AD B2C usa para assinar a solicitação SAML. Esses metadados controlam o valor do parâmetro SigAlg (seqüência de caracteres de consulta ou parâmetro post) 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. Utilize apenas o algoritmo suportado pelo certificado. |
WantsSignedAssertions | Não | Indica se o perfil técnico requer que todas as asserções recebidas sejam assinadas. Valores possíveis: true ou false . O valor predefinido é true . Se o valor for definido como true , todas as asserções enviadas saml:Assertion pelo provedor de identidade para o Azure AD B2C deverão ser assinadas. Se o valor estiver definido como false , o provedor de identidade não deverá assinar as asserções, mas, mesmo que o faça, o Azure AD B2C não validará a assinatura. Esses metadados também controlam o sinalizador de metadados WantsAssertionsSigned, que é a saída nos metadados do perfil técnico do Azure AD B2C compartilhado com o provedor de identidade. Se você desabilitar a validação de asserções, também poderá desabilitar a validação da assinatura de resposta (para obter mais informações, consulte ResponsesSigned). |
RespostasAssinadas | Não | Valores possíveis: true ou false . O valor predefinido é true . Se o valor estiver definido como false , o provedor de identidade não deverá assinar a resposta SAML, mas, mesmo que o faça, 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 de resposta SAML, também poderá desabilitar a validação de assinatura de asserção (para obter mais informações, consulte WantsSignedAssertions). |
WantsEncryptedAssertions | Não | Indica se o perfil técnico requer que todas as asserções recebidas sejam criptografadas. Valores possíveis: true ou false . O valor predefinido é false . Se o valor for definido como true , as asserções enviadas pelo provedor de identidade para o Azure AD B2C deverão ser assinadas e a chave criptográfica SamlAssertionDecryption precisará 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 fornecida nos metadados do perfil técnico do Azure AD B2C. Se você habilitar a criptografia de asserções, talvez também seja necessário desabilitar a validação da assinatura de resposta (para obter mais informações, consulte ResponsesSigned). |
NameIdPolicyFormat | Não | Especifica restrições no identificador de nome a ser usado para representar o assunto solicitado. Se omitido, qualquer tipo de identificador suportado 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. Consulte a documentação do seu provedor de identidade para obter orientação sobre quais políticas de ID de nome são suportadas. |
NameIdPolicyAllowCreate | Não | Ao usar NameIdPolicyFormat, você também pode especificar a AllowCreate propriedade de NameIDPolicy. O valor desses metadados é true ou false para indicar se o provedor de identidade tem permissão para criar uma nova conta durante o fluxo de entrada. Consulte a documentação do seu provedor de identidade para obter orientação sobre como fazer isso. |
AuthenticationRequestExtensions | Não | Elementos opcionais de extensão de mensagem de protocolo acordados entre o Azure AD B2C e o provedor de identidade. A extensão é apresentada em formato XML. Você adiciona os dados XML dentro do elemento <![CDATA[Your IDP metadata]]> CDATA . Verifique a documentação do seu provedor de identidade para ver se o elemento extensions é suportado. |
IncludeAuthnContextClassReferences | Não | Especifica uma ou mais referências de URI que identificam classes de contexto de autenticação. Por exemplo, para permitir que um usuário entre somente com nome de usuário e senha, defina o valor como urn:oasis:names:tc:SAML:2.0:ac:classes:Password . Para permitir o início de sessão através de nome de utilizador e palavra-passe numa sessão protegida (SSL/TLS), especifique PasswordProtectedTransport . Consulte a documentação do seu provedor de identidade para obter orientação sobre os URIs AuthnContextClassRef suportados. Especifique vários URIs como uma lista delimitada por vírgula. |
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 | Para 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 você quiser usar um resolvedor de declarações no perfil técnico, defina isso 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 de sessão do Azure AD B2C. Valores possíveis: true (padrão) ou false . |
ForceAuthN | Não | Passa o valor ForceAuthN na solicitação de autenticação SAML para determinar se o IDP SAML externo será forçado a solicitar autenticação ao usuário. Por padrão, o Azure AD B2C define o valor ForceAuthN como false no logon inicial. Se a sessão for redefinida (por exemplo, usando o prompt=login in OIDC), o valor ForceAuthN será definido como true . Definir o item de metadados como mostrado abaixo forçará o valor de todas as solicitações para o 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 | Necessário | Description |
---|---|---|
SamlMessageSigning | Sim | O certificado X509 (conjunto de chaves RSA) a ser usado para assinar mensagens SAML. O Azure AD B2C usa essa chave para assinar as solicitações e enviá-las ao provedor de identidade. |
SamlAssertionDecryption | Não* | O certificado X509 (conjunto de chaves RSA). Um provedor de identidade SAML usa a parte pública do certificado para criptografar a declaração da resposta SAML. O Azure AD B2C usa a parte privada do certificado para descriptografar a declaração. * Necessário se o IDP externo criptografar asserções SAML. |
MetadataSigning | Não | O certificado X509 (conjunto de chaves RSA) a ser usado para assinar metadados SAML. O Azure AD B2C usa essa chave para assinar os metadados. |
Próximos passos
Consulte os seguintes artigos para obter exemplos de como trabalhar com provedores de identidade SAML no Azure AD B2C: