Аутентификация


Оглавление:


Введение #

Для аутентификации в системе Sabre при использовании Sabre APIs могут быть использованы два механизма:

  • сессии (sessions)
  • токены доступа (access tokens)

В таблице ниже описаны принципиальные различия двух механизмов:

Сессии Токены доступа
Используются для аутентификации и авторизации Да Да
Хранят состояние (каждый последующий запрос зависит от предыдущего) Да Нет
Время жизни Гарантированное время жизни — 15 минут, максимальное время жизни — 30 минут 7 дней
Одновременное использование одной сессии или токена в нескольких запросах Нет Да
Максимальное количество одновременно активных сессий или токенов доступа От 50 одновременно открытых сессий (в зависимости от настроек PCC) Без ограничений
Принудительное закрытие Каждое воскресенье в 00:15 по Центральноамериканскому времени (08:15 по Московскому времени летом и в 09:15 зимой) Нет
Поддержка сервисами Все сервисы Некоторые сервисы (см. список в Список сервисов)
Создание SessionCreateRQ TokenCreateRQ
Закрытие SessionCloseRQ Недоступно
Продление времени жизни OTA_PingRQ или отправка любого запроса Недоступно

После создания сессии или токена доступа в ответе будет представлен идентификатор сессии или токена доступа.

Пример идентификатора сессии:

Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/RESA!ICESMSLB\/RES.LB!-3292053128691423346!1291480!0

Пример идентификатора токена доступа:

T1RLAQId95/WFF0HHN4hYzDJDxQdcQzEDhDPlavekGd+JIT1h1yTVCggAACwUYKogIH6j6DlWeQQbK3oVdLvm1P/B+y0FwmSZTetQIIBMnVOoQ8XJ5pql0LZpCsAfPWnLf9mndGQbJKBUZ0Ggs5gsdVwxJ/C0WEd1GHcAk6EzzpJLSTaEejbi1i4rxmZzynu9zlG6up6WomVrxutpOVly4EUmlLWcxxyrJ3S4kDYWzBPgB4ttLYaA4Jl9VbPvAKxtuULknOuMSZu9m1HxUFx+npDEqx/NoLmjma+TCg*

Полученный идентификатор необходимо указать в качестве значения элемента /SOAP-ENV:Envelope/SOAP-ENV:Header/Security/BinarySecurityToken любого запроса.

Дополнительную информацию об аутентификации в Sabre APIs можно получить на портале Sabre Dev Studio.

Сессии #

Создание сессии (SessionCreateRQ) #

Для создания сессии используется сервис SessionCreateRQ.

В запросе необходимо указать:

  • wsse:Username — имя пользователя (референция, EPR)
  • wsse:Password — пароль
  • Organization — iPCC
  • элемент Domain должен содержать значение DEFAULT

Ответ будет содержать токен созданной сессии wsse:BinarySecurityToken, который необходимо использовать при отправке других запросов.

Пример запроса
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
      <From>
        <PartyId>Agency</PartyId>
      </From>
      <To>
        <PartyId>Sabre</PartyId>
      </To>
      <ConversationId>330c2c47-b98a-48b5-aa10-718d254ef3bc</ConversationId>
      <MessageData>
        <MessageId>1d7aa47e-149a-4261-b421-741a4c452942</MessageId>
        <Timestamp>2018-04-02T19:24:16</Timestamp>
      </MessageData>
      <Action>SessionCreateRQ</Action>
    </MessageHeader>
    <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <UsernameToken>
        <Username>{{username}}</Username>
        <Password>{{password}}</Password>
        <Organization>{{pcc}}</Organization>
        <Domain>DEFAULT</Domain>
      </UsernameToken>
    </Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <SessionCreateRQ Version="1.0.0" xmlns="http://www.opentravel.org/OTA/2002/11"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Пример ответа
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>330c2c47-b98a-48b5-aa10-718d254ef3bc</eb:ConversationId>
      <eb:Service eb:type="sabreXML">Session</eb:Service>
      <eb:Action>SessionCreateRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>1645456698561970611</eb:MessageId>
        <eb:Timestamp>2018-04-02T19:24:16</eb:Timestamp>
        <eb:RefToMessageId>1d7aa47e-149a-4261-b421-741a4c452942</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!-3161758806579122550!1655914!0</wsse:BinarySecurityToken>
    </wsse:Security>
  </soap-env:Header>
  <soap-env:Body>
    <SessionCreateRS status="Approved" version="1" xmlns="http://www.opentravel.org/OTA/2002/11">
      <ConversationId>330c2c47-b98a-48b5-aa10-718d254ef3bc</ConversationId>
    </SessionCreateRS>
  </soap-env:Body>
