Información general sobre el SSO de OAuth 2.0
OAuth 2.0 es un estándar de autorización que permite a las aplicaciones obtener acceso limitado a cuentas de usuario en un servicio HTTP. Funciona delegando la autenticación del usuario al servicio que aloja la cuenta de usuario y autorizando a las aplicaciones de terceros para que accedan a la cuenta de usuario. OAuth 2.0 proporciona flujos de autorización en aplicaciones web y de escritorio, y en dispositivos móviles.
>> Más información sobre OAuth 2.0
SSO básico
Independientemente de las funciones que hayas seleccionado, el SSO básico requiere algunos datos específicos y, en particular, una clave pública. Para añadir implementaciones de fidelidad o tarjetas de crédito, se pedirá más información.
Información de configuración
Para configurar correctamente el acceso SSO de OAuth 2.0 a tu sitio web creado a partir de una plantilla, necesitaremos datos como los siguientes:
- API (autorizar, token, userProfile)
- ID de cliente
- Secreto de cliente
- ResponseMode
- isNounceEnabled
- customerDetailsAPIKey (si está disponible)
Flujos de autorización

Autorizar punto final
El punto de conexión GET /authorize se utiliza para la autenticación y la autorización. Una vez que el usuario ha iniciado sesión, te devuelve una autorización o un código de autorización. Es una redirección del navegador que te lleva a introducir tus datos de acceso para autenticarte.
| Campo | Descripción | Tipo de datos | Ejemplo de valor | ¿Obligatorio? |
|---|---|---|---|---|
client_id | Identifica al cliente. Debe coincidir con el valor prerregistrado en tu proveedor de identidad (IDP). Se obtiene durante el registro manual del cliente o a través de la API de registro dinámico de clientes. | Cadena | Sí | |
nonce | Se utiliza para mitigar los ataques de repetición. Este valor se devuelve en el ID de token. | Cadena | Sí | |
prompt | El tipo de interacción necesaria para validar. Si está «vacío», el usuario tiene que iniciar sesión si aún no se ha autenticado. Si es «none», el IDP no te pedirá que inicies sesión, pero te dará un código de autorización si ya has iniciado sesión; si no, te dará un error. | Cadena | Valores válidos: ninguno O bien: VACÍO | — |
redirect_uri | Lugar de devolución de llamada donde se debe enviar el código de autorización o los tokens. Debe coincidir con el valor prerregistrado en tu IDP durante el registro del cliente. | Cadena | Sí | |
response_type | Valor code (IDP). | Cadena | Sí | |
response_mode | Cómo debe devolverse la respuesta de autorización. | Cadena | Valor válido: consulta | — |
scope | Identificador de acceso, utilizado para obtener los detalles del perfil. Necesario para las solicitudes de autenticación. | Cadena | Perfil y correo electrónico | Sí |
state | El estado de la interacción. Este valor se devuelve en el token y permite al usuario hacer clic, autenticarse y volver a la página que le interesaba originalmente. El valor puede contener caracteres alfanuméricos, comas, puntos, guiones bajos y guiones. | Cadena | Sí | |
ui_locales | Los idiomas y alfabetos que prefiere el usuario para la interfaz de usuario. | Cadena | en_CA, fr_CA | — |
audience | El destinatario previsto. | Cadena | Definido por los socios | — |
Parámetros de respuesta
| Parámetro | Descripción | Tipo de datos | ¿Obligatorio? |
|---|---|---|---|
code | Código de autorización que identifica al cliente. Debe coincidir con el valor prerregistrado en tu IDP. Se obtiene durante el registro manual del cliente o a través de la API de registro dinámico de clientes. | Cadena | Sí |
state | El estado de la interacción. Este valor se devuelve en el token y permite al usuario hacer clic, autenticarse y volver a la página que le interesaba originalmente. El valor puede contener caracteres alfanuméricos, comas, puntos, guiones bajos y guiones. | Cadena | Sí |
URL de ejemplo para la autorización
https://example.com/authorize?client_id={clientID}&response_type=code&state=d6b93799-404b-4205-9bb3-c579b1180428&scope=email profile&nounce=234567687867&redirect_uri=https://{ExpediaDomain}/sso/authURL de devolución de llamada de ejemplo
https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428Punto final del token
El punto final POST /token es una llamada a la API de backend que se utiliza para obtener un token de acceso y un token de identificación mediante la presentación de una concesión de autorización o un código de autorización.
Parámetros de solicitud
| Parámetro | Descripción | Tipo de datos | ¿Obligatorio? |
|---|---|---|---|
grant_type | El mecanismo que utiliza tu IDP para autorizar la creación de los tokens. Valor: authorization_code | Cadena | Sí |
redirect_uri | Especifica la ubicación de la llamada de retorno donde se ha enviado la autorización. Este valor debe coincidir con el redirect_uri utilizado para generar el authorization_code original. | Cadena | Sí |
code | Código de identificación del cliente recibido en la respuesta a la llamada /authorize. | Cadena | Sí |
Encabezados de solicitud
| Parámetro | Descripción | Tipo de datos | Ejemplo de valor | ¿Obligatorio? |
|---|---|---|---|---|
accept | Debe ser "application/json" | Cadena | application/json | Sí |
authorization | Codifica el ID y el secreto del cliente con Base64. Utiliza la información codificada en el encabezado de autorización HTTP. | Cadena | Basic<ID y secreto del cliente cifrados con Base64> | Sí |
Content-Type | Debe ser "application/x-www-form-urlencoded" | Cadena | application/x-www-form-urlencoded | Sí |
Propiedades de respuesta
| Campo | Descripción | Tipo de datos |
|---|---|---|
access_token | Un token de acceso | Cadena |
token_type | El público del token | Cadena |
expires_in | El tiempo de expiración del token de acceso en segundos | Entero |
scope | Los ámbitos contenidos en el token de acceso | Cadena |
Ejemplo de token CURL
curl --location 'https://example.com/token’ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic {encoded ClientID:clientSecret}' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'redirect_uri=https://{ExpediaDomain}/sso/auth’ \
--data-urlencode 'code={Authorization code after login as part of callback to Expedia /sso/auth endpoint}'Ejemplo de respuesta con token
{
"access_token": "eyJhbGciOi.JSUzI1NiIsImtpZCI6Ilk1MkFDVXd3QV9SUzI1NiIsInBp.LmF0bSI6ImlrY20ifQ",
"token_type": "Bearer",
"expires_in": 1799
}Punto final de información del usuario
El punto final « GET /userinfo » es una llamada a la API de backend que devuelve las reclamaciones del usuario autenticado en función del token de acceso proporcionado. Devuelve los datos del perfil de usuario, que se usan para incluir el nombre del cliente en el encabezado de la cuenta de la web, lo que a su vez permite cargar la información sobre el nivel de fidelidad a través de la cuenta del programa.
Nota: Si no se incluyen los parámetros obligatorios en la respuesta, esto provocará problemas en la experiencia del cliente en la web. Por ejemplo, el nombre del cliente no aparecerá en la página de la plantilla, y faltará la información de la cuenta del programa necesaria para vincular la inscripción al programa de fidelización en Expedia's.
Encabezados de solicitud
| Campo | Descripción | Tipo de datos | Ejemplo de valor | ¿Obligatorio? |
|---|---|---|---|---|
ClientId | Identifica al cliente. Debe coincidir con el valor prerregistrado en tu proveedor de identidad (IDP). Se obtiene durante el registro manual del cliente o a través de la API de registro dinámico de clientes. | Cadena | Sí | |
Authorization | Encabezado HTTP que se usa para enviar credenciales o tokens para autenticar a un usuario | Cadena | Al portador access_token] | Sí |
Respuesta
| Campo | Descripción | Tipo de datos | Ejemplo de valor | ¿Obligatorio? |
|---|---|---|---|---|
membershipId | Identificador que identifica de forma única la cuenta del cliente | Cadena | Sí | |
optIn | Indicador booleano que indica si el cliente ha dado su consentimiento para recibir correos electrónicos de marketing | Booleano | verdadero/falso | — |
languageId | Idioma preferido del usuario | Cadena | En, fr | — |
channelType | Las distintas plataformas a través de las cuales un usuario interactúa con una aplicación | Cadena | WEB, MÓVIL, TABLETA | — |
firstName | Nombre del cliente | Cadena | Sí | |
middleName | Segundo nombre del cliente | Cadena | — | |
lastName | Apellido del cliente | Cadena | — | |
email | Dirección de correo electrónico del cliente | Cadena | — | |
programAccount | Loyalty-related información | programAccount | Echa un vistazo a Add loyalty -> sección « programAccount » más abajo para ver los detalles del objeto. | — |
Ejemplo de «userinfo» con CURL
curl --location 'https://example.com/userinfo' \
--header 'client_id: {clientId}' \
--header 'Authorization: Bearer {acess_token from token endpoint}'Ejemplo de respuesta de «Userinfo»
{
"membershipId": "12345678",
"languageID": "en",
"middleName": "MiddleName",
"lastName": "LastName",
"firstName": "FirstName",
"email": "test@expediagroup.com",
"programAccount": {
"programId": "Gold",
"loyaltyAccountBalance": {
"value": "10000",
"currency": "Points"
}
}
}Añadir programa de fidelidad
Como parte de tu sitio web basado en una plantilla, puedes incluir la opción de que los clientes ganen puntos de fidelidad con sus compras de viajes. Si lo deseas, tu plantilla también puede permitir que los clientes utilicen sus puntos de fidelidad acumulados para comprar viajes.
>> Más información sobre los puntos de fidelidad
Se aplican los mismos requisitos de configuración que en la implementación estándar, así como muchos de los valores. Aquí solo se incluyen los que son diferentes.
Además del valor estándar « user information », la configuración del programa de fidelización incluirá los siguientes valores.
programAccount
| Campo | Descripción | Tipo de datos | ¿Obligatorio? |
|---|---|---|---|
programId | Identificador del programa de fidelidad al que está afiliado el cliente o el nombre del nivel asociado al programa de fidelidad | Cadena | Sí |
loyaltyAccountNumber | El número de la cuenta de fidelidad del cliente; solo debería rellenarse si se requiere un identificador secundario (que no sea el membershipId único) para operaciones de fidelidad | Cadena | — |
lastFourDigitsOfCreditCard | Los cuatro últimos dígitos de la tarjeta de crédito utilizada en la reserva | Entero | — |
accountName | Nombre del programa (si no coincide con el nombre del nivel) | Cadena | — |
loyaltyConversionRatio | Ratio de cómo se convierten los puntos obtenidos en el pago (por ejemplo, 1 EUR = 1 punto) | Doble | — |
loyaltyAccountBalance | Saldo actual de puntos de fidelidad obtenidos por el cliente | Importe (consulta la sección «Importe» más abajo para ver los detalles del objeto) | — |
Importe
| Campo | Descripción | Tipo de datos | ¿Obligatorio? |
|---|---|---|---|
value | Saldo de fidelidad; anidado bajo loyaltyAccountBalance | Largo | Sí |
currency | La moneda de recompensa que se utiliza en el programa de fidelidad, como CAD, USD, PUNTOS, MILLAS; anidado bajo loyaltyAccountBalance | Cadena | Sí |
Silencioso sign-in
La opción « sign-in » silenciosa permite la autenticación automática cuando ya existe una sesión válida con el proveedor de identidad. Si el usuario está autenticado en otra pestaña del navegador o en otra aplicación, se reutilizará la sesión existente y el usuario iniciará sesión sin que se le pida que introduzca sus credenciales.
Esta función depende de que se mantenga una cookie del navegador para conservar el estado de « logged-in ». Utiliza el mismo punto final de autorización tanto para el inicio de sesión estándar como para los flujos de SSO. Cuando se detecta una sesión activa, la solicitud se redirige a una URL de redirección de SSO específica sin que se active la reautenticación.
El SSO solo se puede activar en puntos de venta que no estén sujetos a los requisitos de cumplimiento del Reglamento General de Protección de Datos (RGPD) de la UE, debido a la persistencia de la sesi cookie-based. Tendrás que configurar nuestra URL de redireccionamiento en los ajustes de tu proveedor de identidad para habilitar el flujo de SSO. Expedia Te daré la URL de redirección durante la integración.
Lista de redes permitidas
Esta lista define los requisitos para una comunicación segura entre tu sitio de plantilla y los entornos de Expedia. Te daremos los rangos de IP de salida de AWS, junto con las direcciones IP que se usan para las pruebas locales o en lower-environment. Tienes que añadir estas direcciones IP a la lista de permitidos para asegurarte de que no se bloquee el tráfico entrante procedente de Expedia.
También tendrás que facilitarnos las direcciones IP de salida de tu organización para que podamos añadirlas a la lista de permitidos por nuestra parte.
Nota:. Si estas direcciones IP no se añaden a las listas de permitidos (en cualquiera de los dos lados o en ambos), habrá problemas de conectividad tanto en las llamadas SSO salientes como en las entrantes.
Expedia puntos finales
Tendrás que configurar el « redirect_uri » en tu proveedor de identidad con estos valores para habilitar las llamadas de autorización:
{WLTP domain}/sso/auth: Punto final de redirección de SSO tras la llamada de autorización en el flujo de inicio de sesión{WLTP domain}/validateCurrentSession: Punto final de redirección de SSO tras la llamada de autorización para el flujo silencioso de sign-in
Nota: Expedia ha establecido un tiempo de espera máximo predeterminado para las sesiones de 60 minutos. Pasados 60 minutos, tendrás que actualizar el token.