Configurar o comportamento da sessão no Azure Active Directory B2C

Antes de começar _, use o seletor _ Escolher um tipo de política para escolher o tipo de política que você está configurando. O Azure Active Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos dos usuários predefinidos ou de políticas personalizadas totalmente configuráveis. As etapas necessárias neste artigo são diferentes para cada método.

O logon único (SSO) adiciona segurança e conveniência quando os usuários se conectam a aplicativos no Azure Active Directory B2C (Azure AD B2C). Este artigo descreve os métodos de logon único utilizados no Azure AD B2C e ajuda você a escolher o método de SSO mais adequado ao configurar a sua política.

Com o logon único, os usuários entram uma vez com uma única conta e obtêm acesso a vários aplicativos. O aplicativo pode ser um aplicativo web, móvel ou de página única, independentemente da plataforma ou do nome de domínio.

Quando o usuário entra inicialmente em um aplicativo, o Azure AD B2C insiste em uma sessão baseada em cookies. Após as solicitações de autenticação subsequentes, o Azure AD B2C lê e valida a sessão baseada em cookies e emite um token de acesso sem solicitar que o usuário entre novamente. Se a sessão baseada em cookies expirar ou se tornar inválida, o usuário será solicitado a entrar novamente.

Pré-requisitos

Visão geral da sessão do Azure AD B2C

A integração com o Azure AD B2C envolve três tipos de sessões de SSO:

  • Azure AD B2C - sessão gerenciada pelo Azure AD B2C
  • Provedor de identidade federada - sessão gerenciada pelo provedor de identidade, por exemplo, Facebook, Salesforce ou conta Microsoft
  • Aplicativo - sessão gerenciada pelo aplicativo Web, móvel ou de página única

Sessão de SSO

Configuração do Azure AD B2C

Quando um usuário é autenticado com êxito com uma conta local ou social, o Azure AD B2C armazena uma sessão baseada em cookies no navegador do usuário. O cookie é armazenado sob o nome de domínio do locatário Azure AD B2C, como https://contoso.b2clogin.com.

Se um usuário entrar inicialmente com uma conta federada e, durante a janela de tempo da sessão (vida útil ou TTL) entrar no mesmo aplicativo ou em um aplicativo diferente, o Azure AD B2C tentará adquirir um novo token de acesso do provedor de identidade federada. Se a sessão do provedor de identidade federada tiver expirado ou for inválida, o provedor de identidade federada solicitará ao usuário suas credenciais. Se a sessão ainda estiver ativa (ou se o usuário tiver entrado com uma conta local em vez de uma conta federada), o Azure AD B2C autoriza o usuário e elimina as solicitações adicionais.

Você pode configurar o comportamento da sessão, incluindo o TTL da sessão e como o Azure AD B2C compartilha a sessão entre políticas e aplicativos.

Sessão do provedor de identidade federado

Um provedor de identidade social ou empresarial gerencia sua própria sessão. O cookie é armazenado sob o nome de domínio do provedor de identidade, como https://login.salesforce.com. O Azure AD B2C não controla a sessão do provedor de identidade federada. Em vez disso, o comportamento da sessão é determinado pelo provedor de identidade federada.

Considere o cenário a seguir.

  1. Um usuário entra no Facebook para verificar o feed.
  2. Posteriormente, o usuário abre seu aplicativo e inicia o processo de entrada. O aplicativo redireciona o usuário para o Azure AD B2C para concluir o processo de entrada.
  3. Na página de inscrição ou entrada do Azure AD B2C, o usuário opta por entrar com sua conta do Facebook. O usuário é redirecionado para o Facebook. Se houver uma sessão ativa no Facebook, o usuário não receberá uma solicitação para fornecer suas credenciais e será redirecionado imediatamente para o Azure AD B2C com um token do Facebook.

Sessão do aplicativo

Um aplicativo web, móvel ou de página única pode ser protegido por acesso OAuth, tokens de ID ou tokens SAML. Quando um usuário tenta acessar um recurso protegido no aplicativo, o aplicativo verifica se há uma sessão ativa no lado do aplicativo. Se não houver nenhuma sessão de aplicativo ou a sessão tiver expirado, o aplicativo levará o usuário ao Azure AD B2C para a página de entrada.

