Visão geral do SSO do OAuth 2.0
O OAuth 2.0 é uma estrutura de autorização que permite que aplicativos tenham acesso limitado a contas de usuários em um serviço HTTP. Ele funciona delegando a autenticação de usuário ao serviço que hospeda a conta de usuário e autorizando aplicativos de terceiros a acessar a conta de usuário. O OAuth 2.0 fornece fluxos de autorização a celulares ou tablets e aplicativos para desktop e web.
SSO básico
Sejam quais forem as opções de recursos selecionadas, o SSO básico requer alguns dados específicos, em especial uma chave pública. Adicionar implementações de cartão de crédito ou programa de fidelidade exige mais informações.
Informações de configuração
Para configurar o acesso de SSO do OAuth 2.0 ao seu modelo de site, alguns elementos são necessários, incluindo:
- APIs (autorização, token, userProfile)
- ClientId
- Segredo do cliente
- ResponseMode
- isNonceEnabled
- customerDetailsAPIKey (se disponível)
Fluxos de autorização

Endpoint de autorização
O ponto de extremidade GET /authorize é usado para autenticação e autorização. Retorna uma concessão de autorização ou código para o usuário da postagem do cliente, que é logged-in. É um redirecionamento do navegador.
| Campo | Descrição | Tipo de dados | Exemplo do valor | Obrigatório? |
|---|---|---|---|---|
client_id | Identifica o cliente. Deve corresponder ao valor pré-registrado no seu provedor de identidade (IDP). Obtido durante o registro manual do cliente ou por meio da API de registro dinâmico do cliente. | Sequência | Sim | |
nonce | Usado para mitigar ataques de repetição. Esse valor é retornado no token de ID. | Sequência | Sim | |
prompt | O tipo de interação necessário para validação. Se estiver "vazio", o usuário deverá fazer login caso ainda não esteja autenticado. Se "nenhum", o IdP não solicitará login, mas retornará um código de autorização se o usuário estiver logado, ou um erro caso contrário. | Sequência | Valores válidos: none OU VAZIO | Não |
redirect_uri | Local de callback para onde o código de autorização ou tokens devem ser enviados. Deve corresponder ao valor pré-registrado no seu IDP durante o registro do cliente. | Sequência | Sim | |
response_type | Valor do code (IDP). | Sequência | Sim | |
response_mode | Como a resposta de autorização deve ser retornada. | Sequência | Valor válido: query | Não |
scope | Token de acesso, usado para buscar detalhes de perfil. Obrigatório para solicitações de autenticação. | Sequência | Perfil e e-mail | Sim |
state | O estado da interação. Esse valor é retornado no token e permite que o usuário clique, faça a autenticação e retorne à página em que estava interessado. O valor pode conter caracteres alfanuméricos, vírgula, ponto, sublinhado e hífen. | Sequência | Sim | |
ui_locales | Idiomas e scripts preferidos do usuário para a interface do usuário. | Sequência | en_CA, fr_CA | Não |
audience | O destinatário pretendido. | Sequência | Definido pelos Parceiros | Não |
Parâmetros de resposta
| Parâmetro | Descrição | Tipo de dados | Obrigatório? |
|---|---|---|---|
code | Código de autorização que identifica o cliente. Deve corresponder ao valor pré-registrado no seu IDP. Obtido durante o registro manual do cliente ou por meio da API de registro dinâmico do cliente. | Sequência | Sim |
state | O estado da interação. Esse valor é retornado no token e permite que o usuário clique, faça a autenticação e retorne à página em que estava interessado. O valor pode conter caracteres alfanuméricos, vírgula, ponto, sublinhado e hífen. | Sequência | Sim |
Exemplo de URL de autorização
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 retorno de chamada de exemplo
https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428Endpoint de token
O endpoint POST /tokené uma chamada de API de backend usada para obter um token de acesso e um token de ID, apresentando uma concessão ou código de autorização.
Parâmetros de solicitação
| Parâmetro | Descrição | Tipo de dados | Obrigatório? |
|---|---|---|---|
grant_type | O mecanismo que o seu IDP usa para autorizar a criação dos tokens. Valor: authorization_code. | Sequência | Sim |
redirect_uri | Especifica o local de callback para onde a autorização foi enviada. Esse valor deve corresponder ao redirect_uri usado para gerar o authorization_code original. | Sequência | Sim |
code | Código de identificação do cliente recebido na resposta da chamada de /authorize. | Sequência | Sim |
Cabeçalhos de solicitação
| Parâmetro | Descrição | Tipo de dados | Exemplo do valor | Obrigatório? |
|---|---|---|---|---|
accept | Deve ser "application/json". | Sequência | application/json | Sim |
authorization | Codifica o ID e o segredo do cliente com Base64. Use as informações codificadas no cabeçalho de autorização HTTP. | Sequência | Basic<Base64 encoded client ID and secret> | Sim |
Content-Type | Deve ser "application/x-www-form-urlencoded". | Sequência | application/x-www-form-urlencoded | Sim |
Propriedades de resposta
| Campo | Descrição | Tipo de dados |
|---|---|---|
access_token | Um token de acesso. | Sequência |
token_type | O público do token. | Sequência |
expires_in | O tempo de expiração do token de acesso em segundos. | Inteiro |
scope | Os escopos contidos no token de acesso. | Sequência |
Token de exemplo 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}'Exemplo de resposta do token
{
"access_token": "eyJhbGciOi.JSUzI1NiIsImtpZCI6Ilk1MkFDVXd3QV9SUzI1NiIsInBp.LmF0bSI6ImlrY20ifQ",
"token_type": "Bearer",
"expires_in": 1799
}Endpoint de informações do usuário
O endpoint GET /userinfo é uma chamada de API de backend que retorna informações sobre o usuário autenticado com base no token de acesso fornecido.
Cabeçalhos de solicitação
| Campo | Descrição | Tipo de dados | Exemplo do valor | Obrigatório? |
|---|---|---|---|---|
ClientId | Identifica o cliente. Deve corresponder ao valor pré-registrado no seu provedor de identidade (IDP). Obtido durante o registro manual do cliente ou por meio da API de registro dinâmico do cliente. | Sequência | Sim | |
Authorization | Cabeçalho HTTP usado para enviar credenciais ou tokens para autenticar um usuário. | Sequência | Portador [access_token] | Sim |
Resposta
| Campo | Descrição | Tipo de dados | Exemplo do valor | Obrigatório? |
|---|---|---|---|---|
membershipId | Identificador que identifica exclusivamente a conta do Cliente. | Sequência | Sim | |
optIn | Indicador booleano que indica se o cliente optou por receber e-mails de marketing. | Booleano | verdadeiro/falso | Não |
languageId | Idioma preferido do usuário | Sequência | Em, fr | Não |
channelType | Diferentes plataformas através das quais um usuário interage com um aplicativo | Sequência | WEB, CELULAR, TABLET | Não |
firstName | Primeiro nome do cliente | Sequência | Sim | |
middleName | Nome do meio do cliente | Sequência | Não | |
lastName | Sobrenome do cliente | Sequência | Não | |
email | Endereço de e-mail do cliente | Sequência | Não | |
programAccount | Informações Loyalty-related | programAccount | Consulte a seção Add loyalty -> programAccountabaixo para obter detalhes do objeto. | Não |
Exemplo de informações do usuário CURL
curl --location 'https://example.com/userinfo' \
--header 'client_id: {clientId}' \
--header 'Authorization: Bearer {acess_token from token endpoint}'Exemplo de resposta de informações do usuário
{
"membershipId": "12345678",
"languageID": "en",
"middleName": "MiddleName",
"lastName": "LastName",
"firstName": "FirstName",
"email": "test@expediagroup.com",
"programAccount": {
"programId": "Gold",
"loyaltyAccountBalance": {
"value": "10000",
"currency": "Points"
}
}
}Inclusão de programas de fidelidade
Como parte do seu modelo de site, você pode incluir a possibilidade de os clientes ganharem pontos de fidelidade em suas compras de viagens. Se desejar, seu modelo também pode permitir que os clientes use seus pontos de fidelidade acumulados para comprar viagens.
Os mesmos requisitos de configuração da implementação padrão se aplicam, assim como muitos dos valores. Somente os que são diferentes estão incluídos aqui.
Além dos valores padrão user information, a configuração do programa de fidelidade incluirá os seguintes valores.
programAccount
| Campo | Descrição | Tipo de dados | Obrigatório? |
|---|---|---|---|
programId | Identificador do programa de fidelidade ao qual o cliente é afiliado ou o nome do nível associado ao programa de fidelidade. | Sequência | Sim |
loyaltyAccountNumber | Número da conta do programa de fidelidade do cliente. Deve ser preenchido somente se um identificador secundário, diferente do membershipId exclusivo, for necessário para operações do programa de fidelidade. | Sequência | Não |
lastFourDigitsOfCreditCard | Últimos quatro dígitos do cartão de crédito que o cliente usou na reserva. | Inteiro | Não |
accountName | Nome do programa (se diferente do nome do nível). | Sequência | Não |
loyaltyConversionRatio | Proporção usada para converter o pagamento em pontos ganhos, por exemplo, R$ 1 = 1 ponto. | Duplo | Não |
loyaltyAccountBalance | Saldo atual dos pontos de fidelidade ganhos pelo cliente. | Valor (Consulte a seção Valor abaixo para obter detalhes do objeto) | Não |
Valor
| Campo | Descrição | Tipo de dados | Obrigatório? |
|---|---|---|---|
value | Saldo do programa de fidelidade, aninhado em loyaltyAccountBalance. | Longa | Sim |
currency | A moeda usada pelo programa de fidelidade, por exemplo, reais, dólares americanos, pontos ou milhas, aninhada em loyaltyAccountBalance. | Sequência | Sim |