OpenID Connect SSO overview

OpenID Connect (OIDC) is an OAuth 2.0-based authentication protocol that's been adopted by major technology companies.

Learn more about OIDC

Basic SSO

Regardless of the feature choices you’ve selected, the setup requirements of basic SSO are the same. Adding loyalty or credit card implementations will require additional information.

Setup requirements

To properly set up the OIDC SSO access to your template site, we need a few things, including:

  • APIs (authorize, token, userProfile)
  • ClientId
  • Client secret
  • ResponseMode
  • isNounceEnabled
  • customerDetailsAPIKey (if available)

A standard OIDC SSO implementation at Expedia will be encrypted using our public key, create a post-authorization endpoint, enable nounce, and set scope parameters. We’ll also include user information.

Authorization

The GET /authorize endpoint is used for authentication and authorization. It returns an authorization grant to the client.

Request parameters

ParameterDescriptionData typeSample valueMandatory?
client_idIdentifies the client. Must match the value preregistered in your identity provider (IDP). Obtained during either manual client registration or via the Dynamic Client Registration API.String Yes
nonceUsed to mitigate replay attacks. This value is returned in the ID token.String Yes
promptThe type of interaction required to validate.StringValid values:
none
consent
No
redirect_uriCallback location where the authorization code or tokens should be sent. Must match the value preregistered in your IDP during client registration.String Yes
response_typecode (IDP) value.String Yes
response_modeHow the authorization response should be returned.StringValid value:
query
No
scopeAccess token, used for fetching profile details. Required for authentication requests.StringOpenID, profile, and emailYes
stateThe state of the interaction. This value is returned in the token, and enables the user to click through, authenticate, and be returned to the page they’re originally interested in. The value can contain alphanumeric, comma, period, underscore, and hyphen characters.String Yes

Response parameters

ParameterDescriptionData typeMandatory?
codeAuthorization code that identifies the client. This must match the value preregistered in your IDP. Obtained during either manual client registration or via the Dynamic Client Registration API.StringYes
stateThe state of the interaction. This value is returned in the token, and enables the user to click through, authenticate, and be returned to the page they’re originally interested in. The value can contain alphanumeric, comma, period, underscore, and hyphen characters.StringYes

Tokens

The POST /token endpoint is used to verify the user’s identity by presenting an authorization grant.

Request parameters

ParameterDescriptionData typeMandatory?
grant_typeThe mechanism an IDP uses to authorize the creation of the tokens. Value: authorization_codeStringYes
redirect_uriSpecifies the callback location where the authorization was sent. This value must match the redirect_uri used to generate the original authorization_code or the token endpoint will fail.StringYes
codeClient identification code received in /authorize call response.StringYes

Request headers

FieldDescriptionData typeSample valueMandatory?
acceptMust be "application/json"Stringapplication/jsonYes
authorizationEncodes the client ID and secret with Base64. Use the encoded information in the HTTP authorization header.StringBasic<Base64 encoded client ID and secret>Yes
Content-TypeMust be "application/x-www-form-urlencoded"Stringapplication/x-www-form-urlencodedYes

Response parameters

FieldDescriptionData type
access_tokenAn access tokenString
token_typeThe audience of the tokenString
expires_inThe expiration time of the access token in secondsInteger
scopeThe scopes contained in the access tokenString
id_tokenAn identifier that’s returned if the OpenID scope is grantedString

ID_token is a JSON Web Token (JWT) that includes pieces of authentication information called claims. Expedia template solutions use the claims header, payload, and signature as in the table below.

Header claims

FieldDescriptionData typeMandatory?
algIdentifies the digital signature algorithm used (always RS256)StringNo
kidKey ID: Identifies the public key used to verify the ID token; the corresponding public key can be found via the JSON Web Key Set (JWKS)StringYes

Payload claims

