Securely providing messages from a cloud server to an enterprise is disclosed. In one aspect, a message is received at a first server that provides a cloud service to a plurality of tenants. The message complies with a protocol other than http. The message is put on a message queue for a first tenant of the plurality of tenants. An http connection is established in response to a request from a second server to establish the http connection between the second server and the first server. The first server receives an http request from the second serve over the http connection for a message for the first tenant. The message is provided to the second server over the http connection in response to determining that the second server is authorized to receive messages for the first tenant.
|
12. A system for securely providing messages, the system comprising:
a processor that is configured to:
provide a cloud service for a plurality of tenants via a cloud server;
receive a request message having a protocol other than hypertext transfer protocol (http);
put the request message on a java messaging service (jms) tenant request message queue for a first tenant of the plurality of tenants, wherein the jms tenant request message queue resides on the cloud server;
receive a request at the cloud server from a connector server to open an http connection between the cloud server and the connector server, wherein the connector server is located within an enterprise that is associated with the first tenant;
receive, at the cloud server from the connector server, an http request for a message for the first tenant;
validate that the connector server is authorized to receive messages for the first tenant;
access the request message from the jms tenant request message queue for the first tenant; and
provide the request message to the connector server over the http connection in response to validating the connector server.
1. A method of providing messages securely, the method comprising:
receiving a request message at a cloud server that provides a cloud service to a plurality of tenants, the message complying with a protocol other than hypertext transfer protocol (http);
putting the request message on a java messaging service (jms) tenant request message queue for a first tenant of the plurality of tenants, wherein the jms tenant request message queue resides on the cloud server;
establishing an http connection between the cloud server and a connector server in response to a request from the connector server to establish the http connection between the connector server and the cloud server, wherein the connector server is located within an enterprise that is associated with the first tenant;
receiving, at the cloud server from the connector server over the http connection, an http request for a message for the first tenant;
accessing the request message from the jms tenant request message queue for the first tenant; and
providing the request message from the cloud server to the connector server over the http connection in response to the cloud server determining that the connector server is authorized to receive messages for the first tenant.
19. A computer program product comprising:
a non-transitory computer readable storage medium comprising computer readable program code embodied therewith, the computer readable program code comprising:
computer readable program code configured to provide a cloud service for a plurality of tenants via a cloud server;
computer readable program code configured to receive a request message at the cloud server having a protocol other than hypertext transfer protocol (http);
computer readable program code configured to put the request message on a java messaging service (jms) tenant request message queue for a first tenant of the plurality of tenants, wherein the jms tenant request message queue resides on the cloud server;
computer readable program code configured to receive a request from a connector server to open an http connection between the connector server and the cloud server wherein the connector server is located within an enterprise that is associated with the first tenant, wherein the connector server is a tenant consumer of the jms tenant request message queue;
computer readable program code configured to receive, at the cloud server from the connector server, an http request for a message for the first tenant;
computer readable program code configured to validate that the connector server is authorized to receive messages for the first tenant;
computer readable program code configured to access the request message from the jms tenant request message queue for the first tenant; and
computer readable program code configured to provide the request message from the cloud server to the connector server over the http connection in response to validating the connector server.
2. The method of
the cloud server challenging the connector server for credentials for the first tenant in response to the request from the connector server to establish the http connection; and
the cloud server verifying credentials provided by the connector server in response to the challenge as a condition of establishing the http connection.
3. The method of
the cloud server challenging the connector server for credentials for the first tenant in response to the request from the connector server for a message for the first tenant; and
the cloud server verifying credentials provided by the connector server in response to the challenge as a condition of providing the message for the first tenant to the connector server.
4. The method of
5. The method of
6. The method of
receiving a message having a protocol that is not allowed through a firewall associated with the connector server.
7. The method of
9. The method of
10. The method of
receiving a response message at the cloud server from the connector server over the http connection; and
placing the response message on a jms tenant response message queue for the first tenant, wherein the jms tenant response message queue resides on the cloud server.
11. The method of
synchronizing a clock of the cloud server with a clock of the connector server;
establishing a time to live parameter for the request message based on the clock of the cloud server; and
determining by the connector server whether the request message has timed out based on the time to live parameter and the clock of the connector server after it has been synchronized to the clock of the cloud server.
13. The system of
challenge the connector server for credentials for the first tenant in response to the request to open the http connection; and
check credentials provided by the connector server in response to the challenge as a condition of providing the message.
14. The system of
challenge the connector server for credentials for the first tenant in response to the request from the connector server for a message for the first tenant; and
verifying credentials provided by the connector server in response to the challenge as a condition of providing the message for the first tenant to the connector server.
15. The system of
16. The system of
17. The system of
18. The system of
20. The computer program product of
21. The computer program product of
|
The present disclosure relates to securely providing messages from a computing network.
Enterprises often need to allow messages to be delivered from outside of the enterprise. Typically enterprises have firewalls to provide security for their computers and associated resources. The firewalls, which are designed to provide security, can make it difficult for an external source to provide messages.
One possible solution is to open a port in the firewall to allow the messages to be sent from an external source into an enterprise. However, such a solution potentially leaves the enterprise vulnerable to attack.
Another possible solution is a dedicated Virtual Private Network (VPN) link from a server outside of the enterprise to a server within the enterprise. However, the VPN may present a high security risk as it may expose the entire enterprise to attack from the external server.
According to one embodiment of the present disclosure a message is received at a first server that provides a cloud service to a plurality of tenants. The message complies with a protocol other than HTTP. The message is put on a message queue for a first tenant of the plurality of tenants. An HTTP connection is established in response to a request from a second server to establish the HTTP connection between the second server and the first server. The first server receives an HTTP request from the second server over the HTTP connection for a message for the first tenant. The message is provided to the second server over the HTTP connection in response to determining that the second server is authorized to receive messages for the first tenant.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter. The claimed subject matter is not limited to implementations that solve any or all disadvantages noted in the Background.
Techniques for securely providing messages to an enterprise are described herein. These messages may be provided from a cloud server. Enterprises often protect their valuable computer related assets from attack over a computer network by installing a firewall or other similar device. However, enterprises would also like to allow communication from the outside to be received. Thus, a problem is how to allow messages to be received without compromising security.
One embodiment includes a cloud server that receives messages that are destined for various enterprises that may be tenants of the cloud server. The messages may be of a type that are not allowed through a firewall of the given enterprise, absent the enterprise taking special steps such as opening a port to allow the messages through. However, rather than having the cloud server push the messages to the enterprise, the cloud server holds the messages on various tenant message queues. The cloud server may have a tenant message queue for each tenant for which it provides cloud services. When a new message is received by the cloud server, the cloud server places the message on the appropriate tenant message queue.
To obtain a message for a tenant, the enterprise has a connector server that first initiates a HyperText Transfer Protocol (HTTP) connection with the cloud server, using tenant credentials that were previously provided. After the cloud server authenticates the connection server, the HTTP connection is established. This may be an HTTP/S (Hypertext Transfer Protocol Secure) connection. As the term is used herein, an HTTP connection includes an HTTP/S connection. Then, the connector server can send an HTTP request to the cloud server to pull messages into the enterprise. The connector server may establish the HTTP connection through a firewall associated with the enterprise. However, the enterprise need not open up ports in the firewall to obtain the messages. Therefore, the enterprise is not vulnerable to external attacks via the port. Further details are provided below.
As will be appreciated by one skilled in the art, aspects of the present disclosure may be illustrated and described herein in any of a number of patentable classes or context including any new and useful process, machine, manufacture, or composition of matter, or any new and useful improvement thereof. Accordingly, aspects of the present disclosure may be implemented entirely hardware, entirely software (including firmware, resident software, micro-code, etc.) or combining software and hardware implementation that may all generally be referred to herein as a “circuit,” “module,” “component,” or “system.” Furthermore, aspects of the present disclosure may take the form of a computer program product embodied in one or more computer readable media having computer readable program code embodied thereon.
Any combination of one or more computer readable media may be utilized. The computer readable media may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an appropriate optical fiber with a repeater, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.
A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device. Program code embodied on a computer readable signal medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing.
Computer program code for carrying out operations for aspects of the present disclosure may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Scala, Smalltalk, Eiffel, JADE, Emerald, C++, CII, VB.NET, Python or the like, conventional procedural programming languages, such as the “c” programming language, Visual Basic, Fortran 2003, Perl, COBOL 2002, PHP, ABAP, dynamic programming languages such as Python, Ruby and Groovy, or other programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider) or in a cloud computing environment or offered as a service such as a Software as a Service (SaaS).
Aspects of the present disclosure are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatuses (systems) and computer program products according to embodiments of the disclosure. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable instruction execution apparatus, create a mechanism for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer readable medium that when executed can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions when stored in the computer readable medium produce an article of manufacture including instructions which when executed, cause a computer to implement the function/act specified in the flowchart and/or block diagram block or blocks. The computer program instructions may also be loaded onto a computer, other programmable instruction execution apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatuses or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
The cloud server 102 provides messages to the enterprises. The message delivery could be in connection to one of the cloud services 119. In one embodiment, the messages are part of the identity management service 119(1). For example, these could be requests made by identity management business logic.
To provide the messages, the cloud server 102 has a message server 104, message broker 106, HTTP server 107, tenant keys 111, and tenant queues 110(1)-110(n). The tenant queues 110(1)-110(n) are used to store messages that are destined for the various tenants. Each tenant that is served by the cloud server 102 may have its own tenant queue. In one embodiment, the tenant queues 110(1) are JMS (Java Message Service) queues. In one embodiment, cloud server 102 uses ActiveMQ™ as a message broker to implement the tenant queues 110(1)-110(n). In one embodiment, the message broker 106 creates an instance of a tenant queue for each tenant that is served by the cloud server 102.
The message server 104 is able to receive messages from network 107. The network 107 could be any network including, but not limited to, the Internet, a local area network (LAN), and/or a wide area network (WAN). These messages may be destined for the various tenants hosted by the cloud server 102. Also, these messages may be associated with one of the cloud services 119. In one embodiment, these messages have any format except HTTP. Rather than push the messages to the appropriate connector server 140, the message server 104 puts the messages onto the appropriate tenant queue 110(1)-110(n). In one embodiment, the message server 104 is a Lightweight Directory Access Protocol (LDAP) server. However, the message server 104 is not limited to being an LDAP server.
Each connector server 140(1)-140(n) may have a consumer 120(1)-120(n). The consumer 120(1)-120(n) may be a consumer of messages that were stored on the respective tenant queue 110(1)-110(n). The consumer 120 may provide these messages to various endpoints in the respective enterprise (not depicted in
Thus, note that the connector server 140 pulls the messages into the enterprise. A given consumer 120 may be configured with credentials associated with its associated tenant, such that it is able to obtain messages. To obtain messages, the consumer may initiate an HTTP connection with the cloud server 102 through the firewall 122 associated with the connector server 140. The HTTP connection may be established over network 109. This may be an HTTP/S connection.
The firewall 122 may be a hardware firewall, a software firewall, or some combination of hardware and software. There may be more than one firewall associated with a given connector server 140. In one embodiment, there is both a hardware firewall and a software firewall associated with the connector server 140 in a given enterprise. For example, there may be a software firewall that runs on the connector server 140, as well as a hardware firewall outside of the connector server 140.
In one embodiment, the firewall 122 is a stand-alone device that is separate from the connector server 140. As one example, the firewall 122 could be implemented within a router. The firewall 122 could use packet filtering to examine the header of a packet that is incoming from network 109 to determine its source and destination. This information may be compared to a set of predefined or user-created rules that determine whether the packet is to be forwarded or dropped. In one embodiment the firewall 122 is configured such that it would drop a packet if the packet is in the format it had when received by the cloud server 102. For example, the firewall 122 may be configured to drop a packet sent by an LDAP server. Thus, the cloud server 102 would not be able to simply send the message to the connector server 140.
As noted, the firewall 122 may be configured such that it would not allow the messages to be passed to the connector server 140 in their “raw” form in which they are received by the message server 104 in the cloud server 102. One possible option would be to configure the firewall 122 such that it could receive the messages in the “raw” form. However, such a change to the firewall 122 could make the enterprise vulnerable to attacks over the network 109.
The network 109 can include, e.g., the Internet, another wide area network, and/or a local area network. Networks 107 and 109 may be the same or different networks. Also, the various connector servers 140(1)-140(n) may access the cloud server 102 over the same or different networks.
An enterprise may have an HTTP proxy server 145 between the connector server 140 and the network 109. Such an HTTP proxy server 145 is depicted in enterprise “n.” An HTTP proxy server 145 may take HTTP requests from the connector server 140 and forward them to the network 109. The HTTP proxy server 145 may apply access policies to control/block access to sites that are prohibited by the enterprise. The HTTP proxy server 145 may have other purposes, as well. In one embodiment, a tenant consumer 120 is configured with authentication credentials such that it can authenticate with the HTTP proxy server 145. Therefore, the connector server 140 is able to establish an HTTP connection with the cloud server 102 via the HTTP proxy server 145. As depicted in
The cloud server 102 is able to field requests from the connector servers 140(1)-140(n), determine whether the connector server 140 is entitled to messages from a given tenant queue 110, and, if so, provide the messages. In one embodiment, the tenant keys 111 are used to determine whether access should be granted. The tenant keys 111 may include, but are not limited to, user name, password, and tenant name. In one embodiment, the HTTP server 107 receives HTTP requests. These may be HTTP/S requests. These HTTP requests may be forwarded to the message broker 106.
In one embodiment, the message broker 106 is able to convert an HTTP request to a request that is compatible with the tenant queue 110. In one embodiment, the message broker 106 converts an HTTP request to a request to obtain a message from a JMS queue. In one embodiment, the message broker 106 is an ActiveMQ™ message broker.
In step 202, the cloud server 102 receives a message having a protocol other than HTTP. In one embodiment, the message is received by an LDAP server. The message server 104 in the cloud server may receive the message from one of the cloud services 119. In one embodiment, the message is from the identity management service 119.
In step 204, the cloud server 102 puts the message on a message queue for a tenant to whom the message is intended. For example, the message is placed onto one of the tenant queues 110(1)-110(n). In one embodiment, step 204 includes the cloud server 102 identifying a distinguished name in the message in order to determine which tenant queue 110 to place the message on. Further details are discussed in connection with
In step 206, the cloud server 102 receives a request from a server in an enterprise to open an HTTP connection between the cloud server 102 and the server in the enterprise. The request could come from the connector server 140. The request may come from a HTTP proxy server 145, on behalf of the connector server 140.
In step 208, the cloud server 102 determines whether the server is entitled to receive messages for the first tenant. In one embodiment, the cloud server 102 determines whether the connector server 140 is authorized to receive the tenant message. Of course, in some cases, the cloud server 102 may determine that a connector server 140 is not entitled to receive messages for a particular tenant. In that case (step 209=no), the process 200 concludes.
In step 210, an HTTP connection is established between the cloud server 102 and the server that requested the connection. In one embodiment, an HTTP connection is established between the cloud server 102 and the connector server 140 in response to the cloud server 102 validating the connector server 140 (step 209=yes). In one embodiment, the HTTP connection is between the cloud server 102 and a proxy server 145 between the connector server 140 and cloud server 102. In one embodiment, the HTTP connection is an HTTP/S connection.
In one embodiment, step 210 includes providing a token (e.g., session token) to the connector server 140. The connector server 140 may use the token throughout a session with the cloud server 102. The session will remain valid for a period of time dictated by the HTTP server 107.
In step 212, the cloud server 102 receives an HTTP request from the connector server 140 for a message for the tenant. Step 212 may include receiving the request over the HTTP connection that was established in step 210. The HTTP request may be passed to the cloud server 102 from the proxy server 145. In one embodiment, the connector server 140 provides the token.
Step 214 includes the cloud server 102 providing the message to the connector server 140 over the HTTP connection in response to validating the connector server 140. Note that the cloud server 102 may validate the connector server 140 in response to the request to open the HTTP connection and/or the request for the message. Step 214 may include the message being sent through a firewall 122 associated with the connector server 140.
Step 302 includes the connector server 140 receiving credentials for a tenant. The credentials may be provided from the cloud server 102, in one embodiment. In one embodiment, step 302 includes configuring the connector server 140 with the credentials. This may be achieved by a system administrator entering in credentials that were provided by the cloud server 102 into a user interface at the connector server 140. Thus, in one embodiment, step 302 includes the connector server 140 receiving the credentials through a user interface.
The credentials may include, but are not limited to a tenant name, user name, and password. In one embodiment, step 302 includes configuring the connector server 140 with a URL associated with the cloud server 102. In one embodiment, this is the URL of HTTP server 107. Step 302 may include providing the various credentials and URL to the connector server 140.
Step 304 includes the connector server 140 initiating an HTTP connection between the connector server 140 and the cloud server 102. In one embodiment, the connector server 140 sends a request to the cloud server 102 to open an HTTP connection. In one embodiment, the request to open the connection is sent from the proxy server 145.
The connector server 140 may initiate the HTTP connection through a firewall 122 associated with the connector server 140. In one embodiment, the firewall 122 is configured to allow HTTP connections to be established, providing that they are initiated from within the enterprise. However, the firewall 122 may be configured to prevent an HTTP connection from being established if the initiator is from outside of the enterprise. In one embodiment, step 304 includes the connector server 140 using the URL that it was provided in step 302 to contact the cloud server 102. Step 304 may include sending a request to that URL.
In one embodiment, the HTTP connection is a persistent connection. A persistent connection allows multiple requests to be sent from the connector server 140 to the cloud server 102 while the HTTP connection remains open. However, the HTTP connection is not required to be a persistent connection. In one embodiment, the connector server 140 opens a new HTTP connection each time a request for a message is to be sent to the cloud server 102.
As noted in the discussion of
Step 306 includes the connector server 140 receiving a challenge from the cloud server 102 in response to the request to open the HTTP connection.
Step 308 includes the connector server 140 providing the tenant credentials to the cloud server 102 in response to the challenge as a condition for establishing the HTTP connection.
If the connector server 140 is unable to provide the proper credentials, the process 300 ends (step 309=no). If the connector server 140 successfully responds to the challenge (step 309=yes), then the HTTP connection is established.
Step 310 includes the connector server 140 querying the cloud server 102 for messages for the tenant over the HTTP connection. The connector server 140 may query the cloud server 102 using the HTTP connection through the firewall 122 associated with the connector server 140.
Step 312 includes the connector server 140 receiving a message for the tenant from the cloud server 102 over the HTTP connection. The message may be received through a firewall 122 associated with the connector server 140.
After the connector server 140 receives a message it may provide it to an endpoint, in one embodiment.
In step 424, the connector server 140 receives a response to the message form the endpoint 402. In step 426, the connector server 140 provides the response to the cloud server 102. In one embodiment, the message broker 106 places the response on the tenant response queue 110(1b). The responses on the tenant response queue 110(1b) may be processed by the message server (104,
Prior to being able to communicate with the cloud server 102, the connector server 140 may be configured.
In step 502, a tenant consumer 120 is installed on the connector server 140. In step 504, the connector server 140 is logged onto and credentials are provided. The provided credentials are input to the tenant consumer 120 by the connector server 140 so that the tenant consumer 120 can use those credentials when challenged. For example, the user starts to run the connector server 140 and accesses a login screen. The user then provides various tenant credentials, which are input to the tenant consumer 120 by the connector server 140. The URL of the cloud server 102 may also be provided at this time.
In step 506, endpoints 402 may be added to the cloud server 102. Step 506 may include logging on to a user interface provided by the cloud server 102 and providing information about endpoints 402 for which messages should be provided. This may include identifying the connector server 140 (and/or tenant consumer 120). After the connector server 140 has been identified, the endpoints 402 associated with the connector server 140 may be provided to the cloud server 102. For example, an Active Directory endpoint may be added in this manner. As other examples, a mainframe endpoint or a database endpoint may be added.
In step 604, the message server 104 determines which tenant the message is intended for. In one embodiment, the message server 104 examines the message to determine a distinguished name. A distinguished name is a unique name for an entry in a directory service. The distinguished name may comprise a hierarchy that provides a path to the tenant consumer 120. In one embodiment, the distinguished name pertains to an object that is attempted to be accessed. This object may be associated with one of the endpoints 402(1)-402(n). In one embodiment, the tenant can be uniquely determined based on the distinguished name. In one embodiment, the distinguished name contains information that directly identifies the tenant. In one embodiment, a server that provides the messages to the cloud server 102 has the task of providing information in the message that will uniquely provide the tenant.
In step 606, the message is converted to a protocol of the tenant queue 110. In one embodiment, the message is converted to a JMS message. In one embodiment, the message is converted into an ActiveMQ™ message.
In step 608, the message is placed onto the appropriate tenant queue 110(1)-120(n), as determined in step 604.
In step 704, the cloud server 102 converts the HTTP/S request to a format that complies with a format for the tenant queue 110. Step 704 might be performed by either the HTTP server 107, the message broker 106, or some other component. In one embodiment, the HTTP server 107 passes the HTTP/S request to the message broker 106, which converts the HTTP/S request. In one embodiment, the HTTP/S request is converted to an ActiveMQ™ request. In one embodiment, the HTTP/S request is converted to a JMS request.
In step 706, the message broker 106 accesses the message from the tenant queue 110. In one embodiment, a JMS message is accessed. In step 708, the message is provided to the connector server 140 over the HTTP/S connection.
Since the messages are not pushed to the connector server 140, the connector server 140 needs to have some way of determining when messages are available. In one embodiment, the connector server 140 performs a type of efficient polling to look for new messages. In one embodiment, the connector server 140 sends a request for messages and waits for a response. Either a message is received or a no message available is received. Upon receiving a message, the connector server 140 may request another message. Upon receiving a no message is available response, the connector server 140 may submit another request for a message.
In step 804, the cloud server 102 determines whether a message is presently available on the tenant queue 110. If so, the message is provided to the connector server 140 over the HTTP connection, in step 806.
In there is presently not a message on the tenant queue, then the cloud server 102 may wait some period of time to see whether any messages become available. The period of time could be configurable. So long as there is not a timeout (step 808=no), the cloud server 102 continues to wait for messages. If there is a timeout (step 808=yes), the cloud server 102 replies with a no message response to the connector server 140 over the HTTP connection.
Thus, after sending a request for a message, the connector server 140 may simply wait until it either receives a message or receives a timeout message.
In one embodiment, the connector server 140 synchronizes its clock with a clock of the cloud server. This may help to prevent a different type of timeout issue. Since the messages are being put on tenant queues in the cloud server, they may have a time to live (or other time parameter) that is based on a clock of the cloud server 102. When the connector server 140 accesses a message from the tenant queue, it may check the time parameter to determine whether the message has expired. If so, it may determine that the message should not be delivered to, for example, an endpoint 402. When making this check, the connector server 140 may use its own clock. Thus, if its clock were not synchronized to the cloud server's clock, the connector server 140 could potentially mistakenly determine that a message has timed out. Therefore, in one embodiment, the connector server 140 synchronizes its clock to the clock of the cloud server 102, or the clock upon which time to live for messages on the tenant queue are based.
The clock synchronization may be achieved by the connector server 140 sending a request to the cloud server 102 for the present time of the cloud server's clock. The synchronization is not required to be extremely precise. In one embodiment, there may be a few seconds difference between the clocks. Some messages may have a time to live that is much larger than this. In general, the precision of synchronization may depend on how long messages have to live.
In one embodiment, when the connector server 140 opens an HTTP connection, the cloud server 102 starts a session and provides a session token to the connector server 140.
In step 904, the cloud server 102 determines whether the session token is valid. If the connector server 140 provides a valid session token, then control passes to step 804 of
If the connector server 140 did not present a valid session token, then the cloud server 102 presents a challenge, in step 906. The connector server responds to the challenge in step 908. Step 906 and 908 may be similar to steps 306 and 308 from
If the challenge was met (step 910=yes), the cloud server 102 provides a session token to the connector server 140, in step 912. Then, control passes to step 804.
The computer system of
The system of
The components contained in the computer system of
One embodiment disclosed herein includes a system for securely providing messages. The system comprises a processor that is configured to provide a cloud service for a plurality of tenants, receive a message having a protocol other than HTTP, and put the message on a message queue for a first tenant of the plurality of tenants. The processor is further configured to receive a request from a requesting device to open an HTTP connection between the system and the requesting device. The processor is further configured receive, from the requesting device, an HTTP request for a message for the first tenant. The processor is further configured to validate that the requesting device is authorized to receive messages for the first tenant. The processor is further configured provide the message to the requesting device over the HTTP connection in response to validating the requesting device.
One embodiment disclosed herein includes a computer program product comprising a computer readable storage medium comprising computer readable program code embodied therewith. The computer readable program code comprises computer readable program code configured to provide a cloud service for a plurality of tenants. The computer readable program code is configured to receive a message having a protocol other than HTTP. The computer readable program code is configured to put the message on a message queue for a first tenant of the plurality of tenants. The computer readable program code is configured to receive a request from a first server to open an HTTP connection between a second server and the first server. The computer readable program code is configured to receive, from the first server, an HTTP request for a message for the first tenant. The computer readable program code is configured to validate that the first server is authorized to receive messages for the first tenant. The computer readable program code is configured to provide the message to the first server over the HTTP connection in response to validating the first server.
One embodiment disclosed herein includes a computer program product comprising a computer readable storage medium comprising computer readable program code embodied therewith. The computer readable program code comprises computer readable program code configured to initiate, from a first server, an HTTP connection between the first server and a second server. The computer readable program code is configured to provide the credentials from the first server to the second server as a condition for establishing the HTTP connection. The computer readable program code is configured to query the second server from the first server for messages for the tenant over the HTTP connection. The computer readable program code is configured to receive a message for the tenant at the first server over the HTTP connection from the second server.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various aspects of the present disclosure. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
The terminology used herein is for the purpose of describing particular aspects only and is not intended to be limiting of the disclosure. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
The corresponding structures, materials, acts, and equivalents of any means or step plus function elements in the claims below are intended to include any disclosed structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present disclosure has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the disclosure in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the disclosure. The aspects of the disclosure herein were chosen and described in order to best explain the principles of the disclosure and the practical application, and to enable others of ordinary skill in the art to understand the disclosure with various modifications as are suited to the particular use contemplated.
Muehlebach, Heidi R., Fitzgibbon, Trent, Gossit, Brad
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
7359978, | Sep 04 1999 | HTC Corporation | Providing secure access through network firewalls |
8181238, | Aug 30 2007 | SOFTWARE AG USA, INC | Systems and/or methods for streaming reverse HTTP gateway, and network including the same |
8745710, | Jun 25 2012 | Amazon Technologies, Inc | Automated secret renegotiation |
8903884, | Feb 21 2011 | Microsoft Technology Licensing, LLC | Multi-tenant services gateway |
20050076126, | |||
20060236387, | |||
20100125899, | |||
20100287278, | |||
20110264765, | |||
20120042216, | |||
20120144024, | |||
20120265976, | |||
20120281706, | |||
20130191500, | |||
20130286951, | |||
20130326346, | |||
20130326487, | |||
20140075446, | |||
20140101110, | |||
20140156684, | |||
20140157113, | |||
20140337474, | |||
WO2005089063, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 21 2013 | MUEHLEBACH, HEIDI R | CA, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 029889 | /0469 | |
Feb 21 2013 | FITZGIBBON, TRENT | CA, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 029889 | /0469 | |
Feb 21 2013 | GOSSIT, BRAD | CA, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 029889 | /0469 | |
Feb 25 2013 | CA, Inc. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Aug 23 2019 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Aug 17 2023 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
Feb 23 2019 | 4 years fee payment window open |
Aug 23 2019 | 6 months grace period start (w surcharge) |
Feb 23 2020 | patent expiry (for year 4) |
Feb 23 2022 | 2 years to revive unintentionally abandoned end. (for year 4) |
Feb 23 2023 | 8 years fee payment window open |
Aug 23 2023 | 6 months grace period start (w surcharge) |
Feb 23 2024 | patent expiry (for year 8) |
Feb 23 2026 | 2 years to revive unintentionally abandoned end. (for year 8) |
Feb 23 2027 | 12 years fee payment window open |
Aug 23 2027 | 6 months grace period start (w surcharge) |
Feb 23 2028 | patent expiry (for year 12) |
Feb 23 2030 | 2 years to revive unintentionally abandoned end. (for year 12) |