A sessão de aplicativo pode ser uma sessão baseada em cookies armazenada sob o nome de domínio do aplicativo, como https://contoso.com. Os aplicativos móveis podem armazenar a sessão de forma diferente, mas usando uma abordagem semelhante.

Configurar o comportamento da sessão do Azure AD B2C

Você pode configurar o comportamento de sessão do Azure AD B2C, incluindo:

  • A duração da sessão do aplicativo Web (minutos) - o tempo em que o cookie de sessão do Azure AD B2C fica armazenado no navegador do usuário após a autenticação bem-sucedida. Você pode definir o tempo de vida da sessão para até 24 horas.

  • Tempo limite da sessão do aplicativo web - indica como uma sessão é estendida pela configuração de tempo de vida da sessão ou pela configuração manter-me conectado (KMSI).

    • Sem interrupção - indica que a sessão é estendida toda vez que o usuário executa uma autenticação baseada em cookie (padrão).
    • Absoluta – indica que o usuário é forçado a autenticar novamente após o período de tempo especificado.
  • Configuração de logon único – a sessão de Azure AD B2C pode ser configurada com os seguintes escopos:

    • Locatário -essa configuração é o padrão. O uso dessa configuração permite a vários aplicativos e fluxos de usuário em seu locatário B2C compartilhar a mesma sessão de usuário. Por exemplo, depois que um usuário fizer login em um aplicativo, o usuário também poderá fazer login em outro ao acessá-lo.
    • Aplicação - Esta configuração permite que você mantenha uma sessão de usuário exclusivamente para um aplicativo, independente de outros aplicativos. Por exemplo, você pode usar essa configuração se quiser que o usuário entre no Contoso Pharmacy, independente do usuário já estar conectado ao Contoso Groceries.
    • Política - Essa configuração permite que você mantenha uma sessão de usuário exclusivamente para um fluxo de usuário, independentemente dos aplicativos que a usam. Por exemplo, se o usuário já tiver feito login e concluído uma etapa de autenticação de vários fatores (MFA), o usuário poderá ter acesso a partes de maior segurança de vários aplicativos, desde que a sessão vinculada ao fluxo de usuário não expire.
    • Desabilitado – essa configuração força o usuário a percorrer o fluxo do usuário inteiro em cada execução da política.
  • Manter-me conectado (KMSI) – estende o tempo de vida da sessão através do uso de um cookie persistente. Se esse recurso estiver habilitado e o usuário selecioná-lo, a sessão permanecerá ativa mesmo depois que o usuário fechar e reabrir o navegador. A sessão será revogada somente quando o usuário sair. O recurso KMSI só se aplica à entrada com contas locais. O recurso KMSI tem precedência sobre o tempo de vida da sessão.

Para configurar o comportamento da sessão:

  1. Entre no portal do Azure.
  2. Verifique se você está usando o diretório que contém seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.
  3. Na página Configurações do portal | Diretórios + assinaturas, encontre o diretório Azure Active Directory B2C na lista Nome do diretório e, em seguida, selecione Alternar.
  4. Escolha Todos os serviços no canto superior esquerdo do Portal do Azure, pesquise Azure AD B2C e selecione-o.
  5. Escolha Fluxos de usuário.
  6. Abra o fluxo de usuários criado anteriormente.
  7. Selecione Propriedades.
  8. Configure o tempo de vida da sessão do aplicativo web (minutos) , o tempo limite da sessão do aplicativo web, a configuração de logon único e exigir o token de ID em solicitações de logout, conforme necessário.
  9. Clique em Salvar.

Para alterar o comportamento da sessão e as configurações de SSO, você adiciona um elemento UserJourneyBehaviors dentro do elemento RelyingParty. O elemento UserJourneyBehaviors deve vir logo após o DefaultUserJourney. O seu elemento UserJourneyBehavors deve ficar parecido com este exemplo:

<UserJourneyBehaviors>
   <SingleSignOn Scope="Application" />
   <SessionExpiryType>Absolute</SessionExpiryType>
   <SessionExpiryInSeconds>86400</SessionExpiryInSeconds>
</UserJourneyBehaviors>

Habilitar manter-me conectado (KMSI)