</soap-env:Envelope>

В случае, если логин или пароль в запросе неверные или учетная запись заблокирована, то система вернет ответ с ошибкой USG_AUTHENTICATION_FAILED. В этом случае рекомендуется сменить пароль и при необходимости разблокировать EPR.

Пример ответа с ошибкой
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>dcee8572-2958-47a3-bda5-13b15868325f</eb:ConversationId>
      <eb:Action>ErrorRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>2327729667967520610</eb:MessageId>
        <eb:Timestamp>2020-01-17T18:33:16</eb:Timestamp>
        <eb:RefToMessageId>1a35d735-4582-4756-9f4c-cd627ccf1786</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"/>
  </soap-env:Header>
  <soap-env:Body>
    <soap-env:Fault>
      <faultcode>soap-env:Client.AuthenticationFailed</faultcode>
      <faultstring>Authentication failed</faultstring>
      <detail>
        <StackTrace>com.sabre.universalservices.base.security.AuthenticationException: errors.authentication.USG_AUTHENTICATION_FAILED</StackTrace>
      </detail>
    </soap-env:Fault>
  </soap-env:Body>
</soap-env:Envelope>

Обновление сессии (OTA_PingRQ) #

Для того чтобы сессия не была закрыта по таймауту необходимо отправить запрос к сервису OTA_PingRQ.

Пример запроса
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
      <From>
        <PartyId>Agency</PartyId>
      </From>
      <To>
        <PartyId>Sabre</PartyId>
      </To>
      <ConversationId>0dc27b92-e02b-4f1e-8355-97f2f9bd3a60</ConversationId>
      <MessageData>
        <MessageId>87cb2dda-0464-4b96-9a72-baf8f6286bcf</MessageId>
        <Timestamp>2018-04-02T19:25:16</Timestamp>
      </MessageData>
      <Action>OTA_PingRQ</Action>
    </MessageHeader>
    <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <BinarySecurityToken EncodingType="Base64Binary" valueType="String">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!-3161758806579122550!1655914!0</BinarySecurityToken>
    </Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <OTA_PingRQ Version="1.0.0" xmlns="http://www.opentravel.org/OTA/2003/05"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Пример ответа
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>0dc27b92-e02b-4f1e-8355-97f2f9bd3a60</eb:ConversationId>
      <eb:Service eb:type="sabreXML">Session</eb:Service>
      <eb:Action>OTA_PingRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>1647317699162230610</eb:MessageId>
        <eb:Timestamp>2018-04-02T19:25:16</eb:Timestamp>
        <eb:RefToMessageId>87cb2dda-0464-4b96-9a72-baf8f6286bcf</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!-3161758806579122550!1655914!0</wsse:BinarySecurityToken>
    </wsse:Security>
  </soap-env:Header>
  <soap-env:Body>
    <OTA_PingRS Version="1.0.0" xmlns="http://www.opentravel.org/OTA/2003/05">
      <Success/>
      <EchoData/>
    </OTA_PingRS>
  </soap-env:Body>
</soap-env:Envelope>

Закрытие сессии (SessionCloseRQ) #

Для закрытия сессии используется сервис SessionCloseRQ.

В запросе необходимо указать:

  • wsse:BinarySecurityToken — токен сессии
