Proveedores de sesiones de inicio de sesión único en Azure Active Directory B2C

En el artículo Configuración del comportamiento de la sesión en Azure Active Directory B2C, se describe la administración de sesiones para una directiva personalizada de Azure AD B2C. En este artículo se describe la configuración adicional del comportamiento del inicio de sesión único (SSO) de cualquier perfil técnico individual dentro de una directiva personalizada.

Por ejemplo, supongamos que configura la directiva para el inicio de sesión único en todo el inquilino, pero le gustaría realizar siempre el paso multifactor independientemente de que haya una sesión de SSO activa. Para lograr este comportamiento, puede configurar el proveedor de sesiones del perfil técnico multifactor.

Puede aplicar los proveedores de sesiones a dos flujos:

  • Inicio de sesión nuevo
    • Cuando el usuario inicia sesión por primera vez, no hay ninguna sesión. Los perfiles técnicos que usan un proveedor de sesiones se convierten en participantes de la sesión.
    • El proveedor de sesiones puede escribir notificaciones en la cookie de sesión.
  • Inicios de sesión posteriores
    • Cuando el usuario tiene una sesión activa, las notificaciones que forman parte de la cookie de sesión se leen en la cesta de notificaciones.
    • Las notificaciones que forman parte de la cookie de sesión no se pueden actualizar.
    • El proveedor de sesiones puede emitir notificaciones adicionales en la cesta de notificaciones, lo que indica que este perfil técnico se ejecutó en condiciones de SSO.
    • El perfil técnico se puede omitir.

En función del proveedor de administración de sesiones elegido para un perfil técnico determinado, el comportamiento de la sesión puede estar activo o suprimido. En la lista siguiente se presentan algunos de los muchos ejemplos posibles mediante proveedores de sesiones:

  • Impida o exija las interrupciones de la interfaz de usuario durante los inicios de sesión (SSO) posteriores.
  • Recuerde el proveedor de identidades elegido durante los inicios de sesión (SSO) posteriores.
  • Reduzca el número de operaciones de lectura en el directorio durante los inicios de sesión (SSO) posteriores.
  • Haga un seguimiento de las sesiones del proveedor de identidades sociales para realizar el cierre de sesión del proveedor de identidades.
  • Haga un seguimiento de las aplicaciones de usuario de confianza conectadas para el inicio de sesión único.

Proveedores de sesión

Hay cinco proveedores de sesiones disponibles para administrar la manera en que un perfil técnico controla la sesión de SSO. Debe elegir el proveedor de sesiones más adecuado al configurar el perfil técnico.

En la tabla siguiente se muestra qué proveedor de sesiones se va a usar en función del tipo de perfil técnico que quiera administrar. Algunos proveedores de sesiones permiten leer y escribir notificaciones en la cookie de sesión.

Proveedor de sesión Tipos de perfil técnico aplicables Propósito Escribir notificaciones Leer notificaciones
DefaultSSOSessionProvider Autoafirmado, Microsoft Entra ID, Autenticación multifactor de Microsoft Entra, Transformación de notificaciones Omite la ejecución del perfil técnico.
ExternalLoginSSOSessionProvider Proveedor de identidades de OAuth1, proveedor de identidades de Oauth2, proveedor de identidades de OpenID Connect, proveedor de identidades de SAML Acelera la página de selección del proveedor de identidades. Realizar un cierre de sesión único.
OAuthSSOSessionProvider Emisor de tokens JWT Administra la sesión entre un usuario de confianza de OAuth2 u OpenID Connect y Azure AD B2C. Realiza el cierre de sesión único. No No
SamlSSOSessionProvider Emisor de tokens SAML Administra la sesión entre un usuario de confianza de SAML y Azure AD B2C. Realiza el cierre de sesión único. No No
NoopSSOSessionProvider Any Suprime todo perfil técnico para que no sea parte de la sesión. No No

En el diagrama siguiente se muestran los tipos de sesión que usa Azure AD B2C.

Diagrama que muestra los tipos de proveedores de sesión de Azure AD B2C.

Referencia a un proveedor de sesiones