Você pode habilitar o recurso KMSI para os usuários de seus aplicativos web e nativos que têm contas locais em seu diretório de Azure AD B2C. Quando você habilita o recurso, os usuários podem optar por permanecerem conectados para que a sessão permaneça ativa após fechar o navegador. A sessão é mantida configurando um cookie persistente. Os usuários que escolhem KMSI podem reabrir o navegador sem precisarem inserir novamente seu nome de usuário e senha. Esse acesso (cookie persistente) é revogado quando o usuário sai do serviço.

Exemplo de página de entrada/de inscrição mostrando uma caixa de seleção Manter-me conectado

A KMSI é configurável no nível de fluxo de usuário individual. Antes de habilitar a KMSI para seus fluxos de usuário, considere o seguinte:

  • A KMSI é suportada apenas as versões recomendadas de entrada e inscrição (SUSI), entrada e fluxos de usuário de edição de perfil. Se, no momento, você tiver versões Padrão (Herdadas) ou Herdadas de visualização v2 desses fluxos de usuário e quiser habilitar a KMSI, precisará criar novas versões recomendadas desses fluxos de usuário.
  • Não há suporte para KMSI com fluxos de usuário de inscrição ou redefinição de senha.
  • Se você quiser habilitar a KMSI para todos os aplicativos em seu locatário, recomendamos que você habilite a KMSI para todos os fluxos de usuário em seu locatário. Como um usuário pode ser apresentado a várias políticas durante uma sessão, é possível que eles encontrem um que não tenha a KMSI habilitada, o que removeria o cookie KMSI da sessão.
  • A KMSI não deve ser habilitada em computadores públicos.

Configurar a KMSI para um fluxo de usuário

Para habilitar a KMSI para o seu fluxo de usuário:

  1. Entre no portal do Azure.

  2. Verifique se você está usando o diretório que contém seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.

  3. Na página Configurações do portal | Diretórios + assinaturas, encontre o diretório Azure Active Directory B2C na lista Nome do diretório e, em seguida, selecione Alternar.

  4. Escolha  Todos os serviços  no canto superior esquerdo do Portal do Azure, pesquise  Azure AD B2C e selecione-o.

  5. Selecione  Fluxos dos usuários (políticas) .

  6. Abra o fluxo de usuários criado anteriormente.

  7. Selecione  Propriedades.

  8. Em  Comportamento da sessão, selecione Habilitar manter-me conectado na sessão. Ao lado de Manter-me conectado na sessão (dias) , insira um valor de 1 a 90 para especificar o número de dias que uma sessão pode permanecer aberta.

    Habilitar manter-me conectado na sessão

Os usuários não devem habilitar essa opção em computadores públicos.

Configurar o identificador de página

Para habilitar a KMSI, defina o elemento de definição de conteúdo DataUri para o identificador da páginaunifiedssp e a versão da página 1.1.0 ou superior.

  1. Abra o arquivo de extensão da sua política. Por exemplo, SocialAndLocalAccounts/TrustFrameworkExtensions.xml. Esse arquivo de extensão é um dos arquivos de política incluídos no pacote de início de política personalizada, que você deve ter obtido no pré-requisito, Introdução às políticas personalizadas.

  2. Pesquise o elemento BuildingBlocks. Se o elemento não existir, adicione-o.

  3. Adicione o elemento ContentDefinitions ao elemento BuildingBlocks da política.

    Sua política personalizada deverá ter o seguinte snippet de código:

    <BuildingBlocks>
      <ContentDefinitions>
        <ContentDefinition Id="api.signuporsignin">
          <DataUri>urn:com:microsoft:aad:b2c:elements:unifiedssp:1.1.0</DataUri>
        </ContentDefinition>
      </ContentDefinitions>
    </BuildingBlocks>
    

Adicionar os metadados ao perfil técnico autodeclarado

Para adicionar a caixa de seleção KMSI à página de inscrição e entrada, defina os setting.enableRememberMe metadados como true. Substitua os perfis técnicos de SelfAsserted-LocalAccountSignin-Email no arquivo de extensão.

  1. Localize o elemento ClaimsProviders. Se o elemento não existir, adicione-o.
  2. Adicione os seguintes provedores de declarações ao elemento ClaimsProviders:
<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
      <Metadata>
        <Item Key="setting.enableRememberMe">True</Item>
      </Metadata>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>
  1. Salve o arquivo de extensões.