Пример запроса
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
      <From>
        <PartyId>Agency</PartyId>
      </From>
      <To>
        <PartyId>Sabre</PartyId>
      </To>
      <ConversationId>ef18b24d-6c48-48f0-8357-ab4dbfc22742</ConversationId>
      <MessageData>
        <MessageId>9f23c9a8-1cea-4ba4-8edd-b8d2f0335c57</MessageId>
        <Timestamp>2018-04-02T19:25:33</Timestamp>
      </MessageData>
      <Action>SessionCloseRQ</Action>
    </MessageHeader>
    <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <BinarySecurityToken EncodingType="Base64Binary" valueType="String">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!-3161758806579122550!1655914!0</BinarySecurityToken>
    </Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <SessionCloseRQ Version="1.0.0" xmlns="http://www.opentravel.org/OTA/2002/11"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>ef18b24d-6c48-48f0-8357-ab4dbfc22742</eb:ConversationId>
      <eb:Service eb:type="sabreXML">Session</eb:Service>
      <eb:Action>SessionCloseRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>1647964699332930610</eb:MessageId>
        <eb:Timestamp>2018-04-02T19:25:33</eb:Timestamp>
        <eb:RefToMessageId>9f23c9a8-1cea-4ba4-8edd-b8d2f0335c57</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!-3161758806579122550!1655914!0</wsse:BinarySecurityToken>
    </wsse:Security>
  </soap-env:Header>
  <soap-env:Body>
    <SessionCloseRS status="Approved" version="1" xmlns="http://www.opentravel.org/OTA/2002/11"/>
  </soap-env:Body>
</soap-env:Envelope>

Получение информации об используемых сессиях (OLTMC USER DISP NAME) #

Для того чтобы узнать количество используемых на данный момент сессий для определенного iPCC необходимо отправить терминальную команду OLTMC USER DISP NAME [iPCC] при помощи сервиса SabreCommandLLSRQ или в терминале Sabre Red.

Например, для получения информации о сессиях для iPCC 9LSC необходимо отправить команду OLTMC USER DISP NAME 9LSC.

Ответ будет содержать информацию о количестве используемых сессий (INUSE) и о максимальном количестве доступных сессий для данного iPCC (MAX).

Пример ответа системы
CSMP0097I 05.05.34 CPU-D SS-BSS  SSU-AA   IS-01                 
                                                                
-TAM USER CONTROL FILE-                                         
 MAXIMUM DEFINABLE USERS    - 14999                             
 MAXIMUM CONFIGURABLE USERS - 14999                             
 CURRENT NUMBER USERS -       14507                             
 USER FLUSH CRET TIME VALUE -   60                              
-TAM USER FILE-                                                 
NAME             UORD T/O O OXIT RXIT S    MAX      INUSE   PCT 
---------------- ---- --- - ---- ---- - --------- --------- --- 
9LSC             2549  15             A        50         1   0 
 KEYWORDS - TA/9LSC CRTSST  DYNTAC  HSSPDB                      
 DELTAS - OBTAIN    0  RELEASE    0 FLUSH VALUE    5            
 DR CANDIDATE - N  REPORT - N                                   
 INUSE DATE - 08.29.2016                                        
                                                                
END OF DISPLAY                                                  

Использование сессий, созданных в Sabre Red (OIATH) #

Во время процесса разработки может быть полезно использование общего состояния, как при работе через Sabre APIs, так и при работе в терминале Sabre Red. Под общим состоянием подразумевается текущие несохраненные данные в бронировании, очередях и других объектах системы. Например, использование общего состояния позволяет добавить в бронирование сегменты при помощи сервиса EnhancedAirBookRQ без его сохранения, а затем увидеть эти сегменты в терминале Sabre Red, отправив команду *A.

Для этого необходимо в терминале Sabre Red отправить команду OIATH и получить в виде ответа токен сессии. Данный токен можно использовать при отправке запросов так же, как и токен созданный при помощи сервиса SessionCreateRQ.

Токены доступа #

Создание токена доступа (TokenCreateRQ) #

Для создания токена доступа используется сервис TokenCreateRQ.

Ответ будет содержать токен доступа wsse:BinarySecurityToken, который необходимо использовать при отправке других запросов.