Para usar un proveedor de sesiones en el perfil técnico:

  1. Cree un perfil técnico de administración de sesiones adecuado. Tenga en cuenta que el paquete de inicio de Azure AD B2C incluye los perfiles técnicos más comunes de administración de sesiones. Si procede, puede hacer referencia a un perfil técnico de administración de sesiones existente.

    En el siguiente fragmento de código XML se muestra el perfil técnico de administración de sesiones SM-AAD del paquete de inicio. La sesión proporcionada es de tipo 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. Haga referencia al perfil técnico de administración de sesiones dentro de su perfil técnico. Al hacerlo, controla el comportamiento de ese perfil técnico durante los inicios de sesión (SSO) posteriores.

    Para hacer referencia a un perfil técnico de administración de sesiones desde el perfil técnico, agregue el elemento UseTechnicalProfileForSessionManagement. En el ejemplo siguiente se muestra el uso del perfil técnico de administración de sesiones SM-AAD. Cambie ReferenceId por el identificador del perfil técnico de administración de sesiones.

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

Importante

Cuando un perfil técnico no hace referencia a ningún proveedor de administración de sesiones, se aplica el proveedor de sesiones DefaultSSOSessionProvider, lo que puede provocar un comportamiento inesperado.

Nota

Durante el flujo de un token de actualización, no se invocan los proveedores de administración de sesiones. Todos los intentos de emitir un nuevo token de acceso son una copia de las notificaciones originales emitidas.

Administración de notificaciones de sesión

Los perfiles técnicos de administración de sesiones controlan qué notificaciones se pueden leer, escribir o generar durante la ejecución de directivas personalizadas.

Dentro del perfil técnico de administración de sesiones, use los elementos PersistedClaims y OutputClaims para administrar las notificaciones.

  • Notificaciones persistentes: Notificaciones que se pueden escribir en la cookie de sesión.
    • Para que una notificación se escriba en la cookie de sesión, debe formar parte de la cesta de notificaciones actual.
    • Todas las notificaciones escritas vuelven automáticamente durante los inicios de sesión (SSO) posteriores. No es necesario especificar las notificaciones de salida.
  • Notificaciones de salida: Notificaciones adicionales que se pueden generar en la cesta de notificaciones durante los inicios de sesión (SSO) posteriores. Puesto que las notificaciones de salida no se devuelven desde la sesión, debe establecer un valor predeterminado.

Los elementos de notificaciones persistentes y de salida se muestran en el siguiente fragmento de código 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>

Los proveedores de administración de sesiones DefaultSSOSessionProvider y ExternalLoginSSOSessionProvider se pueden configurar para administrar notificaciones, de modo que durante:

  • Inicio de sesión nuevo
    • El elemento PersistedClaims escriba las notificaciones en la cookie de sesión. Las notificaciones persistentes no se puedan reescribir.
  • Inicios de sesión posteriores
    • Todas las notificaciones que se escriben en la cookie de sesión se mostrarán en la cesta de notificaciones, disponible para usar en el siguiente paso de orquestación.
    • El elemento OutputClaims mostrará las notificaciones estáticas en la cesta de notificaciones. Use el atributo DefaultValue para establecer el valor de la notificación de salida.

DefaultSSOSessionProvider

El proveedor de sesiones DefaultSSOSessionProvider se puede configurar para administrar notificaciones durante los inicios de sesión (SSO) posteriores y permitir que se omitan los perfiles técnicos. DefaultSSOSessionProvider debe usarse para conservar y emitir notificaciones que son necesarias para los pasos de orquestación posteriores que no se obtendrán de otro modo durante los inicios de sesión (SSO) posteriores. Por ejemplo, las notificaciones que se pueden obtener al leer el objeto de usuario desde el directorio.

El siguiente perfil técnico SM-AAD es del tipo de proveedor de sesiones DefaultSSOSessionProvider. El perfil técnico SM-AAD se puede encontrar en el paquete de inicio de directivas personalizadas.

