Provedores de sessão de logon único no Azure Active Directory B2C

No artigo Configurar o comportamento de sessão do Azure Active Directory B2C, descrevemos o gerenciamento de sessão para a política personalizada do Azure AD B2C. Esse artigo descreve como definir configurações adicionais para o comportamento de SSO (logon único) de qualquer perfil técnico individual na sua política personalizada.

Por exemplo, você configura sua política para SSO em todo o locatário, mas deseja sempre executar a etapa de autenticação multifator, independentemente de uma sessão de SSO ativa. Obtenha esse comportamento configurando o provedor de sessão do perfil técnico da autenticação multifator.

Você pode aplicar provedores de sessão a dois fluxos:

  • Novo logon
    • Quando o usuário faz logon pela primeira vez, não há nenhuma sessão. Todos os perfis técnicos que usam um provedor de sessão se tornam participantes da sessão.
    • O provedor de sessão pode gravar declarações no cookie de sessão.
  • Logons posteriores
    • Quando o usuário tem uma sessão ativa, as declarações que fazem parte do cookie de sessão são lidas no recipiente de declarações.
    • As declarações que fazem parte do cookie de sessão não podem ser atualizadas.
    • O provedor de sessão pode emitir declarações extras no recipiente de declarações, indicando que esse perfil técnico foi executado nas condições de SSO.
    • O perfil técnico pode ser ignorado.

Dependendo do provedor de gerenciamento de sessão escolhido para determinado perfil técnico, o comportamento da sessão pode ser ativo ou suprimido. A seguinte lista apresenta alguns dos muitos exemplos possíveis do uso de provedores de sessão:

  • Impedir ou impor interrupções de interface do usuário durante os logons (SSO) posteriores.
  • Lembrar-se do provedor de identidade escolhido durante os logons (SSO) posteriores.
  • Reduzir o número de operações de leitura no diretório durante os logons (SSO) posteriores.
  • Acompanhar as sessões do provedor de identidade social para executar o logoff do provedor de identidade.
  • Acompanhar os aplicativos de terceira parte confiáveis para logoff único.

Provedores de sessão

Há cinco provedores de sessão disponíveis para gerenciar como um perfil técnico lida com a sessão de SSO. Você precisa escolher o provedor de sessão mais apropriado ao configurar seu perfil técnico.

A tabela a seguir mostra o provedor de sessão que deve ser usado, dependendo do tipo de perfil técnico que você deseja gerenciar. Alguns provedores de sessão permitem ler e gravar declarações no cookie de sessão.

Provedor de sessão Tipos de perfil técnico aplicáveis Finalidade Gravar declarações Ler declarações
DefaultSSOSessionProvider Autodeclarado, Microsoft Entra ID, autenticação multifator do Microsoft Entra, transformação declarações Ignora a execução do perfil técnico. Sim Sim
ExternalLoginSSOSessionProvider Provedor de identidade OAuth1, Provedor de identidade OAuth2, Provedor de identidade OpenID Connect, Provedor de identidade SAML Acelera a página de seleção do provedor de identidade. Executando o logoff único. Sim Sim
OAuthSSOSessionProvider Emissor do token JWT Gerencia a sessão entre a terceira parte confiável OAuth2 ou OpenID Connect e o Azure AD B2C. Executa o logoff único. Não Não
SamlSSOSessionProvider Emissor do token SAML Gerencia a sessão entre a terceira parte confiável do SAML e o Azure AD B2C. Executa o logoff único. Não Não
NoopSSOSessionProvider Qualquer Suprime qualquer perfil técnico de fazer parte da sessão. Não Não

O diagrama a seguir mostra os tipos de sessões usados pelo Azure AD B2C.

Diagrama mostrando os tipos de Azure AD B2C de provedores de sessão.

Como referenciar um provedor de sessão