Criar um arquivo de terceira parte confiável

Atualize o arquivo de RP (terceira parte confiável) que iniciará o percurso do usuário que você criou. O parâmetro keepAliveInDays permite que você configure o quanto o cookie de sessão Manter-me conectado (KMSI) deve persistir. Por exemplo, se você definir o valor como 30, o cookie de sessão KMSI persistirá por 30 dias. O intervalo para o valor é de 1 a 90 dias. A definição do valor como 0 desliga a funcionalidade KMSI.

  1. Abra o arquivo de política personalizada. Por exemplo, SignUpOrSignin.xml.

  2. Se ele ainda não existir, adicione um nó filho <UserJourneyBehaviors> ao nó <RelyingParty>. Ele deve estar localizado imediatamente após <DefaultUserJourney ReferenceId="User journey Id" />, por exemplo: <DefaultUserJourney ReferenceId="SignUpOrSignIn" />.

  3. Adicione o seguinte nó como um filho do elemento <UserJourneyBehaviors>.

    <UserJourneyBehaviors>
      <SingleSignOn Scope="Tenant" KeepAliveInDays="30" />
      <SessionExpiryType>Absolute</SessionExpiryType>
      <SessionExpiryInSeconds>1200</SessionExpiryInSeconds>
    </UserJourneyBehaviors>
    

É recomendável que você defina o valor de SessionExpiryInSeconds para um período curto (1200 segundos), enquanto o valor de KeepAliveInDays pode ser definido como um período relativamente longo (30 dias), conforme mostrado no exemplo a seguir:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <UserJourneyBehaviors>
    <SingleSignOn Scope="Tenant" KeepAliveInDays="30" />
    <SessionExpiryType>Absolute</SessionExpiryType>
    <SessionExpiryInSeconds>1200</SessionExpiryInSeconds>
  </UserJourneyBehaviors>
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
      <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>

Sair

Quando você quiser conectar o usuário do aplicativo, não basta limpar os cookies do aplicativo ou encerrar a sessão do usuário. Você deve redirecionar o usuário para o Azure AD B2C para sair. Caso contrário, o usuário poderá se autenticar novamente em seus aplicativos sem inserir suas credenciais novamente.

Após uma solicitação de saída, o Azure AD B2C:

  1. Invalida a sessão baseada em cookies do Azure AD B2C.
  2. Tenta sair de provedores de identidade federada
  1. Invalida a sessão baseada em cookies do Azure AD B2C.
  2. Tenta sair de provedores de identidade federada:
    • OpenId Connect – se o ponto de extremidade de configuração bem conhecido do provedor de identidade especificar um end_session_endpoint local. A solicitação de saída não passa o id_token_hint parâmetro. Se o provedor de identidade federada exigir esse parâmetro, a solicitação de saída falhará.
    • OAuth2 – se os metadados do provedor de identidade contiverem o end_session_endpoint local.
    • SAML - se os metadados do provedor de identidade contiverem o SingleLogoutService local.
  3. De forma opcional, desconecta-se dos outros aplicativos. Para obter mais informações, consulte a seção de saída única.

Observação

Você pode desabilitar a saída de provedores de identidade federada, definindo os metadados do perfil técnico do provedor de identidade SingleLogoutEnabled como false.

A saída limpa o estado de logon único no Azure AD B2C, mas talvez não execute a saída do usuário de sua sessão do provedor de identidade social. Se o usuário selecionar o mesmo provedor de identidade durante uma conexão subsequente, o usuário poderá ser autenticado novamente, sem entrar em suas credenciais. Se um usuário desejar sair do seu aplicativo, isso não significa, necessariamente, que ele deseja se desconectar de sua conta do Facebook. No entanto, se forem usadas contas locais, a sessão do usuário será encerrada corretamente.

Logout único

Quando você redireciona o usuário para o ponto de extremidade de saída do Azure AD B2C (para os protocolos OAuth2 e SAML), o Azure AD B2C limpa a 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. Para permitir que esses aplicativos desconectem o usuário simultaneamente, o Azure AD B2C envia uma solicitação HTTP GET para o registroLogoutUrl de todos os aplicativos aos quais o usuário está atualmente conectado.