<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 ejemplo, el perfil técnico de administración de sesiones SM-AAD usa el proveedor de sesiones DefaultSSOSessionProvider. Se comportará como se muestra a continuación cuando se aplique al perfil técnico SelfAsserted-LocalAccountSignin-Email del paquete de inicio de directivas personalizadas:

  • Inicio de sesión nuevo
    • signInNameSe escribirá en la cookie de sesión, porque el perfil técnico de administración de sesiones (SM-AAD) está configurado con signInName para conservarse, y el perfil técnico que hace referencia a SM-AAD contiene un elemento OutputClaim para signInName. Este comportamiento es aplicable a todas las notificaciones que cumplen este patrón.
  • Inicios de sesión posteriores
    • El perfil técnico se omite, y el usuario no verá la página de inicio de sesión.
    • La cesta de notificaciones contendrá el valor signInName de la cookie de sesión, que se conservó en el inicio de sesión nuevo, y toda otra notificación que cumpliera el patrón para conservarse en la cookie de sesión.
    • El perfil técnico de administración de sesiones devuelve la notificación objectIdFromSession porque las notificaciones Output del proveedor de sesiones se procesan durante los inicios de sesión (SSO) posteriores. En este caso, la notificación objectIdFromSession que está presente en la cesta de notificaciones indica que las notificaciones del usuario vienen de la cookie de sesión debido al inicio de sesión único.

ExternalLoginSSOSessionProvider

El proveedor de sesiones ExternalLoginSSOSessionProvider se usa para omitir la pantalla de "selección de proveedor de identidades" y cerrar la sesión de un proveedor de identidades federado. Normalmente se le hace referencia en un perfil técnico configurado para un proveedor de identidades federado, como Facebook o Microsoft Entra ID.

  • Inicio de sesión nuevo
    • El elemento PersistedClaims escriba las notificaciones en la cookie de sesión. Las notificaciones persistentes no se puedan reescribir.
  • Inicios de sesión posteriores
    • Todas las notificaciones que se escriben en la cookie de sesión se mostrarán en la cesta de notificaciones, disponible para usar en el siguiente paso de orquestación.
    • El elemento OutputClaims mostrará las notificaciones estáticas en la cesta de notificaciones. Use el atributo DefaultValue para establecer el valor de la notificación.
    • Cuando un perfil técnico, que hace referencia a un perfil técnico de administración de sesiones, contiene un elemento OutputClaim, que se ha conservado en la cookie de sesión, se omitirá este perfil técnico.

El siguiente perfil técnico SM-SocialLogin es del tipo de proveedor de sesiones ExternalLoginSSOSessionProvider. El perfil técnico SM-SocialLogin se puede encontrar en el paquete de inicio de directivas personalizadas.

<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>

La notificación AlternativeSecurityId se genera cuando un usuario inicia sesión con un proveedor de identidades externo. Representa el identificador único del usuario del proveedor de identidades externo. La notificación AlternativeSecurityId se conserva de forma que, en los recorridos de inicio de sesión único, el perfil del usuario se pueda leer desde el directorio sin ninguna interacción con el proveedor de identidades federado.

Para configurar el proveedor de sesiones externo, agregue una referencia a SM-SocialLogin desde los perfiles técnicos de Oauth1, OAuth2 u OpenID Connect. Por ejemplo, Facebook-OAUTH usa el perfil técnico de administración de sesiones SM-SocialLogin. Para obtener más información, consulte el paquete de inicio de directivas personalizadas.

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

OAuthSSOSessionProvider

El proveedor de sesiones OAuthSSOSessionProvider se usa para administrar las sesiones de Azure AD B2C entre el usuario de confianza de OAuth2 u OpenID Connect y Azure AD B2C. Azure AD B2C admite el cierre de sesión único, también conocido como SLO (single log-out). Cuando un usuario cierra sesión a través del punto de conexión de cierre de sesión de Azure AD B2C, Azure AD B2C borrará la cookie de sesión del usuario del explorador. Sin embargo, el usuario podría permanecer conectado a otras aplicaciones que usan Azure AD B2C para la autenticación.

