Información general sobre el SSO de OpenID Connect
OpenID Connect (OIDC) es un protocolo de autenticación basado en OAuth 2.0 que han adoptado las principales empresas tecnológicas.
SSO básico
Independientemente de las funciones que hayas seleccionado, los requisitos de configuración del SSO básico son los mismos. Para añadir implementaciones de fidelidad o tarjetas de crédito, se pedirá más información.
Requisitos de configuración
Para configurar correctamente el acceso SSO de OIDC a tu sitio web creado a partir de una plantilla, necesitaremos varios datos, como los siguientes:
- API (autorizar, token, userProfile)
- ID de cliente
- Secreto de cliente
- ResponseMode
- isNounceEnabled
- customerDetailsAPIKey (si está disponible)
Las implementaciones estándar de SSO de OIDC en Expedia se cifran utilizando nuestra clave pública, crean un punto de conexión posterior a la autorización, habilitan la notificación y establecen parámetros de alcance. También incluiremos información del usuario.
Autorización
El punto de conexión GET /authorize
se utiliza para la autenticación y la autorización. Devuelve una concesión de autorización al cliente.
Parámetros de solicitud
Parámetro | 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. | Cadena | Valores válidos: ninguno consentimiento | 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 | OpenID, 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í |
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í |
Tokens
El punto de conexión POST /token
se utiliza para verificar la identidad del usuario presentando una concesión de autorización.
Parámetros de solicitud
Parámetro | Descripción | Tipo de datos | ¿Obligatorio? |
---|---|---|---|
grant_type | El mecanismo que utiliza IDP para autorizar la creación de 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 o el punto de conexión del token fallará. | Cadena | Sí |
code | Código de identificación del cliente recibido en la respuesta a la llamada /authorize . | Cadena | Sí |
Encabezados de solicitud
Campo | 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í |
Parámetros 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 |
id_token | Un identificador que se devuelve si se concede el ámbito OpenID | Cadena |
ID_token es un token web JSON (JWT) que incluye fragmentos de información de autenticación llamados reclamaciones. Las soluciones de plantilla de Expedia utilizan las reclamaciones header
, payload
y signature
com en la tabla siguiente.
Reclamaciones de encabezado
Campo | Descripción | Tipo de datos | ¿Obligatorio? |
---|---|---|---|
alg | Identifica el algoritmo utilizado de firma digital (siempre RS256) | Cadena | No |
kid | ID de la clave: identifica la clave pública utilizada para verificar el token de identificación; la clave pública correspondiente se puede encontrar a través del conjunto de claves web JSON (JWKS) | Cadena | Sí |
Reclamaciones de carga
Campo | Descripción | Tipo de datos | ¿Obligatorio? |
---|---|---|---|
amr | Matriz JSON de cadenas que son identificadores para los métodos de autenticación | Matriz | No |
aud | Identifica el público al que va dirigido este token de identificación (uno de los ID de cliente OAuth 2.0 de tu aplicación) | Cadena | Sí |
auth_time | La hora a la que se ha verificado el usuario final, representada en tiempo Unix (segundos) | Entero | No |
exp | La hora a la que caduca el ID de token, representada en tiempo Unix (segundos) | Entero | Sí |
iat | La hora a la que se ha emitido el ID de token, representada en tiempo Unix (segundos) | Entero | No |
idp | Un indicador del proveedor de identidad | Cadena | Sí |
iss | La URL del servidor de autorización que ha emitido este token de identificación | Cadena | No |
jti | Un identificador único para este ID de token con fines de depuración y revocación | Cadena | Sí |
sub | Un identificador único para el sujeto de la llamada de autorización (el usuario) | Cadena | No |
ver | La versión semántica del ID de token | Entero | Sí |
Reclamaciones de firma
Validación de la firma: la firma se validará con la clave adecuada para ese client_id
y algoritmo.
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 de la información estándar del usuario, la configuración del programa de fidelidad incluirá los siguientes valores.
programAccount
Campo | Descripción | ¿Obligatorio? |
---|---|---|
programId | Identificador del programa de fidelidad al que está afiliado el cliente o el nombre del nivel asociado al programa de fidelidad | 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 | No |
lastFourDigitsOfCreditCard | Los cuatro últimos dígitos de la tarjeta de crédito utilizada en la reserva | No |
accountName | Nombre del programa (si no coincide con el nombre del nivel) | No |
loyaltyConversionRatio | Ratio de cómo se convierten los puntos obtenidos en el pago (por ejemplo, 1 EUR = 1 punto) | No |
loyaltyAccountBalance | Saldo actual de puntos de fidelidad obtenidos por el cliente | Sí |
value | Saldo de fidelidad; anidado bajo loyaltyAccountBalance | Sí |
currency | La moneda de recompensa que se utiliza en el programa de fidelidad, como CAD, USD, PUNTOS, MILLAS; anidado bajo loyaltyAccountBalance | Sí |
Restringir tarjeta de pago
Podemos configurar tu sitio web para que los clientes deban usar la tarjeta de crédito de tu organización en las reservas. Es opcional, ya que todas las soluciones de plantilla pueden aceptar cualquier tarjeta de crédito o débito de las entidades principales y (en EE. UU.) PayPal.
Almacenamiento y seguridad de tarjetas de crédito
Si decides obligar a utilizar la tarjeta de crédito personalizada de tu organización en las compras, queremos que sea con seguridad. Así es como lo gestionamos.
- La información de la tarjeta se almacena en un formato de token que está vinculado al perfil del cliente en Expedia. Nunca se almacena sin cifrar.
- Ningún ser humano tiene acceso a los datos de tarjetas cifrados, y solo se descifran con las credenciales de IAM seguras.
- Cuando se precarga una tarjeta en la página de pago, solo se muestra la descripción de la tarjeta, pero no el número.
- El cliente debe introducir el CVV de la tarjeta para completar la reserva con la tarjeta almacenada.
Requisitos de configuración
Además de los requisitos de configuración de la implementación estándar, cuando introduzcas tu tarjeta de crédito tendremos que añadir lo siguiente:
- Un punto de conexión para utilizar con el parámetro AuthnRequest.
- Tu clave pública para la verificación de firma.
Utilizaremos la clave privada de Expedia para firmar la carga AuthnRequest y nuestra clave pública para que valides la firma.
Detalles de carga
Junto con los atributos descritos en la implementación estándar, cuando un cliente inicia sesión en tu sitio web, el SSO de tarjeta de crédito inicia el envío de dos parámetros de transacción al punto de conexión seguro de SSO de Expedia:
- API de información del usuario: carga de respuesta codificada y firmada con afirmaciones firmadas y cifradas.
- RelayState: un enlace profundo a la URL de la página de destino.
La carga también incluirá los siguientes datos de la tarjeta de crédito:
Campo | Descripción | ¿Obligatorio? |
---|---|---|
cardNumber | El número de la tarjeta en la que se debe cobrar | Sí |
cardType | Tipo de tarjeta utilizada (por ejemplo, Visa, MasterCard, American Express) | Sí |
expirationDate | Fecha de caducidad de la tarjeta utilizada | Sí |
BillingAddress | Dirección de facturación asociada a la tarjeta utilizada | Sí |
addressCategoryCode | El tipo de dirección de facturación, por ejemplo, casa u oficina; anidado bajo BillingAddress | Sí |
firstAddressLine | Primera línea de la dirección de facturación; anidado bajo BillingAddress | Sí |
secondAddressLine | Segunda línea de la dirección de facturación; anidado bajo BillingAddress | No |
thirdAddressLine | Tercera línea de la dirección de facturación; anidado bajo BillingAddress | No |
cityName | Ciudad de la dirección de facturación; anidado bajo BillingAddress | Sí |
provinceName | Provincia de la dirección de facturación; anidado bajo BillingAddress | Sí |
postalCode | Código postal de la dirección de facturación; anidado bajo BillingAddress | Sí |
countryCode | Código de país de la dirección de facturación; anidado bajo BillingAddress | Sí |