A method, system, and computer program product is presented for providing access to a set of resources in a distributed data processing system. A reverse proxy server receives a resource request from a client and determines whether or not it is managing a session identifier that was previously associated with the client by the reverse proxy server; if so, it retrieves the session identifier, otherwise it obtains a session identifier and associates the session identifier with the client using information that is managed by the reverse proxy server. The reverse proxy server then modifies the resource request to include the session identifier and forwards the modified resource request to an application server.
|
1. A method for processing requests to access a set of resources in a distributed data processing system, the method comprising:
receiving a resource request from a client at a proxy server, the proxy server providing a centralized session identifier management service for a set of application servers within a domain so that the set of application servers need not manage session state information;
in response to a determination by the proxy server that the proxy server is managing a session identifier that was previously associated with the client by the proxy server, retrieving the session identifier;
in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, obtaining a new session identifier and associating the new session identifier with the client using information that is managed by the proxy server;
determining the application server that is a target of the resource request;
modifying the resource request by the proxy server to include the session identifier or the new session identifier, wherein the resource request is modified according to a configuration uniquely associated with the application server that is the target of the resource request, wherein the step of modifying includes:
retrieving configuration information associated with the application server of the set of application servers, wherein the configuration information associated with the application server indicates a type of modification to be made to resource requests with respect to a session identifier; and
formatting the modified resource request in accordance with the configuration information associated with the application server; and
forwarding the modified resource request by the proxy server to the application server that is the target of the resource request.
11. An apparatus for processing requests to access a set of resources in a distributed data processing system, the apparatus comprising:
a processor;
a computer memory holding computer program instructions which when executed by the processor perform a method comprising:
receiving a resource request from a client at a proxy server, the proxy server providing a centralized session identifier management service for a set of application servers within a domain so that the set of application servers need not manage session state information;
retrieving the session identifier in response to a determination by the proxy server that the proxy server is managing a session identifier that was previously associated with the client by the proxy server;
obtaining a new session identifier and associating the session identifier with the client using information that is managed by the proxy server in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server;
determining the application server that is a target of the resource request;
modifying the resource request by the proxy server to include the session identifier or the new session identifier, wherein the resource request is modified according to a configuration uniquely associated with the application server that is the target of the resource request, wherein the step of modifying includes:
retrieving configuration information associated with the application server of the set of application servers, wherein the configuration information associated with the application server indicates a type of modification to be made to resource requests with respect to a session identifier; and
formatting the modified resource request in accordance with the configuration information associated with the application server; and
forwarding the modified resource request by the proxy server to the application server that is the target of the resource request.
6. A computer program product on a non-transitory computer readable medium for processing requests to access a set of resources in a distributed data processing system, the computer program product holding computer program instructions which when executed by a processor perform a method comprising:
receiving a resource request from a client at a proxy server, the proxy server providing a centralized session identifier management service for a set of application servers within a domain so that the set of application servers need not manage session state information;
retrieving the session identifier in response to a determination by the proxy server that the proxy server is managing a session identifier that was previously associated with the client by the proxy server;
obtaining a new session identifier and associating the session identifier with the client using information that is managed by the proxy server in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server;
determining the application server that is a target of the resource request;
modifying the resource request by the proxy server to include the session identifier or the new session identifier, wherein the resource request is modified according to a configuration uniquely associated with the application server that is the target of the resource request, wherein the step of modifying includes:
retrieving configuration information associated with the application server of the set of application servers, wherein the configuration information associated with the application server indicates a type of modification to be made to resource requests with respect to a session identifier; and
formatting the modified resource request in accordance with the configuration information associated with the application server; and forwarding the modified resource request by the proxy server to the application server that is the target of the resource request.
2. The method of
in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, obtaining the new session identifier by using an SSL (Secure Sockets Layer) identifier as the new session identifier.
3. The method of
in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, returning the new session identifier to the client as an HTTP (HyperText Transport Protocol) cookie if the client request was an HTTP request.
4. The method of
generating at the proxy server a session identifier for each session between an application server and a client.
5. The method of
7. The computer program product of
obtaining, in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, the new session identifier by using an SSL (Secure Sockets Layer) identifier as the new session identifier if the client has connected to the proxy server using SSL.
8. The computer program product of
returning, in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, the new session identifier to the client as an HTTP (HyperText Transport Protocol) cookie if the resource request was an HTTP request.
9. The computer program product of
generating at the proxy server a session identifier for each session between an application server and a client.
10. The computer program product of
managing at the proxy server a session identifier for each session between an application server and a client.
12. The apparatus of
obtaining, in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, the new session identifier by using an SSL (Secure Sockets Layer) identifier as the new session identifier if the client has connected to the proxy server using SSL.
13. The apparatus of
returning, in response to a determination by the proxy server that the proxy server is not managing a session identifier that was previously associated with the client by the proxy server, the new session identifier to the client as an HTTP (HyperText Transport Protocol) cookie if the resource request was an HTTP request.
14. The apparatus of
generating at the proxy server a session identifier for each session between an application server and a client.
15. The apparatus of
managing at the proxy server a session identifier for each session between an application server and a client.
|
1. Field of the Invention
The present invention relates to an improved data processing system and, in particular, to a method and apparatus for multicomputer data transferring. Still more particularly, the present invention provides a method and apparatus for multicomputer distributed resource management.
2. Description of Related Art
A variety of online information and services are available through the Internet and other networks, and experienced users expect certain functionality to be present with particular online applications. Online applications are typically accessed through web browsers or similar applications that use HyperText Transport Protocol (HTTP) to transfer information between themselves and the online applications.
Various operational issues arise with online applications because HTTP is a stateless protocol in which each server access is considered to be an independent connection. Each subsequent user action within a web page typically results in another request from the client to the server. Any significant user interaction with an online application results in many accesses, i.e. connections, to the server.
Hence, developers of online applications face the issue of determining a method for maintenance of user sessions at the server in order to provide the functionality that is expected by experienced users. The maintenance of session information allows sequential accesses or requests from a single user to be identified as such by a server. Otherwise, a user would be required to repeat certain actions for each subsequent access or request to the online application.
For example, when accessing an e-commerce web site, an experienced user expects a high-quality web site to provide a shopping cart function. A shopping cart application, though, requires the maintenance of a continuous user session at the server so that the server can recognize subsequent or sequential accesses from the user and then return the appropriate information after each access, thereby allowing the user to see previously selected products within the shopping cart. Otherwise, the shopping cart application might re-authenticate the user upon each request to perform an action related to the shopping cart, which would be an intolerable experience for the user.
Various computational mechanisms have been developed to address the inherent limitations of HTTP yet maintain session states for online applications that are accessible through web browsers or similar applications. However, most e-commerce web sites comprise multiple applications, each of which requires the maintenance of session state information.
Therefore, it would be advantageous to have a method and a system that allows multiple related online applications to maintain session states as necessary for themselves while session management across the multiple related online applications is performed in a common manner.
A method, system, and computer program product is presented for providing access to a set of resources in a distributed data processing system. A reverse proxy server receives a resource request from a client and determines whether or not it is managing a session identifier that was previously associated with the client by the reverse proxy server; if so, it retrieves the session identifier, otherwise it obtains a session identifier and associates the session identifier with the client using information that is managed by the reverse proxy server. The reverse proxy server then modifies the resource request to include the session identifier and forwards the modified resource request to an application server.
The novel features believed characteristic of the invention are set forth in the appended claims. The invention itself, further objectives, and advantages thereof, will be best understood by reference to the following detailed description when read in conjunction with the accompanying drawings, wherein:
In general, the devices that may comprise or relate to the present invention include a wide variety of data processing technology. Therefore, as background, a typical organization of hardware and software components within a distributed data processing system is described prior to describing the present invention in more detail.
With reference now to the figures,
In the depicted example, distributed data processing system 100 may include the Internet with network 101 representing a worldwide collection of networks and gateways that use various protocols to communicate with one another, such as Lightweight Directory Access Protocol (LDAP), Transport Control Protocol/Internet Protocol (TCP/IP), Hypertext Transport Protocol (HTTP), Wireless Application Protocol (WAP), etc. Of course, distributed data processing system 100 may also include a number of different types of networks, such as, for example, an intranet, a local area network (LAN), or a wide area network (WAN). For example, server 102 directly supports client 109 and network 110, which incorporates wireless communication links. Network-enabled phone 111 connects to network 110 through wireless link 112, and PDA 113 connects to network 110 through wireless link 114. Phone 111 and PDA 113 can also directly transfer data between themselves across wireless link 115 using an appropriate technology, such as Bluetooth™ wireless technology, to create so-called personal area networks (PAN) or personal ad-hoc networks. In a similar manner, PDA 113 can transfer data to PDA 107 via wireless communication link 116.
The present invention could be implemented on a variety of hardware platforms;
With reference now to
Those of ordinary skill in the art will appreciate that the hardware in
In addition to being able to be implemented on a variety of hardware platforms, the present invention may be implemented in a variety of software environments. A typical operating system may be used to control program execution within each data processing system. For example, one device may run a Unix® operating system, while another device contains a simple Java® runtime environment. A representative computer platform may include a browser, which is a well known software application for accessing hypertext documents in a variety of formats, such as graphic files, word processing files, Extensible Markup Language (XML), Hypertext Markup Language (HTML), Handheld Device Markup Language (HDML), Wireless Markup Language (WML), and various other formats and types of files.
The present invention may be implemented on a variety of hardware and software platforms, as described above with respect to
The descriptions of the figures herein involve certain actions by either a client device or a user of the client device. One of ordinary skill in the art would understand that responses and/or requests to/from the client are sometimes initiated by a user and at other times are initiated automatically by a client, often on behalf of a user of the client. Hence, when a client or a user of a client is mentioned in the description of the figures, it should be understood that the terms “client” and “user” can be used interchangeably without significantly affecting the meaning of the described processes.
With reference now to
The process is initiated when the user requests a server-side protected resource, such as a web page within the domain “ibm.com” (step 152). The terms “server-side” and “client-side” refer to actions or entities at a server or a client, respectively, within a networked environment. The web browser (or associated application or applet) generates an HTTP request (step 153) that is sent to the web server that is hosting the domain “ibm.com”. The terms “request” and “response” should be understood to comprise data formatting that is appropriate for the transfer of information that is involved in a particular operation, such as messages, communication protocol information, or other associated information.
The server determines that it does not have an active session for the client (step 154), so the server initiates and completes the establishment of an SSL (Secure Sockets Layer) session between the server and the client (step 155), which entails multiple transfers of information between the client and the server. After an SSL session is established, subsequent communication messages are transferred within the SSL session; any secret information remains secure because of the encrypted communication messages within the SSL session.
However, the server needs to determine the identity of the user before allowing the user to have access to protected resources, so the server requires the user to perform an authentication process by sending the client some type of authentication challenge (step 156). The authentication challenge may be in various formats, such as an HTML form. The user then provides the requested or required information (step 157), such as a username or other type of user identifier along with an associated password or other form of secret information.
The authentication response information is sent to the server (step 158), at which point the server authenticates the user or client (step 159), e.g., by retrieving previously submitted registration information and matching the presented authentication information with the user's stored information. Assuming the authentication is successful, an active session is established for the authenticated user or client. The server creates a session identifier for the client, and any subsequent request messages from the client within the session would be accompanied by the session identifier.
The server then retrieves the originally requested web page and sends an HTTP response message to the client (step 160), thereby fulfilling the user's original request for the protected resource. At that point, the user may request another page within “ibm.com” (step 161) by clicking a hypertext link within a browser window, and the browser sends another HTTP request message to the server (step 162). At that point, the server recognizes that the user has an active session (step 163) because the user's session identifier is returned to the server in the HTTP request message, and the server sends the requested web page back to the client in another HTTP response message (step 164).
With reference now to
Enterprise domain 170 supports multiple servers. Proxy server 177 performs a wide range of functions for enterprise domain 170. Proxy server 177 can be administratively configured through configuration files and enterprise policy database 178 to control the functionality of proxy server 177, e.g., caching web pages in order to mirror the content from an application server or filtering the incoming and outgoing datastreams through input datastream filter unit 179 and output datastream filter unit 180. Input datastream filter unit 179 may perform multiple checks on incoming requests while output datastream filter unit 180 may perform multiple checks on outgoing responses; each check may be performed in accordance with goals and conditions that are specified within various enterprise policies.
Enterprise domain 170 comprises entitlements server 181, which accepts information within user registry database 182, access control list (ACL) database 183, and third-party datastreams 184 from other domains. Entitlements server 181 determines whether users are authorized to access certain services that are provided by application servers 175 within domain 170 by checking policies and/or access control lists against user requests for those services. A set of user-specific entitlements is used by proxy server 177, entitlement server 181, or a combined or coordinated effort between proxy server 177 and entitlement 181 to determine or control access to application servers 175 and other controlled resources in response to user requests.
The above-noted entities within enterprise domain 170 represent typical entities within many computing environments. As was shown with respect to
The application data traffic in
Hence, developers of online applications face the issue of determining a method for maintenance of user sessions at the server in order to provide the functionality that is expected by experienced users. The maintenance of session information allows sequential accesses or requests from a single user to be identified as such by a server. Otherwise, a user would be required to repeat certain actions for each subsequent access or request to the online application.
Various computational mechanisms have been developed to address the inherent limitations of HTTP yet maintain session states for online applications that are accessible through web browsers or similar applications. However, most e-commerce web sites comprise multiple applications, each of which requires the maintenance of session state information, as described below with respect to
With reference now to
As user 190 accesses resources that are provided by servers 192-195, each server independently performs session management. Each of application servers 192-195 contains an independent session identifier management unit, which are shown as session ID management units 196-199 for servers 192-195, respectively.
Moreover, each of session ID management units 196-199 performs its session ID management operations in a different manner. As mentioned above, various computational mechanisms have been developed to address the inherent limitations of HTTP, which is reflected within
Application server 192 has a session ID management unit 196 that issues cookies for its session ID management scheme. Cookies are used to store information at the user's browser; they are subsequently returned to the issuing domain, which allows e-commerce sites to track user movements and collect other information. Increasingly, the use of cookies is being protested by users who regard cookies as a privacy violator. Some governmental bodies are considering legislation to ban the use of cookies because of these privacy issues.
Application server 193 has a session ID management unit 197 that uses basic authentication headers for its session ID management scheme. In each request, the user's authentication information, typically a username and a password, is sent from the user's browser to the application server, which extracts this information from each request to identify the user. This scheme has several, possibly severe, security consequences because of the significant possibility of password exposure.
Application server 194 has a session ID management unit 198 that uses URL rewriting for its session ID management scheme. This scheme requires that all URL's within the outgoing web pages from the application server to have an associated session ID, e.g., either embedded in each URL or appended to each URL. Hence, URL rewriting requires either pervasive logic throughout the software code of an application server when an outgoing datastream is being generated or extensive modification to an outgoing datastream to embed the session ID's afterward.
Application server 195 has a session ID management unit 199 that uses SSL session ID's for its session ID management scheme, e.g., as shown in
Turning now to focus on the present invention, the present invention is directed to an improved, computational, session ID management mechanism in which session ID management is externalized and centralized with respect to associated application servers within a single domain by placing the session ID management within a reverse proxy server within the domain. The present invention is described in more detail below with respect to the remaining figures.
With reference now to
Proxy server 214 performs a wide range of functions for enterprise domain 200. Proxy server 214 can be administratively configured through configuration files, e.g., caching web pages in order to mirror the content from an application server or filtering the incoming and outgoing datastreams through input datastream filter unit 216 and output datastream filter unit 218. Input datastream filter unit 216 may perform multiple checks on incoming requests while output datastream filter unit 218 may perform multiple checks on outgoing responses.
Proxy server 214 is used as a reverse proxy server. A reverse proxy server is a term for a proxy server that is being used by a service provider to process transactions prior to the receipt of those transactions at typically more than one application server. In this manner, resource requests are routed through the proxy server, thereby directly presenting the proxy server to requesting clients rather than the application servers; in other words, the proxy server acts as a proxying agent for one or more servers. Reverse proxy servers may operate inside or outside a firewall with respect to an enterprise domain.
Other entities may be contained but not shown within the distributed data processing system of
With reference now to
Assuming that the client successfully completes the authentication operation, the reverse proxy server then determines if the client has used SSL to connect to the domain of the reverse proxy server (step 308). If so, then the reverse proxy server is able to use the SSL ID as the session identifier for the new client session (step 310) with respect to resource access within the domain. If SSL has not been used, then the reverse proxy server generates a new session identifier (step 312).
In either case, the reverse proxy server may check whether the client has used HTTP to send the original incoming resource access request (step 314); if so, then the reverse proxy server optionally returns the session ID to the client in the form of an HTTP cookie (step 316). The cookie may be returned to the client immediately, or the reverse proxy may set a flag in association with the client's session information such that a cookie is returned to the client with the next outgoing response to the client. Whether or not the client is using HTTP, the reverse proxy server associates the client with the new session identifier (step 318), e.g., by creating the appropriate data structures to store the session identifier along with any other required information in a form that is accessible by the reverse proxy server.
The subsequent steps are then performed whether the incoming client request is from a client that already has a session with the reverse proxy server, which was determined at step 304, or whether the incoming client request is the first request from the client, which required the creation of a new session as shown in steps 306-318. The reverse proxy server then determines the application server that is the target of the incoming client request message (step 320) by examining the requested URL, or more generally, the requested URI. After determining the target application, the reverse proxy server puts the session identifier into the HTTP request or HTTPS request message in a format that is required or expected by the target application (step 322), e.g., using HTTP headers, a cookie, or some other manner. The modified request message is then forwarded to the target application by the reverse proxy server (step 324), thereby concluding the process.
In one embodiment, the session identifier may be placed into the forwarded message in only one format for all application servers. In a preferred embodiment, the reverse proxy server is configurable through environment variables, databases, configuration files, e.g., as shown in
With reference now to
In one embodiment, the session identifier may be placed into the forwarded message in only one format for all clients. In a preferred embodiment, the reverse proxy server is configurable through environment variables, databases, configuration files, e.g., as shown in
Because all of the outgoing traffic would pass through a reverse proxy server, the reverse proxy server could determine, or possibly be notified by an application, that the user has completed some form of logout process; the reverse proxy server-could then delete the user session.
The advantages of the present invention should be apparent in view of the detailed description that is provided above. A reverse proxy server that operates in accordance with the present invention allows an enterprise domain, such as an e-commerce site, to maintain continuous or persistent user sessions across multiple HTTP connections while eliminating the need for the application servers to manage session states.
One advantage of centralizing the session ID management within the reverse proxy server is that the same session identifier would be used by all application servers with respect to a particular user/client session. Many prior art application servers incorporate some form of functionality for logging their actions within a log file or database with respect to the operations that they perform on client-requested transactions, and this logged information generally includes the session identifiers for the sessions that caused the application servers to perform the identified operations or events. With the present invention, all application servers would log the same session identifier when processing transactions that are related to the same user session. By analyzing the log information, a system administrator or some other type of employee of the operator of the domain can examine the actions of a user over time through multiple applications because the logs would have the electronic tracks or the electronic path of the user based on the user's session identifier. For example, a marketing employee could examine the movement of a user throughout a web site, thereafter determining the effectiveness of attracting a user to particular web pages or determining the efficiency with which a user completes various transactions. Moreover, the electronic paths of multiple users could be compared, possibly cross-referenced with demographic information about the users to determine the usage patterns of users throughout a web site.
It is important to note that while the present invention has been described in the context of a fully functioning data processing system, those of ordinary skill in the art will appreciate that the processes of the present invention are capable of being distributed in the form of instructions in a computer readable medium and a variety of other forms, regardless of the particular type of signal bearing media actually used to carry out the distribution. Examples of computer readable media include media such as EPROM, ROM, tape, paper, floppy disc, hard disk drive, RAM, and CD-ROMs and transmission-type media, such as digital and analog communications links.
A method is generally conceived to be a self-consistent sequence of steps leading to a desired result. These steps require physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It is convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, parameters, items, elements, objects, symbols, characters, terms, numbers, or the like. It should be noted, however, that all of these terms and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities.
The description of the present invention has been presented for purposes of illustration but is not intended to be exhaustive or limited to the disclosed embodiments. Many modifications and variations will be apparent to those of ordinary skill in the art. The embodiments were chosen to explain the principles of the invention and its practical applications and to enable others of ordinary skill in the art to understand the invention in order to implement various embodiments with various modifications as might be suited to other contemplated uses.
Muppidi, Sridhar R., Ashley, Paul Anthony, Vandenwauver, Mark
Patent | Priority | Assignee | Title |
10498831, | Nov 13 2014 | Convida Wireless, LLC | Communication sessions at a CoAP protocol layer |
8315611, | Jan 08 2008 | Synchronoss Technologies France | Communication network for transferring information between a mobile terminal and source servers, and terminal and method for managing the transfer of information in such a network |
8386559, | Sep 06 2007 | Synchronoss Technologies France | Method for exchanging requests between the computer application of a mobile terminal and an instantaneous messaging server |
8856900, | Apr 16 2009 | Synchronoss Technologies France | Method for authorising a connection between a computer terminal and a source server |
8949966, | Oct 26 2005 | Orange | Method and system for protecting a service access link |
9124645, | Oct 24 2007 | Synchronoss Technologies France | Method and instantaneous messaging system for mobile terminals equipped with a virtual presence server allowing an instantaneous messaging session to be managed automatically |
9455960, | Mar 14 2014 | AKAMAI TECHNOLOGIES, INC | Secure application delivery system with dynamic stitching of network connections in the cloud |
9479481, | Mar 14 2014 | AKAMAI TECHNOLOGIES, INC | Secure scalable multi-tenant application delivery system and associated method |
9479482, | Mar 14 2014 | AKAMAI TECHNOLOGIES, INC | Secure application delivery system with security services interface in the cloud |
9491145, | Mar 14 2014 | AKAMAI TECHNOLOGIES, INC | Secure application delivery system with dial out and associated method |
9503447, | Jan 30 2014 | SAP SE | Secure communication between processes in cloud |
9800567, | Mar 31 2014 | SAP SE | Authentication of network nodes |
Patent | Priority | Assignee | Title |
6490620, | Sep 26 1997 | Verizon Patent and Licensing Inc | Integrated proxy interface for web based broadband telecommunications management |
6549516, | Jul 02 1999 | Cisco Technology, Inc | Sending instructions from a service manager to forwarding agents on a need to know basis |
6970933, | Jul 15 1999 | F5 Networks, Inc. | Enabling application level persistence between a server and another resource over a network |
7058600, | Sep 26 1997 | Verizon Patent and Licensing Inc | Integrated proxy interface for web based data management reports |
7139811, | Aug 01 2001 | Cisco Technology, Inc | Double-proxy remote data access system |
7162649, | Jun 30 2000 | International Business Machines Corporation | Method and apparatus for network assessment and authentication |
7185364, | Mar 21 2001 | ORACLE, USA; Oracle International Corporation; Oracle Corporation | Access system interface |
7216163, | May 15 2002 | ORACLE, USA; Oracle International Corporation; Oracle Corporation | Method and apparatus for provisioning tasks using a provisioning bridge server |
7243366, | Nov 15 2001 | Google Technology Holdings LLC | Key management protocol and authentication system for secure internet protocol rights management architecture |
7359933, | Sep 26 2002 | Oracle International Corporation | Providing remote access to network applications using a dual proxy |
20020143856, | |||
20020178214, | |||
20020198883, | |||
20030204645, | |||
20040064564, | |||
20050261985, | |||
20060288212, | |||
20080056494, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
May 06 2004 | VANDENWAUVER, MARK | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014665 | /0971 | |
May 07 2004 | International Business Machines Corporation | (assignment on the face of the patent) | / | |||
May 07 2004 | ASHLEY, PAUL ANTHONY | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014665 | /0971 | |
May 07 2004 | MUPPIDI, SRIDHAR R | International Business Machines Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014665 | /0971 | |
Apr 05 2016 | International Business Machines Corporation | HULU, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 039071 | /0323 |
Date | Maintenance Fee Events |
Dec 09 2011 | ASPN: Payor Number Assigned. |
Aug 21 2015 | REM: Maintenance Fee Reminder Mailed. |
Jan 08 2016 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Jan 08 2016 | M1554: Surcharge for Late Payment, Large Entity. |
Jul 08 2019 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Jun 20 2023 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Jan 10 2015 | 4 years fee payment window open |
Jul 10 2015 | 6 months grace period start (w surcharge) |
Jan 10 2016 | patent expiry (for year 4) |
Jan 10 2018 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jan 10 2019 | 8 years fee payment window open |
Jul 10 2019 | 6 months grace period start (w surcharge) |
Jan 10 2020 | patent expiry (for year 8) |
Jan 10 2022 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jan 10 2023 | 12 years fee payment window open |
Jul 10 2023 | 6 months grace period start (w surcharge) |
Jan 10 2024 | patent expiry (for year 12) |
Jan 10 2026 | 2 years to revive unintentionally abandoned end. (for year 12) |