Sabre 无会话身份验证
Sabre sessionless authentication
我正在尝试获取无会话令牌。以下是 xml 但它不工作抛出错误。它给出了错误。缺少一些东西,我不确定要传递什么,例如 sec:BinarySecurityToken、SabreAth、mes:Role.
<StackTrace>com.sabre.universalservices.base.exception.InvalidEbXMLException: errors.xml.USG_EBXML_FIELD_TOO_LONG</StackTrace>
请求XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:mes="http://www.ebxml.org/namespaces/messageHeader" xmlns:web="http://webservices.sabre.com">
<soapenv:Header>
<sec:Security>
<!--Optional:-->
<sec:UsernameToken>
<!--Optional:-->
<sec:Username>123</sec:Username>
<!--Optional:-->
<sec:Password>mypass</sec:Password>
<!--0 to 2 repetitions:-->
<sec:NewPassword>mypass</sec:NewPassword>
<!--Optional:-->
<Organization>org1</Organization>
<!--Optional:-->
<Domain>AAA</Domain>
</sec:UsernameToken>
<!--Optional:-->
<sec:SabreAth>?</sec:SabreAth>
<!--Optional:-->
<sec:BinarySecurityToken>?</sec:BinarySecurityToken>
</sec:Security>
<mes:MessageHeader mes:id="?" mes:version="?">
<mes:From>
<!--1 or more repetitions:-->
<mes:PartyId mes:type="?">sastaticket.pk</mes:PartyId>
<!--Optional:-->
<mes:Role>?</mes:Role>
</mes:From>
<mes:To>
<!--1 or more repetitions:-->
<mes:PartyId mes:type="?">https://sws-crt.cert.havail.sabre.com</mes:PartyId>
<!--Optional:-->
<mes:Role>?</mes:Role>
</mes:To>
<mes:CPAId>?</mes:CPAId>
<mes:ConversationId>1234</mes:ConversationId>
<mes:Service mes:type="?">Session</mes:Service>
<mes:Action>TokenCreateRQ</mes:Action>
<mes:MessageData>
<mes:MessageId>?</mes:MessageId>
<mes:Timestamp>2018-01-28T00:00:00</mes:Timestamp>
<!--Optional:-->
<mes:RefToMessageId>?</mes:RefToMessageId>
<!--Optional:-->
<mes:TimeToLive>2018-01-28T00:00:00</mes:TimeToLive>
<!--Optional:-->
<mes:Timeout>2018-01-28T00:00:00</mes:Timeout>
</mes:MessageData>
<!--Optional:-->
<mes:DuplicateElimination>?</mes:DuplicateElimination>
<!--Zero or more repetitions:-->
<mes:Description xml:lang="?">?</mes:Description>
<!--You may enter ANY elements at this point-->
</mes:MessageHeader>
</soapenv:Header>
<soapenv:Body>
<web:TokenCreateRQ Version="?"/>
</soapenv:Body>
</soapenv:Envelope>
您似乎在 MessageData 节点中发送了太多信息。如果您按照 Dev Studio 中显示的 Sabre 示例,只有 MessageId 和 TimesStamp 可以解决问题。对于 Saber WS,有时并非所有可选节点都是必需的,在这种情况下,您发送的是不需要的额外信息。
您将要删除此:
<mes:TimeToLive>2018-01-28T00:00:00</mes:TimeToLive>
<mes:Timeout>2018-01-28T00:00:00</mes:Timeout>
只要这样就可以了:
<mes:MessageData>
<mes:MessageId>?</mes:MessageId>
<mes:Timestamp>2018-01-28T00:00:00</mes:Timestamp>
</mes:MessageData>
还要注意域,它应该是 AA 或 DEFAULT,但不是 "AAA"。
由于您没有令牌,因此您还必须删除此节点:
<sec:BinarySecurityToken>?</sec:BinarySecurityToken>
该服务与那些已经有令牌的服务有点不同。
我正在尝试获取无会话令牌。以下是 xml 但它不工作抛出错误。它给出了错误。缺少一些东西,我不确定要传递什么,例如 sec:BinarySecurityToken、SabreAth、mes:Role.
<StackTrace>com.sabre.universalservices.base.exception.InvalidEbXMLException: errors.xml.USG_EBXML_FIELD_TOO_LONG</StackTrace>
请求XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:mes="http://www.ebxml.org/namespaces/messageHeader" xmlns:web="http://webservices.sabre.com">
<soapenv:Header>
<sec:Security>
<!--Optional:-->
<sec:UsernameToken>
<!--Optional:-->
<sec:Username>123</sec:Username>
<!--Optional:-->
<sec:Password>mypass</sec:Password>
<!--0 to 2 repetitions:-->
<sec:NewPassword>mypass</sec:NewPassword>
<!--Optional:-->
<Organization>org1</Organization>
<!--Optional:-->
<Domain>AAA</Domain>
</sec:UsernameToken>
<!--Optional:-->
<sec:SabreAth>?</sec:SabreAth>
<!--Optional:-->
<sec:BinarySecurityToken>?</sec:BinarySecurityToken>
</sec:Security>
<mes:MessageHeader mes:id="?" mes:version="?">
<mes:From>
<!--1 or more repetitions:-->
<mes:PartyId mes:type="?">sastaticket.pk</mes:PartyId>
<!--Optional:-->
<mes:Role>?</mes:Role>
</mes:From>
<mes:To>
<!--1 or more repetitions:-->
<mes:PartyId mes:type="?">https://sws-crt.cert.havail.sabre.com</mes:PartyId>
<!--Optional:-->
<mes:Role>?</mes:Role>
</mes:To>
<mes:CPAId>?</mes:CPAId>
<mes:ConversationId>1234</mes:ConversationId>
<mes:Service mes:type="?">Session</mes:Service>
<mes:Action>TokenCreateRQ</mes:Action>
<mes:MessageData>
<mes:MessageId>?</mes:MessageId>
<mes:Timestamp>2018-01-28T00:00:00</mes:Timestamp>
<!--Optional:-->
<mes:RefToMessageId>?</mes:RefToMessageId>
<!--Optional:-->
<mes:TimeToLive>2018-01-28T00:00:00</mes:TimeToLive>
<!--Optional:-->
<mes:Timeout>2018-01-28T00:00:00</mes:Timeout>
</mes:MessageData>
<!--Optional:-->
<mes:DuplicateElimination>?</mes:DuplicateElimination>
<!--Zero or more repetitions:-->
<mes:Description xml:lang="?">?</mes:Description>
<!--You may enter ANY elements at this point-->
</mes:MessageHeader>
</soapenv:Header>
<soapenv:Body>
<web:TokenCreateRQ Version="?"/>
</soapenv:Body>
</soapenv:Envelope>
您似乎在 MessageData 节点中发送了太多信息。如果您按照 Dev Studio 中显示的 Sabre 示例,只有 MessageId 和 TimesStamp 可以解决问题。对于 Saber WS,有时并非所有可选节点都是必需的,在这种情况下,您发送的是不需要的额外信息。
您将要删除此:
<mes:TimeToLive>2018-01-28T00:00:00</mes:TimeToLive>
<mes:Timeout>2018-01-28T00:00:00</mes:Timeout>
只要这样就可以了:
<mes:MessageData>
<mes:MessageId>?</mes:MessageId>
<mes:Timestamp>2018-01-28T00:00:00</mes:Timestamp>
</mes:MessageData>
还要注意域,它应该是 AA 或 DEFAULT,但不是 "AAA"。
由于您没有令牌,因此您还必须删除此节点:
<sec:BinarySecurityToken>?</sec:BinarySecurityToken>
该服务与那些已经有令牌的服务有点不同。