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. Devuelve una concesión o código de autorización al cliente post usuario es logged-in. Es una redirección del navegador.
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 debe identificarse si aún no se ha autentificado. Si es "ninguno", el IDP no solicitará el inicio de sesión, pero devolverá un código de autorización si se ha iniciado sesión, o un error en caso contrario. | Cadena | Valores válidos: ninguno O VACIAR | No |
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 | No |
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 | Lenguas y scripts preferidos por el usuario para la interfaz de usuario. | Cadena | en_CA, fr_CA | No |
audience | El destinatario previsto. | Cadena | Definido por los socios | No |
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í |
Ejemplo de URL de 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/auth
Ejemplo de URL de devolución de llamada
https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428
Punto final del token
El punto final POST /token
es una llamada a la API backend que se utiliza para obtener un token de acceso y un token de identificación presentando una concesión o 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 |
Muestra 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 de token
{
"access_token": "eyJhbGciOi.JSUzI1NiIsImtpZCI6Ilk1MkFDVXd3QV9SUzI1NiIsInBp.LmF0bSI6ImlrY20ifQ",
"token_type": "Bearer",
"expires_in": 1799
}
Punto final Userinfo
El punto final GET /userinfo es una llamada a la API backend que devuelve afirmaciones sobre el usuario autenticado basadas en el token de acceso proporcionado.
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 | Cabecera HTTP utilizada para enviar credenciales o tokens para autenticar a un usuario | Cadena | 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 si el cliente opta por recibir correos electrónicos de marketing | Booleano | verdadero/falso | No |
languageId | Lengua preferida por el usuario | Cadena | En, fr | No |
channelType | Diferentes plataformas a través de las cuales un usuario interactúa con una aplicación | Cadena | WEB, MÓVIL, TABLET | No |
firstName | Nombre del Cliente | Cadena | Sí | |
middleName | Segundo nombre del Cliente | Cadena | No | |
lastName | Apellidos del Cliente | Cadena | No | |
email | Dirección de correo electrónico del Cliente | Cadena | No | |
programAccount | Loyalty-related información | programAccount | Consulta la sección Add loyalty -> programAccount para más detalles sobre los Objetos. | No |
Ejemplo de Userinfo 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 creado a partir de una plantilla, puedes incluir la posibilidad de que tus clientes ganen puntos de fidelidad en sus compras de viajes. Si quieres, la plantilla también puede permitir a tus clientes utilizar sus puntos de fidelidad acumulados para comprar viajes.
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 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 | No |
lastFourDigitsOfCreditCard | Los cuatro últimos dígitos de la tarjeta de crédito utilizada en la reserva | Entero | No |
accountName | Nombre del programa (si no coincide con el nombre del nivel) | Cadena | No |
loyaltyConversionRatio | Ratio de cómo se convierten los puntos obtenidos en el pago (por ejemplo, 1 EUR = 1 punto) | Doble | No |
loyaltyAccountBalance | Saldo actual de puntos de fidelidad obtenidos por el cliente | Importe (consulta la sección Importe más abajo para conocer los detalles del Objeto) | No |
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í |