> ## Documentation Index
> Fetch the complete documentation index at: https://docs.play2sell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SSO (Single Sign-On)

> Los usuarios de su empresa entran a SalesOS sin contraseña de SalesOS — por el proveedor de inicio de sesión que ya usan (OAuth 2.0 / OpenID Connect) — en cualquier página, y vuelven por él cuando la sesión vence.

# SSO (Single Sign-On)

Los usuarios de su empresa pueden entrar a SalesOS **sin una contraseña de SalesOS**: quien autentica es el proveedor de inicio de sesión que su empresa ya usa. SalesOS recibe la identidad, verifica que la persona pertenece a su empresa y abre la sesión. Vale para **todo SalesOS** — pantalla inicial, leads, billetera, campañas, ranking — y el enlace puede llevar a la persona directo a cualquiera de esas páginas.

Esta guía es para **quien administra el proveedor de inicio de sesión de su empresa** (el equipo de TI).

## Quién hace qué

| Etapa | Quién |
| - | - |
| Registrar a Play2sell como aplicación en su proveedor y enviarnos los datos | Su empresa |
| Conectar su proveedor a SalesOS y devolver el nombre de la conexión y el enlace de entrada | Play2sell |
| Probar en staging con un usuario de prueba | Su empresa, con Play2sell |
| Repetir en producción y difundir el enlace a los usuarios | Su empresa |

## Antes de empezar

* Acceso de **administrador** a su proveedor de inicio de sesión (OAuth 2.0 / OpenID Connect).
* Su empresa ya usa SalesOS y el acceso por SSO fue acordado con Play2sell.
* Un usuario de prueba en su proveedor que **no sea administrador**: los administradores suelen tener acceso automático a todo, y la prueba pasaría sin probar nada.

## Lo que su proveedor necesita