Para usar um provedor de sessão no seu perfil técnico:

  1. Crie um perfil técnico de gerenciamento de sessão conforme apropriado. Observe que o pacote inicial do Azure AD B2C inclui os perfis técnicos de gerenciamento de sessão mais comuns. Você pode referenciar um perfil técnico de gerenciamento de sessão existente, se aplicável.

    O snippet XML a seguir mostra o perfil técnico de gerenciamento de sessão SM-AAD do pacote inicial. O provedor de sessão é o tipo de DefaultSSOSessionProvider.

    <TechnicalProfile Id="SM-AAD">
      <DisplayName>Session Mananagement Provider</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="objectId" />
        <PersistedClaim ClaimTypeReferenceId="signInName" />
        <PersistedClaim ClaimTypeReferenceId="authenticationSource" />
        <PersistedClaim ClaimTypeReferenceId="identityProvider" />
        <PersistedClaim ClaimTypeReferenceId="newUser" />
        <PersistedClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" />
      </PersistedClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true" />
      </OutputClaims>
    </TechnicalProfile>
    
  2. Referencie o perfil técnico de gerenciamento de sessão no seu perfil técnico. Ao fazer isso, você controla o comportamento desse perfil técnico durante os logons (SSO) posteriores.

    Para referenciar um perfil técnico de gerenciamento de sessão no seu perfil técnico, adicione o elemento UseTechnicalProfileForSessionManagement. O exemplo a seguir mostra o uso do perfil técnico de gerenciamento de sessão SM-AAD. Altere o ReferenceId para a ID do seu perfil técnico de gerenciamento de sessão.

    <TechnicalProfile Id="{Technical-profile-ID}">
      ...
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>
    

Importante

Quando um perfil técnico não referencia nenhum provedor de gerenciamento de sessão, o provedor de sessão DefaultSSOSessionProvider é aplicado, o que pode causar um comportamento inesperado.

Observação

Durante um fluxo de token de atualização, os provedores de gerenciamento de sessão não são invocados. Todas as tentativas de emitir um novo token de acesso são uma cópia das declarações originais emitidas.

Gerenciar as declarações de sessão

Os perfis técnicos de gerenciamento de sessão controlam as declarações que podem ser lidas, gravadas ou produzidas durante a execução da política personalizada.

No perfil técnico de gerenciamento de sessão, use os elementos PersistedClaims e OutputClaims para gerenciar as declarações.

  • Declarações persistentes – Declarações que podem ser gravadas no cookie de sessão.
    • Para que uma declaração seja gravada no cookie de sessão, ela precisa fazer parte do recipiente de declarações atual.
    • Todas as declarações que são gravadas são retornadas automaticamente durante os logons (logon único) posteriores. Não é preciso especificar as declarações de saída.
  • Declarações de saída – Declarações extras que podem ser produzidas no recipiente de declarações durante os logons (logon único) posteriores. Como as declarações de saída não são retornadas da sessão, é preciso definir um valor padrão.

Os elementos de declarações persistentes e de saída são demonstrados no seguinte snippet XML:

<TechnicalProfile Id="SM-AAD">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true"/>
  </OutputClaims>
</TechnicalProfile>

Os provedores de gerenciamento de sessão DefaultSSOSessionProvidere ExternalLoginSSOSessionProvider podem ser configurados para gerenciar as declarações, por exemplo, durante:

  • Novo logon
    • O elemento PersistedClaims gravará as declarações no cookie de sessão. As declarações persistentes não podem ser gravadas novamente.
  • Logons posteriores
    • Cada declaração gravada no cookie de sessão será produzida no recipiente de declarações, disponível para ser usada na próxima etapa de orquestração.
    • O elemento OutputClaims produzirá as declarações estáticas no recipiente de declarações. Use o atributo DefaultValue para definir o valor da declaração de saída.

DefaultSSOSessionProvider

O provedor de sessão DefaultSSOSessionProvider pode ser configurado para gerenciar as declarações durante os logons (logon único) posteriores e permitir que os perfis técnicos sejam ignorados. O DefaultSSOSessionProvider deve ser usado para persistir e emitir as declarações necessárias para as etapas de orquestração posteriores que, de outro modo, não serão obtidas durante os logons (logon único) posteriores. Por exemplo, as declarações que podem ser obtidas da leitura do objeto de usuário no diretório.

O perfil técnico SM-AAD a seguir é o tipo de provedor de sessão DefaultSSOSessionProvider. O perfil técnico SM-AAD pode ser encontrado no pacote inicial da política personalizada.

<TechnicalProfile Id="SM-AAD">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
    <PersistedClaim ClaimTypeReferenceId="signInName" />
    <PersistedClaim ClaimTypeReferenceId="authenticationSource" />
    <PersistedClaim ClaimTypeReferenceId="identityProvider" />
    <PersistedClaim ClaimTypeReferenceId="newUser" />
    <PersistedClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true"/>
  </OutputClaims>
</TechnicalProfile>