FieldDescriptionData typeMandatory?
amrJSON array of strings that are identifiers for authentication methodsArrayNo
audIdentifies the audience that this ID token is intended for (one of your application's OAuth 2.0 client IDs)StringYes
auth_timeThe time the end user was authenticated, represented in Unix time (seconds)IntegerNo
expThe time the ID token expires, represented in Unix time (seconds)IntegerYes
iatThe time the ID token was issued, represented in Unix time (seconds)IntegerNo
idpAn indicator of the identity providerStringYes
issThe URL of the authorization server that issued this ID tokenStringNo
jtiA unique identifier for this ID token for debugging and revocation purposesStringYes
subA unique identifier for the subject of the authorization call (the user)StringNo
verThe semantic version of the ID tokenIntegerYes

Signature claims

Signature validation: The signature will be validated against the appropriate key for that client_id and algorithm.

Add loyalty

As part of your template site, you can include the ability for your customers to earn loyalty points on their travel purchases. If you choose, your template can also allow your customers to use their accumulated loyalty points to purchase travel.

The same setup requirements as the standard implementation apply, as do many of the values. Only those that are different are included here.

In addition to the standard user information, the loyalty program setup will include the following values.

programAccount

FieldDescriptionMandatory?
programIdIdentifier for the loyalty program the customer is affiliated to or the tier name associated with the loyalty programYes
loyaltyAccountNumberThe customer’s loyalty account number; should only be populated if a secondary identifier (other than the unique membershipId) is required for loyalty operationsNo
lastFourDigitsOfCreditCardThe last 4 digits of the credit card the customer used for the bookingNo
accountNameProgram name (if different from tier name)No
loyaltyConversionRatioRatio of how payment converts to points earned (for example, $1 = 1 point)No
loyaltyAccountBalanceCurrent balance of customer’s earned loyalty pointsYes
valueLoyalty balance; nested under loyaltyAccountBalanceYes
currencyThe earn currency used by the loyalty program, for example, CAD, USD, POINTS, MILES; nested under loyaltyAccountBalanceYes

Restrict payment card

We can set your site up so that your customers must use your organization’s credit card to book. This is optional, as all of the template solutions can accept all major credit or debit cards and (in the US) PayPal.

Credit card safety and storage

If you choose to require purchase using your organization’s custom credit card, we want you to feel secure. Here’s how we handle that.

  • Card information is stored in a tokenized form that’s linked to the customer's Expedia profile. It is never stored unencrypted.
  • No human beings have access to unencrypted card data, and decryption only happens with secure IAM credentials.
  • When a card is preloaded to the checkout page, only the card description is visible, not the card number.
  • The customer must enter the card’s CVV to complete the booking with the stored card.

Setup requirements

In addition to the setup requirements from the standard implementation, adding your credit card means we’ll need:

  • An endpoint to use for the AuthnRequest parameter.
  • Your public key for signature verification.

We’ll use Expedia’s private key to sign the AuthnRequest payload and our public key to provide signature validation to your end.

Payload details

Along with the attributes described in the standard implementation, when a customer logs in on your site, credit card SSO initiates to send two transaction parameters to the secure Expedia SSO endpoint:

  • user info API: Encoded and signed response payload with signed and encrypted assertions.
  • RelayState: A deep link to the landing page URL.
Information

Note

If your template site is also set up to earn loyalty points, you’ll also need the programAccount information.

The payload will also contain the following credit card details:

FieldDescriptionMandatory?
cardNumberThe card number to be chargedYes
cardTypeType of card used (for example, Visa, MasterCard, American Express)Yes
expirationDateExpiration date of the card usedNo
BillingAddressBilling address associated with the card usedNo
addressCategoryCodeThe type of address to be billed, for example, home or office; nested under BillingAddressYes
firstAddressLineFirst line of the billing address; nested under BillingAddressNo
secondAddressLineSecond line of the billing address; nested under BillingAddressYes
thirdAddressLineThird line of the billing address; nested under BillingAddressYes
cityNameCity of the billing address; nested under BillingAddressYes
provinceNameProvince of the billing address; nested under BillingAddressYes
postalCodePostal code of the billing address; nested under BillingAddressYes
countryCodeCountry code of the billing address; nested under BillingAddressYes
Did you find this page helpful?
How can we improve this content?
Thank you for helping us improve!