Пример запроса
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
      <From>
        <PartyId>Agency</PartyId>
      </From>
      <To>
        <PartyId>Sabre</PartyId>
      </To>
      <ConversationId>d8667e6f-0050-4c98-8fbe-ed8d79a008a4</ConversationId>
      <MessageData>
        <MessageId>4873775b-aa60-43bc-ae9b-7d1840bc6daa</MessageId>
        <Timestamp>2018-04-02T19:25:50</Timestamp>
      </MessageData>
      <Action>TokenCreateRQ</Action>
    </MessageHeader>
    <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <UsernameToken>
        <Username>{{username}}</Username>
        <Password>{{password}}</Password>
        <Organization>{{pcc}}</Organization>
        <Domain>DEFAULT</Domain>
      </UsernameToken>
    </Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <TokenCreateRQ Version="1.0.0" xmlns="http://webservices.sabre.com"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Пример ответа
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>d8667e6f-0050-4c98-8fbe-ed8d79a008a4</eb:ConversationId>
      <eb:Service eb:type="sabreXML">Session</eb:Service>
      <eb:Action>TokenCreateRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>1648742699503030611</eb:MessageId>
        <eb:Timestamp>2018-04-02T19:25:50</eb:Timestamp>
        <eb:RefToMessageId>4873775b-aa60-43bc-ae9b-7d1840bc6daa</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">T1RLAQII6gb1blvvNycUxRL/XU6jz3TzRxBhcKDCU+SK/Lax/8XbqVALAACwy1YZr0cXtc9J6wYs/Ka+9Cxptihqez0exrjLhwuaDEW9A9HEnLpiKkxWxBpfELheq5LOt2EQZ0JMXeLcC5LGbJMZiburegseXnCcUTCSlZA8EpG6pFRBDUfKRH2tgDVrFfdlLth5yD61uve+58IHhpbdMVNkJDlUISf4Q+ZlCPek8ys3ZWZ6P0KXKQ5BCjKh6th0yNJvSWjjOkuhqBVT56Izh0raNQnEpJFbBm/j7GE*</wsse:BinarySecurityToken>
    </wsse:Security>
  </soap-env:Header>
  <soap-env:Body>
    <sws:TokenCreateRS Version="1.0.0" xmlns:sws="http://webservices.sabre.com">
      <sws:Success/>
    </sws:TokenCreateRS>
  </soap-env:Body>
</soap-env:Envelope>

В случае, если логин или пароль в запросе неверные или учетная запись заблокирована, то система вернет ответ с ошибкой USG_AUTHENTICATION_FAILED. В этом случае рекомендуется сменить пароль и при необходимости разблокировать EPR.

Пример ответа с ошибкой
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Header>
    <eb:MessageHeader eb:version="1.0" soap-env:mustUnderstand="1" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
      <eb:From>
        <eb:PartyId eb:type="URI">Sabre</eb:PartyId>
      </eb:From>
      <eb:To>
        <eb:PartyId eb:type="URI">Agency</eb:PartyId>
      </eb:To>
      <eb:ConversationId>dcee8572-2958-47a3-bda5-13b15868325f</eb:ConversationId>
      <eb:Action>ErrorRS</eb:Action>
      <eb:MessageData>
        <eb:MessageId>2327729667967520610</eb:MessageId>
        <eb:Timestamp>2020-01-17T18:33:16</eb:Timestamp>
        <eb:RefToMessageId>1a35d735-4582-4756-9f4c-cd627ccf1786</eb:RefToMessageId>
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"/>
  </soap-env:Header>
  <soap-env:Body>
    <soap-env:Fault>
      <faultcode>soap-env:Client.AuthenticationFailed</faultcode>
      <faultstring>Authentication failed</faultstring>
      <detail>
        <StackTrace>com.sabre.universalservices.base.security.AuthenticationException: errors.authentication.USG_AUTHENTICATION_FAILED</StackTrace>
      </detail>
    </soap-env:Fault>
  </soap-env:Body>
</soap-env:Envelope>