| Requisito | Detalle |
| - | - |
| Flujo | *Authorization code* con aplicación **confidencial** (con client secret) |
| PKCE | Aceptar PKCE con `S256` en toda autorización |
| Endpoint de **userinfo** | **Obligatorio.** En cada inicio de sesión SalesOS lee en él el perfil del usuario, con el token de acceso |
| Identificador estable | Un campo que identifica a la persona y no cambia (vea [El identificador estable](#el-identificador-estable)) |
| **Correo** | **Obligatorio** en el perfil. Sin correo el inicio de sesión se rechaza |
| Nombre | Recomendado |
| Scopes | `openid profile email` (más los que su proveedor exija) |

<Note>
  Si su proveedor permite elegir cómo la aplicación se autentica en el endpoint de token, habilite `client_secret_post` y `client_secret_basic`.
</Note>

## Paso a paso

<Steps>
  <Step title="Registre a Play2sell en su proveedor">
    Cree **una aplicación por entorno** (producción y staging) con estos datos:

    | Ítem | Producción | Staging |
    | - | - | - |
    | Dirección de retorno (redirect URI) | `https://auth.play2sell.com/login/callback` | `https://auth-staging.play2sell.com/login/callback` |
    | Configuración de la aplicación cliente | Aplicación confidencial, con client secret, en el flujo *authorization code* | Igual |
    | Scopes | `openid profile email` | Igual |

    **Listo cuando:** las dos aplicaciones existen y la dirección de retorno de cada una es exactamente la de arriba, sin barra al final.
  </Step>

  <Step title="Mapee el perfil">
    Asegúrese de que el **userinfo** devuelve el identificador estable, el **correo** y el nombre del usuario. Anote el nombre de cada campo (ej.: `sub`, `email`, `name` o `dados.cpf`).

    **Listo cuando:** el usuario de prueba tiene los tres campos completos.
  </Step>

  <Step title="Asigne quién puede entrar">
    En su proveedor, asigne a la aplicación los usuarios o grupos que pueden entrar a SalesOS. Es el paso que más se olvida: sin la asignación, su proveedor rechaza el inicio de sesión antes de que llegue a SalesOS.

    **Listo cuando:** el usuario de prueba está asignado a las dos aplicaciones.
  </Step>

  <Step title="Envíe los datos a Play2sell por un canal seguro">
    Nunca por correo o chat en texto plano. Para cada entorno:

    * la ruta de la configuración de OpenID Connect (`/.well-known/openid-configuration`) o las direcciones de **autorización**, de **token** y de **userinfo** de su proveedor;
    * el **client ID** y el **client secret**;
    * el nombre de los campos del **identificador estable**, del **correo** y del **nombre**;
    * el usuario de prueba y un contacto técnico.

    **Listo cuando:** Play2sell confirma la recepción.
  </Step>

  <Step title="Reciba el nombre de la conexión y el enlace de entrada">
    Play2sell conecta su proveedor a SalesOS en staging y devuelve el **nombre de la conexión** y el **enlace de entrada** (vea [Enlace de entrada](#enlace-de-entrada)).
  </Step>

  <Step title="Pruebe en staging">
    Con el usuario de prueba (no administrador), abra el enlace de entrada de staging:

    | Prueba | Resultado esperado |
    | - | - |
    | Primer acceso, sin `next` | Inicia sesión en su proveedor y llega a la pantalla inicial de SalesOS, ya en su empresa |
    | Abrir el enlace otra vez, con sesión en su proveedor | Entra sin escribir nada |
    | Enlace con `next` de una página de SalesOS (ej.: `next=%2Fleads`) | Llega directo a esa página |

    **Listo cuando:** ocurren los tres resultados. Si algo falla, vea [Solución de problemas](#solución-de-problemas).
  </Step>

  <Step title="Producción">
    Repita el paso 4 con los datos de la aplicación de producción. Tras la confirmación de Play2sell, difunda el enlace de entrada de producción a los usuarios — en el portal, la intranet o cualquier sistema de su empresa que lleve a SalesOS.
  </Step>
</Steps>

## Enlace de entrada

| Entorno | Enlace |
| - | - |
| Producción | `https://app.play2sell.com/login/sso?connection=<conexión>&next=<ruta>` |
| Staging | `https://app-staging.play2sell.com/login/sso?connection=<conexión>&next=<ruta>` |

Cada entorno tiene su conexión: el nombre de `connection` en staging es el que Play2sell informa para la aplicación de staging.

| Parámetro | Obligatorio | Qué es |
| - | - | - |
| `connection` | Sí | El nombre de la conexión de su empresa, que Play2sell informa al activarla |
| `next` | No | La página de SalesOS donde el usuario llega después de entrar — cualquier página, ej.: `/leads`, `/wallet`, `/ranking`, `/campanha`. Sin él, abre la pantalla inicial |

<Tip>
  Algunas APIs de SalesOS ya devuelven el enlace de entrada listo para la página correcta. La [API de Campañas](/es/api/integrations/campaigns#entrar-de-nuevo-por-el-proveedor-de-su-empresa), por ejemplo, devuelve `access.login_url` con la dirección de cada entorno — úselo en lugar de armar el enlace en su código.
</Tip>

### Qué pasa cuando el usuario abre el enlace

| Situación del usuario | Resultado |
| - | - |
| Ya tiene sesión en SalesOS | Abre la página pedida directamente |
| Sesión de SalesOS vencida, pero con sesión en su proveedor | Pasa por su proveedor sin escribir nada y llega a la página |
| Sin sesión en ningún lado | Inicia sesión en **su** proveedor y llega a la página |

Quien entró por este camino y tiene la sesión vencida **dentro** de SalesOS vuelve por su proveedor automáticamente, a la misma página, en lugar de una pantalla de contraseña que no tiene.

<Warning>
  `next` solo acepta una **ruta dentro de SalesOS** (que empiece con `/`). Una URL completa, otro host o una ruta de inicio de sesión se ignoran, y el usuario llega a la pantalla inicial.
</Warning>

## El identificador estable

Es el campo que dice **quién es la persona** de un inicio de sesión al siguiente. No puede cambiar cuando el usuario cambia de correo. Su empresa elige uno de estos:

| Identificador | Cuándo usarlo |
| - | - |
| **Id interno de su proveedor** | El predeterminado (en general el campo `sub`) |
| **CPF o CNPJ** | Recomendado cuando su proveedor tiene el documento: en el primer acceso, SalesOS encuentra a la persona ya registrada con ese documento, aunque el correo sea otro, y el documento pasa a constar en su registro. Se acepta con o sin máscara (11 o 14 dígitos, con dígito verificador válido); un documento inválido se rechaza |
| **Correo** | Solo cuando no hay otro; cambiar de correo en su proveedor equivale a ser otra persona |

Se aceptan campos con namespace (ej.: `https://suempresa.com/cpf`) y campos anidados (ej.: `dados.cpf`).

## Quién entra y quién es rechazado

El inicio de sesión por el proveedor de su empresa **no abre la cuenta de quien no es de su empresa**. Un usuario nuevo entra ya vinculado a su empresa, con el cargo predeterminado acordado con Play2sell; los cambios de cargo se hacen en SalesOS. Los casos de abajo se rechazan, cada uno con un mensaje que le dice al usuario qué hacer:

| Situación | Qué ve el usuario |
| - | - |
| El correo ya tiene cuenta en SalesOS vinculada a **otra empresa** | "Este e-mail já tem uma conta no SalesOS" — entrar con el inicio de sesión de SalesOS |
| Es una cuenta del **equipo de Play2sell** | "Use o login do SalesOS" |
| El acceso de la persona en su empresa fue **desactivado** en SalesOS | "Seu acesso está desativado" — hablar con su gerente |
| El acceso de su empresa por este camino está **apagado** | "Este acesso está desligado" |
| La conexión usada **no está habilitada** en SalesOS | "Este acesso não está liberado" |
| Su proveedor no envió el **correo** | "O login da sua empresa não enviou o seu e-mail" |
| Su proveedor no envió el **identificador** | "O login da sua empresa não enviou a sua identificação" |
| El **CPF/CNPJ** enviado no es válido | "O CPF ou CNPJ enviado não é válido" |
| El **userinfo** de su proveedor no respondió | "O login da sua empresa não respondeu como esperado" |

<Note>
  Las pantallas están en portugués; la tabla muestra el título de cada una.
</Note>

## Baja de usuarios y cambio del client secret

* **Alguien deja su empresa:** desactive a la persona en su proveedor. Su próximo inicio de sesión lo rechaza su proveedor; la sesión que ya tenía abierta en SalesOS vale hasta vencer. Para cortarla también en SalesOS, pida al gerente de su empresa en SalesOS que desactive su acceso.
* **Cambio del client secret:** muchos proveedores hacen vencer el secret (en general entre 6 y 24 meses). Antes del vencimiento, genere uno nuevo y envíelo a Play2sell por el mismo canal seguro, con la fecha del cambio, para que el inicio de sesión no se detenga.

## Solución de problemas

| Síntoma | Causa probable | Qué hacer |
| - | - | - |
| Su proveedor muestra error de dirección de retorno | La redirect URI no es exactamente la de la tabla del paso 1 | Corrija la dirección, sin barra al final, en el entorno correcto |
| Su proveedor dice que el usuario no tiene acceso a la aplicación | El usuario no fue asignado a la aplicación | Asigne el usuario o el grupo (paso 3) |
| "O login da sua empresa não enviou o seu e-mail" | El correo no está en el userinfo, o el campo informado es otro | Libere el correo en el perfil y confirme el nombre del campo |
| "O login da sua empresa não respondeu como esperado" | El userinfo devolvió error o no respondió | Confirme que el userinfo acepta el token de acceso de la aplicación |
| El inicio de sesión funcionaba y dejó de funcionar para todos | Client secret vencido | Genere uno nuevo y envíelo a Play2sell |

Al pedir ayuda a Play2sell, envíe: la **hora** del intento, el **correo** del usuario, el **entorno** (producción o staging) y el **código o texto** del error que apareció en pantalla.

## Seguridad

* **Código de autorización con intercambio servidor a servidor:** ningún token de identidad pasa por la URL del navegador.
* **PKCE** en toda autorización.
* El **client secret** queda solo en el servicio de autenticación de Play2sell; no se guarda en la base de datos de SalesOS ni vuelve a aparecer en ninguna pantalla.
* **Denegado por defecto:** un inicio de sesión por una conexión no habilitada, o de una empresa con el acceso apagado, se rechaza — nunca cae en un camino alternativo.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="API de Campañas" icon="gift" href="/es/api/integrations/campaigns">
    Una API que devuelve el enlace de entrada listo (`access.login_url`)
  </Card>

  <Card title="Claves de API" icon="key" href="/es/api/integrations/api-keys">
    Integraciones servidor a servidor
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.