Os aplicativos devem responder a essa solicitação, limpando as sessões que identificam o usuário e retornando uma resposta 200. Caso você queira dar suporte a um logout único em seu aplicativo, deve implementar um LogoutUrl no código do aplicativo.

Para dar suporte ao logout único, os perfis técnicos do emissor do token para JWT e SAML devem especificar:

  • O nome do protocolo, como <Protocol Name="OpenIdConnect" />
  • A referência ao perfil técnico da sessão, como UseTechnicalProfileForSessionManagement ReferenceId="SM-OAuth-issuer" />.

O exemplo a seguir mostra os emissores JWT e token SAML com logout único:

<ClaimsProvider>
  <DisplayName>Local Account SignIn</DisplayName>
  <TechnicalProfiles>
    <!-- JWT Token Issuer -->
    <TechnicalProfile Id="JwtIssuer">
      <DisplayName>JWT token Issuer</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputTokenFormat>JWT</OutputTokenFormat>
      ...    
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-OAuth-issuer" />
    </TechnicalProfile>

    <!-- Session management technical profile for OIDC based tokens -->
    <TechnicalProfile Id="SM-OAuth-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>

    <!--SAML token issuer-->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>SAML token issuer</DisplayName>
      <Protocol Name="SAML2" />
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      ...
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-issuer" />
    </TechnicalProfile>

    <!-- Session management technical profile for SAML based tokens -->
    <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>
  </TechnicalProfiles>
</ClaimsProvider>

Proteger seu redirecionamento de logout

Após o logout, o usuário é redirecionado para o URI especificado no post_logout_redirect_uri parâmetro, independentemente das URLs de resposta que foram especificadas para o aplicativo. No entanto, se um valor válido id_token_hint for passado e o token de ID necessário em solicitações de logout estiver ativado, o Azure AD B2C verificará se o valor de post_logout_redirect_uri corresponde a um dos URIs de redirecionamento configurados do aplicativo antes de executar o redirecionamento. Se nenhuma URL de resposta correspondente tiver sido configurada para o aplicativo, uma mensagem de erro será exibida e o usuário não será redirecionado.

Para exigir um token de ID em solicitações de logout:

  1. Entre no portal do Azure.
  2. Verifique se você está usando o diretório que contém seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.
  3. Na página Configurações do portal | Diretórios + assinaturas, encontre o diretório Azure Active Directory B2C na lista Nome do diretório e, em seguida, selecione Alternar.
  4. Escolha Todos os serviços no canto superior esquerdo do Portal do Azure, pesquise Azure AD B2C e selecione-o.
  5. Escolha Fluxos de usuário.
  6. Abra o fluxo de usuários criado anteriormente.
  7. Selecione Propriedades.
  8. Habilitar a exigência de token de ID em solicitações de logout.
  9. Volte para o Azure AD B2C.
  10. Selecione Registros de aplicativo e, em seguida, selecione o seu aplicativo.
  11. Selecione Autenticação.
  12. Na caixa de texto URL de logout, digite o URI de redirecionamento de logout de postagem e, em seguida, selecione Salvar.

Para exigir um token de ID em solicitações de logout, adicione um elemento UserJourneyBehaviors dentro do elemento RelyingParty. Em seguida, defina EnforceIdTokenHintOnLogout do elemento SingleSignOn como true. O seu elemento UserJourneyBehavors deve ficar parecido com este exemplo:

<UserJourneyBehaviors>
  <SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true"/>
</UserJourneyBehaviors>

Para configurar a URL de logout do aplicativo:

  1. Entre no portal do Azure.
  2. Verifique se você está usando o diretório que contém seu locatário do Azure AD B2C. Selecione o ícone Diretórios + assinaturas na barra de ferramentas do portal.
  3. Na página Configurações do portal | Diretórios + assinaturas, encontre o diretório Azure Active Directory B2C na lista Nome do diretório e, em seguida, selecione Alternar.
  4. Escolha Todos os serviços no canto superior esquerdo do Portal do Azure, pesquise Azure AD B2C e selecione-o.
  5. Selecione Registros de aplicativo e, em seguida, selecione o seu aplicativo.
  6. Selecione Autenticação.
  7. Na caixa de texto URL de logout, digite o URI de redirecionamento de logout de postagem e, em seguida, selecione Salvar.

Próximas etapas