Por exemplo, o SM-AADperfil técnico de gerenciamento de sessão usa o provedor de sessão DefaultSSOSessionProvider. Ele se comportará da seguinte maneira quando aplicado ao perfil técnico SelfAsserted-LocalAccountSignin-Email por meio do pacote inicial da política personalizada:

  • Novo logon
    • signInName será gravado no cookie de sessão, porque o perfil técnico de gerenciamento de sessão (SM-AAD) está configurado com signInName para ser persistente, e o perfil técnico que referencia o SM-AAD contém um OutputClaim para signInName. Esse comportamento é aplicável a todas as declarações que atendem a esse padrão.
  • Logons posteriores
    • O perfil técnico é ignorado, e o usuário não verá a página de entrada.
    • O recipiente de declarações conterá o valor signInName do cookie de sessão, que foi persistido na entrada nova e qualquer outra declaração que atendeu ao padrão a ser persistido no cookie de sessão.
    • O perfil técnico de gerenciamento de sessão retorna a declaração objectIdFromSession porque as declarações Output do provedor de sessão são processadas durante os logons (logon único) posteriores. Nesse caso, a declaração objectIdFromSession que está presente no recipiente de declarações indica que as declarações do usuário são provenientes do cookie de sessão devido ao logon único.

ExternalLoginSSOSessionProvider

O provedor de sessão ExternalLoginSSOSessionProvider é usado para ignorar a tela "Seleção de provedor de identidade" e sair de um provedor de identidade federada. Normalmente, ele é referenciado em um perfil técnico configurado para um provedor de identidade federada, como o Facebook ou o Microsoft Entra ID.

  • Novo logon
    • O elemento PersistedClaims gravará as declarações no cookie de sessão. As declarações persistentes não podem ser gravadas novamente.
  • Logons posteriores
    • Cada declaração gravada no cookie de sessão será produzida no recipiente de declarações, disponível para ser usada na próxima etapa de orquestração.
    • O elemento OutputClaims produzirá as declarações estáticas no recipiente de declarações. Use o atributo DefaultValue que definiu o valor da declaração.
    • Quando um perfil técnico, que referencia um perfil técnico de gerenciamento de sessão, contiver um OutputClaim, que foi persistido no cookie de sessão, esse perfil técnico será ignorado.

O perfil técnico SM-SocialLogin a seguir é o tipo de provedor de sessão ExternalLoginSSOSessionProvider. O perfil técnico SM-SocialLogin pode ser encontrado no pacote inicial da política personalizada.

<TechnicalProfile Id="SM-SocialLogin">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.ExternalLoginSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="AlternativeSecurityId" />
  </PersistedClaims>
</TechnicalProfile>

A declaração AlternativeSecurityId é gerada quando um usuário se conecta com um provedor de identidade externo. Representando o identificador exclusivo do usuário do provedor de identidade externo. A declaração AlternativeSecurityId é persistida de modo que, em percursos de logon único, o perfil do usuário possa ser lido no diretório sem nenhuma interação com o provedor de identidade federada.

Para configurar o provedor de sessão externo, adicione uma referência ao SM-SocialLogin por meio dos seus perfis técnicos do OAuth1, do OAuth2 ou do OpenID Connect. Por exemplo, o Facebook-OAUTH usa o perfil técnico de gerenciamento de sessão SM-SocialLogin. Para saber mais, confira o pacote inicial da política personalizada.

<TechnicalProfile Id="Facebook-OAUTH">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
</TechnicalProfile>

OAuthSSOSessionProvider

O provedor de sessão OAuthSSOSessionProvider é usado para gerenciar as sessões do Azure AD B2C entre uma terceira parte confiável do OAuth2 ou do OpenID Connect e o Azure AD B2C. O Azure AD B2C dá suporte ao SLO, também conhecido como logoff único. Quando um usuário sair do serviço por meio do ponto de extremidade de saída do Azure AD B2C, Azure AD B2C limpará o cookie de sessão do usuário do navegador. No entanto, o usuário pode ainda entrar em outros aplicativos que usam o Azure AD B2C para autenticação.

Esse tipo de provedor de sessão permite que o Azure AD B2C acompanhe todos os aplicativos OAuth2 ou OpenID Connect em que o usuário está conectado. Durante a saída de um aplicativo, o Azure AD B2C tentará chamar os pontos de extremidade logout de todos os outros aplicativos conectados conhecidos. Essa funcionalidade é integrada ao provedor de sessão. Não há declarações persistentes ou de saída disponíveis para serem configuradas. O perfil técnico SM-jwt-issuer a seguir é o tipo de provedor de sessão OAuthSSOSessionProvider.

<TechnicalProfile Id="SM-jwt-issuer">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.OAuthSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</TechnicalProfile>