Este tipo de proveedor de sesiones permite a Azure AD B2C hacer un seguimiento de todas las aplicaciones OAuth2 u OpenID Connect en las que el usuario ha iniciado sesión. Durante el cierre de sesión de una aplicación, Azure AD B2C intentará llamar a los puntos de conexión logout de todas las demás aplicaciones conocidas que han iniciado sesión. Esta funcionalidad está integrada en el proveedor de sesiones. No hay notificaciones persistentes ni de salida disponibles para configurar. El siguiente perfil técnico SM-jwt-issuer es del tipo de proveedor de sesiones 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>

Se hace referencia al perfil técnico SM-jwt-issuer desde el perfil técnico JwtIssuer:

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

SamlSSOSessionProvider

El proveedor de sesiones SamlSSOSessionProvider se usa para administrar el comportamiento de la sesión con proveedores de identidades SAML federados o aplicaciones de usuario de confianza SAML y Azure AD B2C.

Administración de sesiones del proveedor de identidades SAML

Cuando se hace referencia a un proveedor de sesiones SamlSSOSessionProvider desde una sesión del proveedor de identidades SAML, RegisterServiceProviders se debe establecer en false.

El siguiente perfil técnico SM-Saml-idp es del tipo de proveedor de sesiones 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 el perfil técnico de administración de sesiones SM-Saml-idp, agregue una referencia al perfil técnico del proveedor de identidades SAML. Por ejemplo, el proveedor de identidades SAML de AD-FSContoso-SAML2 usa el perfil técnico de administración de sesiones SM-Saml-idp.

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

Administración de sesiones del proveedor de servicios SAML

Al hacer referencia a un proveedor de sesiones SamlSSOSessionProvider para administrar la sesión de un usuario de confianza SAML, RegisterServiceProviders debe establecerse en true. El cierre de sesión de SAML requiere que se completen SessionIndex y NameID.

El siguiente perfil técnico SM-Saml-issuer es del tipo de proveedor de sesiones 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 el perfil técnico de administración de sesiones SM-Saml-issuer, agregue una referencia al perfil técnico del emisor de tokens SAML. Por ejemplo, el perfil técnico Saml2AssertionIssuer usa el perfil técnico de administración de sesiones SM-Saml-issuer.

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

Metadatos

Atributo Obligatorio Descripción
IncludeSessionIndex No No se usa actualmente, se puede omitir.
RegisterServiceProviders No Indica que el proveedor debe registrar todos los proveedores de servicios SAML que han emitido una aserción. Valores posibles: true (opción predeterminada) o false.

NoopSSOSessionProvider

El proveedor de sesiones NoopSSOSessionProvider se usa para suprimir el comportamiento de inicio de sesión único. Los perfiles técnicos que usan este tipo de proveedor de sesiones siempre se procesarán, incluso cuando el usuario tenga una sesión activa. Este tipo de proveedor de sesiones puede ser útil para forzar que determinados perfiles técnicos se ejecuten siempre, por ejemplo:

  • Transformación de notificaciones: Para crear o transformar notificaciones que se usan más adelante para determinar qué pasos de orquestación se van a procesar u omitir.
  • RESTful: Captura los datos actualizados de un servicio RESTful cada vez que se ejecuta la directiva. También puede llamar a Restful para registros y auditorías ampliados.
  • Autoafirmado: Obliga al usuario a proporcionar datos cada vez que se ejecuta la directiva. Por ejemplo, comprobar correos electrónicos con códigos de acceso de un solo uso o pedir el consentimiento del usuario.
  • PhoneFactor: Obliga al usuario a realizar la autenticación multifactor como parte de una “autenticación por pasos” incluso durante los inicios de sesión posteriores (SSO).

Este tipo de proveedor de sesiones no conserva las notificaciones a la cookie de sesión del usuario. El siguiente perfil técnico SM-Noop es del tipo de proveedor de sesiones NoopSSOSessionProvider. El perfil técnico SM-Noop se puede encontrar en el paquete de inicio de directivas personalizadas.

<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 el comportamiento de inicio de sesión único de un perfil técnico, agregue una referencia a SM-Noop en el perfil técnico. Por ejemplo, AAD-Common usa el perfil técnico de administración de sesiones SM-Noop. Para obtener más información, consulte el paquete de inicio de directivas personalizadas.

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

Pasos siguientes

Obtenga información sobre cómo configurar el comportamiento de la sesión.