O perfil técnico SM-jwt-issuer é referenciado no perfil técnico JwtIssuer:

<TechnicalProfile Id="JwtIssuer">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-jwt-issuer" />
</TechnicalProfile>

SamlSSOSessionProvider

O provedor de sessão SamlSSOSessionProvider é usado para gerenciar o comportamento da sessão com provedores de identidade SAML federada ou aplicativos de terceira parte confiável e o Azure AD B2C.

Gerenciamento de sessão do provedor de identidade SAML

Quando você referencia um provedor de sessão SamlSSOSessionProvider em uma sessão do provedor de identidade SAML, o RegisterServiceProviders precisa ser definido como false.

O seguinte perfil técnico SM-Saml-idp é o tipo de provedor de sessão SamlSSOSessionProvider:

<TechnicalProfile Id="SM-Saml-idp">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="RegisterServiceProviders">false</Item>
  </Metadata>
</TechnicalProfile>

Para usar o perfil técnico de gerenciamento de sessão SM-Saml-idp, adicione uma referência ao perfil técnico do provedor de identidade SAML. Por exemplo, o provedor de identidade SAML do AD FSContoso-SAML2 usa o perfil técnico de gerenciamento de sessão SM-Saml-idp.

<TechnicalProfile Id="Contoso-SAML2">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp" />
</TechnicalProfile>

Gerenciamento de sessão do provedor de serviços SAML

Quando você referencia um provedor de sessão SamlSSOSessionProvider para gerenciar uma sessão de uma terceira parte confiável SAML, o RegisterServiceProviders precisa ser definido como true. O logoff da sessão SAML exige que SessionIndex e NameID sejam concluídos.

O seguinte perfil técnico SM-Saml-issuer é o tipo de provedor de sessão SamlSSOSessionProvider:

<TechnicalProfile Id="SM-Saml-issuer">
  <DisplayName>Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</TechnicalProfile>

Para usar o perfil técnico de gerenciamento de sessão SM-Saml-issuer, adicione uma referência ao perfil técnico do emissor do token SAML. Por exemplo, o perfil técnico Saml2AssertionIssuer usa o perfil técnico de gerenciamento de sessão SM-Saml-issuer.

<TechnicalProfile Id="Saml2AssertionIssuer">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-issuer" />
</TechnicalProfile>

Metadados

Atributo Obrigatório Descrição
IncludeSessionIndex Não Não usado no momento, pode ser ignorado.
RegisterServiceProviders Não Indica que o provedor deve registrar todos os provedores de serviço SAML que emitiram uma declaração. Valores possíveis: true (padrão) ou false.

NoopSSOSessionProvider

O provedor de sessão NoopSSOSessionProvider é usado para suprimir o comportamento de logon único. Os perfis técnicos que usam esse tipo de provedor de sessão sempre serão processados, mesmo quando o usuário tiver uma sessão ativa. Esse tipo de provedor de sessão pode ser útil para forçar perfis técnicos específicos a serem sempre executados, por exemplo:

  • Transformação de declarações – Para criar ou transformar declarações que serão usadas posteriormente para determinar as etapas de orquestração a serem processadas ou ignoradas.
  • RESTful – Busque dados atualizados de um serviço RESTful sempre que a política for executada. Você também pode chamar um RESTful para log estendido e auditoria.
  • Autodeclarado – Force o usuário a fornecer dados sempre que a política for executada. Por exemplo, confirme os emails com a senha de uso único ou peça o consentimento do usuário.
  • Phonefactor – Force o usuário a executar a autenticação multifator como parte de uma "autenticação de step-up", mesmo durante os logons (logon único) posteriores.

Esse tipo de provedor de sessão não persiste as declarações no cookie de sessão do usuário. O perfil técnico SM-Noop a seguir é o tipo de provedor de sessão NoopSSOSessionProvider. O perfil técnico SM-Noop pode ser encontrado no pacote inicial da política personalizada.

<TechnicalProfile Id="SM-Noop">
  <DisplayName>Noop Session Management Provider</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.NoopSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</TechnicalProfile>

Para suprimir o comportamento de logon único de um perfil técnico, adicione uma referência ao perfil técnico SM-Noop. Por exemplo, o AAD-Common usa o perfil técnico de gerenciamento de sessão SM-Noop. Para saber mais, confira o pacote inicial da política personalizada.

<TechnicalProfile Id="AAD-Common">
  ...
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

Próximas etapas

Saiba como configurar o comportamento de sessão.