US20080077982A1 - Credential vault encryption - Google Patents
Credential vault encryption Download PDFInfo
- Publication number
- US20080077982A1 US20080077982A1 US11/765,389 US76538907A US2008077982A1 US 20080077982 A1 US20080077982 A1 US 20080077982A1 US 76538907 A US76538907 A US 76538907A US 2008077982 A1 US2008077982 A1 US 2008077982A1
- Authority
- US
- United States
- Prior art keywords
- user
- reverse proxy
- proxy server
- web application
- pagelet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0281—Proxies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0815—Network architectures or network communication protocols for network security for authentication of entities providing single-sign-on or federations
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/083—Network architectures or network communication protocols for network security for authentication of entities using passwords
Definitions
- FIG. 1 illustrates a reverse proxy system of one embodiment.
- FIGS. 2A-2B illustrates a method of encrypting a credential vault.
- FIGS. 3A-3B illustrates a role abstraction system.
- FIG. 4A illustrates the use of pagelet tags.
- FIG. 4B illustrates a non-invasive way to insert a pagelet that does not use pagelet tags.
- FIG. 5 illustrates the use of interstitial pages.
- FIG. 6 illustrates request/response management
- FIG. 7 shows an exemplary module system.
- FIG. 8A shows an exemplary single-sign-on and authorization system.
- FIG. 8B shows an exemplary interactive system with interstitial pages.
- FIG. 9 illustrates an exemplary request flow system.
- FIG. 10 shows an exemplary deployment of Spnego.
- FIG. 12 illustrates an exemplary auditing API.
- FIGS. 13A and 13B show current and new architectures of one embodiment.
- FIG. 14 shows an exemplary product UI catalog.
- Some embodiments of the present invention may be useful in reverse proxy and Single Sign On (SSO) environments.
- SSO Single Sign On
- FIG. 1 shows an exemplary reverse proxy, single-sign-on environment.
- a user browser 102 can access functionality through the reverse proxy 104 .
- a request for “http://reverseproxy.companyname.com/mail” is sent to the reverse proxy 104 and mapped to a resource 106 at “http://mail.companyname.com”.
- the reverse proxy 104 can be set up to access the web application instances 106 and 108 .
- a reverse proxy can be any system that can do such a reverse mapping.
- a reverse proxy is a server that proxies content from a remote web application to an end-user and may or may not modify that content.
- Supplemental functionalities can include authentication to determine who the user is; authorization to determine if the user has access to the requested resources; transformation functionality to use tags to combine data from different applications, such as web applications and/or rewrite URLs within a response to point to the reverse proxy 104 .
- the functionality can also include gathering analytics and auditing data.
- Authentications and authorizations can be part of a SSO system such that all requests through the reverse proxy 104 only require a single sign on.
- Authorization can be done by having the reverse proxy 104 handle the mapping of users for a web application to roles.
- the web applications can use different roles while the mapping of users to user can be controlled by the reverse proxy 104 .
- different types of authentication can be ranked in order of security.
- the authentication can be used to access the application if the SSO authentication has a security authorization at or above that required by the application.
- the use of a reverse proxy can also allow for centralized governance.
- the reverse proxy can keep a central record of web application usage statistics.
- Single sign on can be enabled by having the reverse proxy 104 send credentials (such as user names and passwords) from a credential vault 110 to the application.
- credentials such as user names and passwords
- the rewriting of URLs can be done by checking the URL for a prefix mapped by the reverse proxy and then converting the prefix to point to the reverse proxy. For example, “http://mail.companyname.com/billing” can be converted to “http://reverseproxy.companyname.com/mail/billing”.
- Adaptive and pagelet tags are discussed below in more detail and are a way to combine functionality from applications.
- a credential vault is any storage location for credentials (such as passwords).
- One embodiment of the present invention comprises encrypting a number of secondary passwords with a primary password.
- the secondary passwords can be passwords to applications accessed through a reverse proxy.
- the primary password can be for a single sign on system such as a reverse proxy.
- the secondary passwords can be stored in a credential vault 202 .
- An encrypted secondary password can be decrypted from the credential vault using the primary password and provided to an application.
- the primary password can be a password to a reverse proxy system or SSO system.
- the secondary passwords can be passwords to remote web applications.
- the secondary passwords can be encrypted with a function, such as a hash, of the primary password.
- a fixed string can be encrypted and stored in the credential vault in the same manner. This encrypted fixed string can be used to test to see if the primary password has changed since the secondary passwords and fixed string have been encrypted. The user can be prompted to input the new and old primary passwords, if the primary password has been changed.
- the secondary password can be decrypted using the old primary password and re-encrypted using the new primary password.
- FIG. 2A shows an example wherein a primary password 201 is used by a main authentication component 204 to authorize a user.
- the primary password 201 can be used to encrypt the secondary passwords stored in the credential vault.
- an encrypted password can be given by:
- FIG. 2B shows the example when the primary password has changed. In that case:
- the encrypted secondary passwords can then be decrypted with the old primary password then re-encrypted with the new password.
- This system avoids the problems of an admin user easily decrypting the credentials of a user. Anything that the system knows, the admin user will generally be able to know as well. For example, if the security system is configured to mutate all stored passwords with the same key, an admin user, who has access to the box running the security system, can decompile the program and figure out the encryption method. The admin user can then apply that decryption method to every password in the credential vault.
- the credential vault password is encrypted with a user's password or a hash of the password, an admin won't have access to a way to decrypt the secondary password. If a user's primary password changes, all credential vault passwords are no longer retrievable.
- the Authenticator can pass the password to Security Service for validation.
- the Security Service can use this password (or a one way hash of this password) to encrypt any passwords that get stored in the credential vault.
- the user's password can be a symmetric key which need not be persisted anywhere.
- the user's password can also be used to encrypt a static string, such as “BOJAMBLES”, which is known to Security Service. This encrypted String can be persisted to the database.
- this password can again be sent to Security Service. If Security Service can log in to the back-end repository with this password, it can do another check. Security Service can use the latest sent password to decrypt the BOJAMBLES string. If the decrypted value is indeed BOJAMBLES, Security Service knows that the user's password has not changed. The security service can now use this password to decrypt every password in User 1 's credential vault using the last sent password. User 1 now has access to all his credential vault passwords for auto-login with backend apps.
- User 1 now tries to access a resource and the reverse proxy server can ask for a login (assuming session expired after password change). User 1 now logs on with the new password. This password gets sent to Security Service. It can validate the password with a back-end repository, then it can attempt to decrypt BOJAMBLES with POKEMONRULEZ. The security service can then realize that the user's password has changed. The security service can then let the reverse proxy system know that the user's password has changed.
- the reverse proxy system can then display a page to the user.
- This page can say something like: “the security service has detected that your password has changed recently. In order to re-encrypt your credentials, please enter both your new and old password. Otherwise, the security service can not be able to re-encrypt your credentials and you can be forced to re-login to all your applications”.
- the reverse proxy system can send the two passwords back to the security service.
- the security service can now be able to decrypt BOJAMBLES with the old password. Once that is validated, the security service can decrypt all of the user's credentials in the vault. The security service can then re-encrypt those passwords with the new password, and also re-encrypt BOJAMBLES with the new password.
- Roles and policies can allow the display and access to data in a flexible manner. Users can be mapped to roles and policies to indicate whether users (as a result of one of these roles) have access to a display or other application resource. A description of one system using roles and policies is given in the U.S. patent “System and Method for Maintaining Security in a Distributed Computer Environment” U.S. Pat. No. 6,158,010 which is incorporated hereby reference.
- One embodiment of the present invention is a way for web applications to use roles without doing the mapping of users to those roles.
- a reverse proxy 302 can maintain role mappings and policies for a web application in a central store 304 .
- the web applications 306 and 308 can be written such that certain roles are defined for the web application.
- One embodiment of the present invention is a method comprising maintaining a central store 304 of application role mappings at a reverse proxy server 302 ; receiving a request for a web application at the reverse proxy server (such as from browser 310 ); determining the proper user role for the web application at the reverse proxy server 302 ; and sending the proper user role as part of a HTTP header 312 to the web application 308 .
- the web application 308 can use the user role without doing an independent mapping of the user to a role.
- the reverse proxy server can interrogate the web application to determine the set of roles used by the web application.
- the reverse proxy server can implement policies to determine a user's access to the web application.
- code for the web application can include a tag to cause the reverse proxy system to insert a second web application into the displayed page. This second web application can use independent user roles.
- the reverse proxy server 302 can look up roles for multiple web applications that are combined into a single presentation to the user.
- Administrators can specify which roles the web application support in the administration UI.
- FIG. 3B shows an example where a user “FrankF” can access a web application 325 only within a specified time period as a result of a mapped role and policy for application 320 .
- the role mapping and policies for “FrankF” can be different for web application 322 than for web application 320 and this can be managed at the reverse proxy server 302 .
- the web application 320 can include a pagelet tag (described below) that cause the proxy server 324 to insert a display from web application 322 into the display for web application 320 .
- Pagelets can be comparable to portlets in that they both contain user interfaces (UIs) that can be displayed in more than one consuming application. But, in one embodiment, there are significant differences.
- UIs user interfaces
- Portlets can only be displayed in one type of consuming application—a portal. In fact, most portlets are written using proprietary code which requires that they be consumed in a particular vendor's portal. Pagelets, on the other hand, are a much more general technology. Any application_when viewed using the runner reverse-proxy can consume any pagelet.
- Portlets often require that the consuming application be written in the same language or on the same platform as the portlet.
- Pagelets can be invoked using XML, a language an platform independent standard, so pagelets and their consumers can be written in different languages and on different platforms.
- Pagelets because of their link to portals, assume a specific environment for resolving security and role questions. Pagelets can generalize the functionality, so that security and roles can be customized for any environment.
- Portlets again due to their link to portals, assume a specific UI paradigm (e.g. view modes). Pagelets require no such constraints. Any standard web technology (i.e. any technology supported by web browsers) can be used to generate any type of UI and that UI will be rendered in the consuming application.
- FIG. 4A shows an exemplary system using pagelet tags.
- the browser 402 provides a request to the reverse proxy system 404 in step A.
- the reverse proxy system 404 can check for authorization based on Roles and Policies as discussed below. Assuming these are good, the request can be rerouted to a web application 406 in step B.
- the first web application 406 can respond with code 408 that includes a pagelet tag 410 in step C.
- the reverse proxy system 404 can determine the pagelet web application 414 based on the pagelet tag 410 .
- the pagelet code can be requested in step D and the pagelet code can be returned in step E.
- the pagelet can be added into a first web application page as a combined presentation and provided to the browser in step F. URLs in the combined presentation can be modified to point to the reverse proxy system.
- the user roles can be sent to the web applications in an HTTP header so that the web application need not do an independent mapping of the user to a role.
- the tags can include a namespace and ID.
- One embodiment of the present invention comprises determining a pagelet web application from a tag in a first web application and inserting the pagelet web application into the display of a page of the first web application.
- a reverse proxy server adapted to receive user request for web application can obtain web application code for the first web application and interpret a tag in the first web application to indicate a pagelet web application.
- Pagelet web application code, from the pagelet web application and web application code, from the first web application can be merged and a combined presentation can be provided.
- One embodiment of the present invention is a non-invasive way to insert pagelets into a web page.
- the web application may be obtained from a third party or it would be otherwise undesirable or difficult to modify the web application code.
- a proxy such as a reverse proxy, can search for an identifier, such as a name or a code pattern, in the web page and then use this identifier to determine whether to insert the pagelet.
- FIG. 4B shows one example of a non-invasive pagelet insertion method.
- proxy 420 keeps a table 422 , or other data structure, that indicates what web page(s) a pagelet is to be inserted into.
- the table 422 can include an indication of the page that the pagelet is to be inserted into and an indication of the pagelet to be inserted.
- the table 422 indicates page “A.JSP” and pagelet “B”.
- page “A.JSP” 424 is obtained by the proxy 420 from source 421 to send to a browser 426 , pagelet “B” 428 can be inserted into the displayed page 430 .
- the table 422 can also include a location indicator that can indicate to proxy 420 where in the web page to insert the pagelet.
- the indication of page and location can be by pattern matching.
- a search string can be indicated and each page with the string can have the pagelet inserted.
- the web page indication can use Boolean operators such as “AND” and “OR”.
- the table 422 can indicate wrapper code for the pagelet.
- the wrapper code indicates that the pagelet is to be inserted into a table on the web page. The use of wrapper code can help the pagelet be used in different display contexts.
- the table 422 can also optionally include attributes that are to be obtained from the page and provided to the pagelet.
- the attribute is a title that is obtained from the web page and provided to the pagelet for display.
- This example shows extraction info and attribute name.
- the string indicated by the extraction info on the web page is given the value indicated by the attribute and then given to the pagelet. More than one attribute/extraction pair can be used to provide attributes to a single pagelet.
- step A a request is received at proxy 420 for the first web application.
- the proxy 420 gets the web application code from the first web application 421 in steps B and C.
- the proxy 420 can then use the data 422 to determine whether a pagelet is to be inserted.
- web page code 424 is a page that a pagelet is to be inserted into.
- the pagelet is obtained from pagelet web application 430 .
- the pagelet 428 (pagelet B) is inserted into page 430 (Page A) to produce a combined application that is sent to the browser 426 .
- One embodiment of the present invention comprises determining a pagelet web application by recognizing a particular page in a first web application to indicate a pagelet web application and inserting the pagelet web application into a pre-configured section of a page of the first web application.
- the first web application page and the location to insert the pagelet web application can be determined either programmatically or by specifying a specific page or location directly.
- This embodiment allows a pagelet web application code to be inserted into a first web application, where the first web application code has not been modified prior to the first web application being proxied.
- FIG. 5 shows an example of an interstitial page system.
- a request from browser 502 is received by reverse proxy 504 in step A.
- the reverse proxy server checks to see if the requested URL is associated with an interstitial page. If so, in step B, the interstitial page 506 is provided to the browser without needing to access web applications 508 and 510 .
- a reverse proxy server can produce interstitial pages to the user.
- the interstitial pages need not be generated with the web application code.
- the reverse proxy can block access to the web application until the specified interstitial pages have been processed.
- the interstitial page HTML can comes from a separate web application. This allows you to write one web application that can provide interstitial pages to many web applications. Alternately, there can be different interstitial pages for different web applications.
- Interstitial pages usually come before you can access the web application, they can come at different points in the login cycle. Interstitial pages can be provided before logging in, and after logging in, in any combination.
- Different interstitial pages can be used for different resources, users, or other conditions.
- At least one interstitial page is used to receive a user password as a warning page and/or a license agreement page.
- the interstitial page can include user info.
- the user need not be signed in to receive the interstitial pages.
- Pagelets can be composed of two basic parts: a front-end pagelet tag and a Pagelet Engine.
- the pagelet tag can be used to insert a pagelet into HTML.
- the pagelet tag can then replaced by a reverse proxy server with the content of the pagelet.
- the Pagelet Engine can be a massively parallel pagelet processing engine that is used to retrieve multiple pagelets from back end resources simultaneously.
- Pagelet configuration information can be persisted in an IPersistentPagelet interface.
- the Pagelet Tag can be a simple tag that can allow one to specify the pagelet ID and include data to be passed to the pagelet. In one embodiment, there can be two kinds of data passed to the pagelet. The first is tag attributes, and the second is an XML payload. Standard XTM tag attributes in the pagelet tag (i.e. not pt: attributes) can be passed to the pagelet directly. The XML payload can allow the HTML author of the consuming page to include more complicated data to be passed to the pagelet.
- An exemplary pagelet tag can look like this:
- Pagelets can be identified by a unique combination of namespace and pagelet name. These values can be constant when pagelets are migrated or moved to different servers. Pagelet names can be unique within a namespace. Namespaces are also known as Pagelet Libraries. Namespaces and pagelets can be concatenated together separated by a colon to provide a unique reference to a pagelet (i.e. financeapp:myvacationhours).
- the namespace can be any text string, such as “financeapp” or “Urn://www.mycomp.com/apps/finance”.
- the namespace can be a part of the pagelet. Namespaces need not be required to be between parent resources as customers may have several near-identical resources that differ only in security that each contains different, but related pagelets from the same back-end resource or multiple back-end resources. This can require a check for pagelet uniqueness within a namespace whenever new pagelets are created or pagelet namespaces are edited.
- a Pagelet Engine can allow the pagelet system to retrieve multiple pagelets simultaneously.
- a client component can create a Request Chain composed of individual Requests.
- Each request can contain all of the information necessary to retrieve a single pagelet. This information can include the ID of the pagelet, the back-end resource URL, the pagelet attributes, and the XML payload.
- the Request Chain can then send off multiple HTTP requests to retrieve the data, and the data can be available to the client component after all requests have returned or timed out.
- the data can then be transformed and converted into a Markup Array.
- the Pagelet Request Flow can involve two passes through the HTML data.
- the first pass can collect the pagelet data and initiate content retrieval, while the second pass can convert the standard Adaptive Tags and replace the pagelet tags with the pagelet data.
- pagelet tags work in place.
- the pagelet tags can be placed in a DHTML area so they can be refreshed individually.
- an HTML page with placeholder data for slow pagelets can be returned.
- the Request Chain can be stored on the session and have it continue to retrieve the slow data in the background. Then, the end users' browser can initiate an AJAX request to the reverse proxy server for the additional pagelet content, which could then be filled in dynamically. This can mitigate the problem of slow pagelets.
- the Reverse Proxy System can manage Primary and Resource Authentication, as well as Primary Authorization.
- the Reverse Proxy System can determine if this user is logged in to the reverse proxy system using the correct authentication method to see this pagelet, whether this user has permission to use this pagelet, and perform Auto-login to remote pagelet servers.
- a login sequence for primary pagelet Authentication/Authorization can look something like this:
- An auto-login sequence for pagelet remote servers can look something like this:
- Remote pagelet data can be checked for login requests by all Auto-login components (i.e. Form, Basic Auth, etc. . . . ).
- Auto-login components i.e. Form, Basic Auth, etc. . . . ).
- Pagelet JavaScript and Style Sheets there are two main requirements for Pagelet JavaScript and Style Sheets.
- the first requirement is that there be a way to put JavaScript and Style Sheets into the Head element of the HTML page.
- the second requirement is that duplicate .js and .css files only are included once per HTML page.
- Pagelet developers can mark their JavaScript & style sheet links to be included in the head using a special JavaScript tag (i.e. ⁇ pt:common.includeinhead>). Pagelet consumers can then need to include a special Include JavaScript Here tag (i.e. ⁇ pt:common.headincludes>) in the Head element of their HTML page. Pagelet JavaScript from the include-in-head tags can then be included in the output of the Head Includes tag. The Includes tag can also filter out duplicate .js and .css files.
- a special JavaScript tag i.e. ⁇ pt:common.includeinhead>
- Pagelet JavaScript from the include-in-head tags can then be included in the output of the Head Includes tag.
- the Includes tag can also filter out duplicate .js and .css files.
- the head includes tag can be optional. If the tag is not present, then JavaScript and cascading style sheets can be added at the end of the head tag in the main page. If the main page does not have a head tag, a head tag can be added at the beginning of the page. This can require the Transformer to identify the head element when parsing the page.
- the headincludes tag can be used when control over the insertion of the pagelet JavaScript and Security Service within the head element is required. There need be no way to specify the order of includes from various pagelets.
- the includeinhead tag can work within a pagelet to add Style Sheets and JavaScript to the main page, but it can also be used directly in a main page.
- the includeinhead tag filters Style Sheets & JavaScript file includes to remove duplicates
- a main page developer could include their Style Sheets & JavaScript includes in the includeinhead tag, which would ensure that there are no duplicate files included from the pagelet and main page.
- the includeinhead tag does not function in in-place refresh pagelets.
- the includeinhead tag can be ignored during in-place refresh of a pagelet. This means that a pagelet author can use the includeinhead tag to insert JavaScript libraries into the main page the first time the pagelet is displayed on a page, but that the JavaScript libraries can not be re-included during in-place refresh of the pagelet.
- transformURL function In transparent proxy mode, the transformURL function is only be used on pagelet content; general resource content doesn't need it. In non-transparent proxy mode, transformURL function is needed for all Javascript URLs.
- the reverse proxy server code can automatically insert to include the transformation Javascript library, as well as an initialization Javascript statement similar to the PTPortlet constructor in portal.
- In-place-refresh libraries by default, pagelet content need not be set to in-place-refresh; by using an inplacerefresh tag, pagelet developers can turn on in-place refresh (IPR). With IPR turned on, all URLs within pagelet content are prefixed with JavaScript which does in-place refresh.
- IPR in-place refresh
- IPR If IPR is not turned on, they can manually insert the inplacerefresh tag around a URL to transform that URL into in-place-refresh link. (This tag can be applied to URLs in resource content as well).
- the reverse proxy server can automatically insert the Javascript includes for in-place refresh on the page.
- the developer can add an inplacerefreshjslibrary tag on a resource or pagelet to make the reverse proxy server insert the in-place refresh libraries. Then the developer can be able to use the .refresh calls that Scripting Framework libraries provide.
- In-place refresh Javascript libraries can also contain Javascript Session Prefs functions in them. So if a resource uses session prefs, it can include the inplacerefreshjslibrary tag to tell the reverse proxy server to include in-place refresh Javascript libraries.
- Javascript library which does only transformation can have the following functions:
- Pagelet discovery can include retrieving a list of available pagelets and the following data about each pagelet:
- Pagelet consumer developers can go to an HTML page to find pagelet information. Pagelet developers/administrators can have the option of removing pagelets from this list. In one embodiment, since consuming resource security checks cannot be handled automatically, the list of allowable consumer resources should be included on the page.
- this UI need not be hosted as part of the reverse proxy server, but should rather be combined with the login server. This can be available through a known URL, which can then be exposed through the reverse proxy server if desired.
- the reverse proxy server should come with a pre-configured resource that point to this known URL, although by default no one should be able to access the resource.
- Accessing the Pagelet Catalog UI need not require the reverse proxy server admin user login, although it can be secured via basic auth with a static user name. This security should be easy to disable.
- the pre-existing resource can be setup to auto-login using the static user name.
- This UI can be a simple set of jsp or jsf pages that access the reverse proxy server database and display the pagelet information. Ideally, this UI can also be available to be copied and hosted on a developer website or other location. However, since the pages can be dynamic, that can require the pages to be crawled or manually saved from a browser. The index links can also need to be rewritten to point to static pages.
- the UI can include both dynamic pagelets, and the tag libraries included with the reverse proxy server.
- the pages need not be cached and can access the database for every page view.
- Pagelets can be discoverable programmatically. This can allow an application (such as Holland) to discover which pagelets are available to the current user. Since pagelet security is enforced programmatically, pagelet developers/administrators need not be able to remove their pagelet from this list (via the Publish checkbox). Since the Pagelet Discovery Client can always be running inside the context of a the reverse proxy server resource, the results can only contain pagelets that can be consumed by the current resource.
- a simple Java only API in the client can be provided that can allow an application to query for the available pagelets for the current user in the current request.
- the API can do automatic filtering of the results based on user access and consuming resource restrictions.
- the API can also allow filtering of the pagelet results based on other criteria, such as last modified.
- the queries can return either basic information about the pagelet, such as it's name and description, or full information for the pagelets.
- the queries can be processed by a simple the reverse proxy server based web service on the Admin UI box.
- the web service can require a valid the reverse proxy server security token from the client.
- the web service can query for the pagelets available to the consuming resource, and then evaluate the Security Service security policies for the pagelet parent resources to see which ones are visible to the user in the current request.
- the current request information i.e. user, IP, time, etc. . . .
- the client can be passed by the client to the web service.
- the EDK on the remote resource should already have all of the request headers and information necessary.
- the pagelet information can be published to a secured registry for programmatic discovery and IDE integration.
- Pagelet Discovery Web Service APIs can be exposed as a client-side API similar to the Embedded Development Kit (EDK).
- the client can be Java only and a Java Archive (JAR) can be provided as one of the reverse proxy server build artifacts.
- JAR Java Archive
- the underlying transport can be done by turning the PageletManager query class into a web service using RAT.
- the web service can return all query information in a single response, rather than sending individual requests for pieces of data. This means that a pagelet query could theoretically be quite expensive.
- the best practice for querying can be to query for pagelet info for large numbers of pagelets, and then query for the entire pagelet information for an individual pagelet, or a small number of pagelets.
- developers can be able to specify an XML payload within a pagelet tag. That payload can be transferred to the remote tier over HTTP, within the HTTP request for the pagelet content.
- the payload can be sent in the body of a POST request—in our opinion, as discussed above, the pros overweigh the cons.
- Other CSP data can be sent in HTTP headers, as in previous protocols.
- Non-payload pagelet requests can be sent as GETs; requests with payload can be sent as POSTs.
- sample pagelets can demonstrate the following principles/practices:
- sample pagelet code can look something like the following, although this is not a definition of the IDK API.
- the pagelet components list can include components that are used exclusively during pagelet processing, as well as other modules that are involved in the pagelet processing lifecycle.
- the Tag Engine can process both tags and pagelets.
- the Tag Engine Module can use the Tag Engine shared component to process the tags, and then processes the pagelets. This module can control the overall pagelet flow, utilize other components, and delegate processing to other modules.
- retriever can be used both for pagelets and regular resource requests. Retriever can know what type of request it is (through an argument passed to it) and may do some things differently (create multiple parallel requests for pagelets vs. only one for resources; different timeout; pass through different parameters to CSP library, etc).
- the reverse proxy server can support CSP features both on resources, and on pagelets.
- the reverse proxy server can support a subset of the portal's CSP features.
- CSP library (not a module) created which can handle adding/processing of CSP headers.
- This library can be called by retriever can appropriate arguments.
- User Info, Roles, user id, user name, login token can be available off IProxyUserSession interface.
- Session Prefs can be available from ISessionPrefs interface.
- IRunnerResource object can contain a list of user info prefs, session prefs, login token sending info to send to remote tier.
- ImageserverURI and Consuming Resource URI can be passed into the CSP library by the retriever.
- CSP libraries can have different modes: regular (resource); pagelet, and in-place-refresh. The mode can be passed in by retriever.
- pagelet data When pagelet data is retrieved from the remote server, it can be checked for login pages. This could happen the first time a remote server is accessed by a particular user, or if the session times out.
- the Auto-login Module can identify and process remote login pages for a resource, including pagelets.
- the Auto-login Module can run during the onTransformContent phase and process all remote responses for login pages. Since pagelet processing essentially duplicates normal page processing many times on a single page, the Auto-login component can be broken out into separate classes so that it can be used by both the Auto-login Module and the Pagelet processor (TagEngine Module). This can include both form based login and basic auth login.
- the Auto-login component can be used to check all pagelet responses for login pages. If login pages are detected, the module can be used to generate a login request for the remote resource. This can then be processed using the Retriever. The response can be checked again for login pages and used in place of the original response once the login cycle is finished.
- pagelet responses can be checked for login pages, and then all login pages can be processed in parallel. Even though this is done in parallel, the login cycle for each pagelet could comprise multiple pages, which may mean all pagelets would have to wait until the pagelet with the longest login cycle had finished. A pagelet login is expected to be infrequent so this should not affect normal pagelet usage very much.
- the Auto-login Component (& Tag Engine) can display the login page to the user so they can login successfully.
- the Auto-login Component then needs to capture the login information from the user's request, store it in the credential vault, and then process the originally requested page.
- the Pagelet Discovery API can be a standalone web service. It can be deployed to the same embedded Tomcat server as the Admin UI and Login Server. There can be a Java-only client similar to the EDK.
- the Pagelet Catalog UI can be a simple set of JAVA Server Pages (JPS) Java Server Faces (JSF) pages that display a list of available pagelets and a detail view for pagelet information. This can be setup so it can easily be configured to be either protected by basic auth with a static username/password or unprotected.
- JPS Java Server Pages
- JSF Java Server Faces
- the UI can be a combination of static HTML pages generated by our tagdocs utility, and jsp/jsf pages to view the pagelets.
- the static tagdocs index can be included as a jsp include into the complete index.
- the PageletListBean and the PageletViewBean can handle data access using RMS.
- the reverse proxy server can provide both its own unique tags, as well as extensions to the common tags provided by the Portal. It can also provide the set of portal tags specified in the PRD. In order to maximize interoperability between pagelets and portlets, the portal can be upgraded to include the new common tags. The portal can also know to ignore the reverse proxy server tags, rather than treating them as an error.
- Exemplary Reverse Proxy Server tags can be included in the tag library:
- Tag authsourcedata Description This stores a list of available auth sources for the currently requested resource in memory.
- the data is stored as a collection, and each item in the collection is a data object containing information about the auth source (id, name, description) accessible through the data object dot notation ($curauth.name).
- Attributes id The key used to store the data list in memory . . . scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- Tag resourcelink Description This stores the URL to a specific resource, if available, in memory. Attributes resourced The resource ID. id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag resourcedata Description This stores a list of resources in memory that are available to the current user.
- the data is stored as a collection, and each item in the collection is a data object containing information about the resource (id, name, description, url) accessible through the data object dot notation ($curresource.name).
- Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- Tag inject Description This tag is replaced with the output of the specified pagelet. Attributes namespace The pagelet namespace. id The pagelet ID.
- Tag pageletaccessdenied Description This tag displays a custom “access denied” error message when a user does not have proper security to see a pagelet. If this tag does not exist, a generic “access denied” message can be displayed, otherwise the contents of this tag can be shown. Attributes
- the pagelet tag is simply the way to add a pagelet to an HTML page.
- Tag roledata Description This stores a list of the roles in memory that the current user has available. The data is stored as a collection, and each item in the collection is a variable containing the role name. This can be used with the foreach tag to iterate over role data. Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- Tag roleexpr Description This tag evaluates a role expression and stores the result in memory. It is designed to work with the logic.if tag. Attributes expr An expression consisting of the hasRole keyword followed by an application role. This expression evaluates whether or not the current user has the specified role. key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag picker Description This tag selects a user/group/role and passes the result to the specified JavaScript function. Attributes form The form of the HTML element to display (link, button, or URL). If the form is URL, anything nested within this tag can not be displayed. Default is link. type The type of object to select (user, group, or role). multi A boolean specifying whether or not the user can select multiple items. Default to false. Jscallback The JavaScript callback. This method can be passed a 2d javascript array containing the type (user, group, or role), name, and ID of each selected item.
- This tag can output an HTML element that can display a pop-up page containing the picker.
- the picker can be a simple list with filter box, similar to the ones used in the reverse proxy server admin UI.
- This tag may or may not be included in the reverse proxy server, depending on details of the Analytics integration.
- Tag Analytics Description This sends an analytics event to the analytics server. Attributes Id The event id. Data The event data.
- Tag debug Description These outputs debug information about the current roles or experience definitions (i.e. how did you get the current role and/or login page). Attributes Type The type of debug info to display (role or experience definition).
- the reverse proxy server In-place Refresh Tags
- Tag inplacerefresh Description This tag enables or disables in-place refresh on the current page. Attributes enable ‘true’ enables in-place refresh. ‘false’ disables in-place refresh. If this attribute is not present, in-place refresh is enabled for the contents of the tag, and then the previous in-place refresh setting is restored.
- Common tags can be shared between the reverse proxy server and portal. They can include new tags (with the reverse proxy server specific implementations) and enhancements to the pre-existing general tag libraries for specific the reverse proxy server needs.
- Tags can be used for doing conditionals using tags.
- a variety of expr tags (such as the roleexpr tag) can store Boolean results for use by the if tag. This can simplify the if tag, and avoid the problem of having to figure out if the expression is an integer expression, a role expression, or something else.
- the corresponding if-true and if-false tags do not have any attributes. They are simply displayed or not displayed depending on the results of the tag expr parameter.
- Tag iftrue Description This tag is displayed if the surrounding if tag evaluates to true.
- Tag iffalse Description This tag is displayed if the surrounding if tag evaluates to false.
- Tag boolexpr Description This tag evaluates a boolean expression and stores the result in memory. Attributes expr A boolean value or a tag variable, followed by a boolean comparator, and then another boolean value or tag variable. The tag variables must evaluate to a boolean and be in $ attribute notation surrounded by parentheses. The following operators are allowed: ‘&&’, ‘
- the collectionlength tag can be necessary to enable conditional logic based on how many auth sources or resources are returned (i.e. empty, a single item, or a list).
- Tag collectionlength Description This tag evaluates the length of a collection and stores the result in memory. Attributes data The key used to store the collection. key The key used to store the result in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- This tag can be converted for use with the collection tag so that you can create collections of variables, in addition to collections of data objects. This can be useful for the rolesdata tag.
- the collection tag can also need to be updated to mention the new related child tag, as well as a warning not to mix data types in a collection.
- These tags can allow the reverse proxy server errors to be formatted as desired on a custom error page. There are two ways to implement this. The first can require either adding an API to the Tag Engine to allow the reverse proxy server to set error messages for a user. The reverse proxy server can then need to set the error information before displaying an error page to the user. The second involves implementing the reverse proxy server specific error tags that meet a common error tag API specified by the tag engine.
- Tag error Description This tag displays errors on the page so that they can be placed and formatted as desired. If the errortext tag is included inside this tag, the contents of this tag can only be processed if there is an error. If the child tag is not present, then the error messages can be formatted and displayed from this tag in the standard style.
- Tag errortext Description This tag displays the current error text on the page so that it can be placed and formatted as desired. Attributes text This attribute allows you to override the error text with text of your own choosing.
- Tag errorcode Description This tag stores the error code in tag memory. Attributes key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info.
- Tag includeinhead Description This marks JavaScript & Security Service links to be included in the Head element of the HTML page by the headincludes tag. If no headincludes tag is present, it can be included at the bottom of the Head element, or a Head element can be inserted if there is none. If a .js or .css file is marked for inclusion multiple times, it can only be included once. This tag can be ignored during automatic in-place refresh requests, although custom in-place refresh solutions can need to remove this tag during refresh to function correctly. Attributes
- URLs for various links in the HTML returned by resources are transformed in the reverse proxy mode, but not for transparent proxy mode.
- URLs can be rewritten in the transparent proxy mode—Javascript refresh can have the same domain, machine name, and port as the main page, otherwise ugly browser warnings appear.
- Another reason for rewriting URLs is branding: customers want a consistent URL experience for their users in the URL. (i.e. machine name/host doesn't change).
- a “mini-gateway” for URLs inside pagelets can be used, both in transparent and reverse proxy mode. All URLs within can be rewritten with a following scheme, like the following:
- Consuming resource with an external URL: http://runner.bea.com/crm/ can include a pagelet.
- Pagelet's parent resource can have internal URL: http://collab.bea.com/ and its ID in the reverse proxy server DB is 15.
- Pagelet has internal URL http://collab.bea.com/discussion/pagelet.jsp. Within the pagelet, there can be a link to http://collab.bea.com/discussion/viewthread.jsp.
- mini-gateway can be a resource mapper which extracts resource ID from the URL and sets the appropriate resource on IntermoduleData. On pagelet URLs, it gets called instead of the regular resource mapper.
- Embodiments of the present invention can provide a proxy and SSO solution that interoperates with a portal product.
- there can be three major components to: proxy, administration console, and core resource API. These can be called RProxy, Admin Console, and Core API respectively.
- RProxy can support two modes of operation: reverse and transparent. These two modes can interoperate seamlessly. The end user only needs to be aware of when DNS changes are needed; they do not need to know about the distinction between transparent and reverse proxies.
- RProxy can map resources based on the first part of the destination path in a request. For example, if a user requests proxy.external.com/resourceA/somepage.html then, according to user defined rules, the reverse proxy server map that traffic to resourceA.internal.com/somepage.html. This mode of operation requires content rewriting so that URLs in the HTML returned from a resource point to the reverse proxy server and not to the resource itself.
- Transparent proxy mode can use DNS configuration such that IP addresses of the desired, external hostnames point to RProxy. In this configuration, RProxy can use the request hostname to determine where to redirect traffic.
- www.resourceA.com can have an IP address identical to proxy.external.com, and RProxy can accept a request to www.resourceA.com/somepage.html and redirects it to the internal address resourceA.internal.com/somepage.html—HTML content rewriting is required in this case.
- RProxy may map the resource to the internal address 192.168.1.2 and this host is configured with the hostname www.resourceA.com—in this case HTML content rewriting is unnecessary because the host resource A is configured using its externally facing DNS name, www.resourceA.com, which has a external DNS address mapping to the same IP as proxy.external.com. That is, www.resourceA.com returns URLs that point to itself at www.resourceA.com (instead of returning URLs that point to an internal hostname).
- www.resourceA.com has an IP address identical to proxy.external.com and www.resourceA.com/appB is mapped to resourceA.internal.com/appB.
- the users should be aware from the UI and from logs that a true transparent proxy case requires adding a new, internal only DNS entry that map to the internal IP address.
- mail.ford.com can have an external IP address identical to RProxy.
- the protected resource can have a hostname of mail.ford.com as well.
- the user can manually add a DNS entry for an arbitrary internal hostname, say mail.internal.ford.com and map it to the internal address, say 192.168.1.2.
- an RProxy Resource When they configure an RProxy Resource, they can specify that mail.ford.com maps to mail.internal.ford.com.
- the machine mail.ford.com can retain its hostname internally and externally (so no URL rewriting is needed), and RProxy can know how to properly redirect the traffic.
- stages can be conceptually the same for any kind of request, in other words, no matter if the reverse proxy server received an upload request or download request, WebDAV request or Secure Sockets Layer (SSL) request—the logical stages that the request has to go through can be the same.
- the behavior of each of the stages could be different for different kind of requests. For example, transformation stage does not do anything for responses containing binary data (images/word documents/etc). Another example is that URL re-writing rules are different for normal pages and pagelet responses.
- a FormPickerModule can responsible for detecting login forms served by remote applications and automatically logging the users into those apps. In order to do this, it can add data to the request (retrieval stage) and examine the date of the response (transformation stage).
- RProxy can manage ACLs on Resource Objects to determine if a user (who has already authenticated with RProxy via SSO login) has access to a requested resource.
- the reverse proxy server uses Role Based Access Control (RBAC), based on users, groups, and roles as defined below.
- RBAC Role Based Access Control
- a rule can be created that says, “If a user is from IP address range 192.168.0.1 to 192.168.0.254 then always allow access.” Or, “if a user is accessing this from 8 am to 5 pm, allow access, otherwise deny.” Custom rules are the most likely use of scripting.
- RProxy can accept X.509 (PKI) certificates when establishing SSL connections with remote resources. There need be no certificate management for remote resources. Client certificates between RProxy and the browser user can be supported using SSL/TLS in the web application server itself. We can not support certificate configuration per resource.
- PKI X.509
- Single Sign On can enable a user to login to RProxy once and not login again until their SSO session times out or is explicitly logged out.
- SSO encompasses every aspect of login, authentication, interactive login pages, experiences, and rules.
- There are several different kinds of primary authentication i.e. form, 3 rd party SSO, basic auth, etc. . . . ), and different resources can require different kinds of authentication depending on their desired level of security.
- FIG. 8A shows exemplary single sign on and authentication.
- FIG. 8B shows exemplary interactive login and interstitial pages.
- a login page can be presented that allows the user to input their username, password, and specify an authentication source. Authentication may instead be automatic, as can be the case with Windows Integrated Auth.
- an SSO cookie can be set that indicates the user has a valid login to the system, and the user should not be prompted for login again until this expires or the user can be logged out.
- Authentication sources can be portal specific and can supported via a tag that users can put into their login page.
- RProxy supports WML login pages through complete replacement of the login form, as described below.
- Anonymous access can use the same access and authentication mechanisms and need not be special cased within the code. Anonymous access does not require user authentication.
- the reverse proxy server it can be not possible to create new users because the security service can be implemented using the portal.
- SSO Login supports kiosk mode: “is this a public computer?” When enabled, this causes cookie deletion under certain conditions (e.g. browser close) that might not otherwise occur. This can be similar to Outlook web access shared computer versus private computer.
- SSO Login supports kiosk mode through ssoconfig.xml. Users can disable the usage of cookies by specifying negative timeout values. Specifying a negative timeout value can cause the cookie to expire when the browser closes.
- kiosk mode and cookie expiration may be moved from ssoconfig.xml to the experience definition.
- RProxy can allow customers to completely replace the login page UI. This can be accomplished by configuring an experience rule through an administrative UI to use a specified remote login page instead of the default page. This remote page can then be free to provide different experiences for users based on their locale, browser-type (i.e. wml/BlackBerry), requested resource, etc. . . .
- Login pages can be hosted on a remote server called the login server and the user can create new, custom login resources and experience definitions that refer to any remote host.
- RProxy can provide access to the original HTTP Request information. This information can be used to determine what kind of page to display.
- the reverse proxy server can ship with sample experience definitions available in both JSP and ASP.NET. Those pages can include login, usage agreement and error pages. These pages can be internationalized.
- Any complicated pages can have both a simple version (installed on the reverse proxy server) and a complicated version that can not be active when shipped.
- the simple login page can prompt for the username and password. Depending on how many auth sources are available for the current resource, it can either store the auth source as a hidden input or display a drop down for the user to choose an auth source.
- the complicated login page can choose one of several login pages based on the user's request (i.e. from what subnet, in what language (this can only be a comment), what type of browser—blackberry).
- a guest user can have a distinct identity and may have user profile data.
- An anonymous user's identity can be unknown, though we may know key information such as their IP address.
- An anonymous user can not have user profile data or a credential vault. Both anonymous and guest users have session data (and thus, “session prefs”). Guest users need not exist in the reverse proxy server. There need be no way to create a new user in the security service.
- SSO logout occurs when a user clicks on a logout link that can be specified by an URL pattern for a resource.
- This URL pattern can be configurable through the admin UI. When this URL pattern is matched, the SSO logout procedure can fire. After that procedure is completed, the user can be redirected to the SSO logout page URL specified on the experience definition.
- cookies which manage/persist/recreate user sessions in the reverse proxy server: PTSSOCOOKIE and PERSISTEDPTSSOCOOKIE. Both cookies have timeout values that are configurable in ssoconfig.xml. The user can disable the use of both cookies by specifying a negative timeout value. Positive values for the timeout of these cookies can force them to be persisted to the user's hard disk.
- PTSSOCOOKIE This cookie can be designed to be short-lived. The duration of this cookie can be enforced by linking HttpSessions to this object via a relationship managed by the LoginTrackingService. The relationship can be managed by the LoginTrackingService because this is the only object in the reverse proxy server that really manages application-scoped variables.
- application-scoped variables can be the only way to track and persist data across domains.
- HttpSession When a user's HttpSession expires (this can occurs when the user is not actively using this httpSession), the death or invalidation of this HttpSession can be intercepted by a session listener called RunnerHttpSessionListener. This session listener can query the LoginTrackingService for all the active HttpSessions bound to this user. It can then remove the HttpSession which just expired. If after that, there are no active HttpSessions left for this user, the user can be removed entirely from the LoginTrackingService and the user's SSO session can have effectively expired. This can make it impossible for a user to reconstruct the reverse proxy server session by sending a PTSSOCOOKIE.
- PTSSOCOOKIE can be essentially linked to active HttpSessions.
- the removal of a user from the LoginTrackingService/Map triggered by the lack of active HttpSessions can be a weak form of logout. That means that if a PERSISTEDPTSSOCOOKIE is available (i.e., ssoconfig.xml has a positive value for this cookie's expiration and the user possesses one), the user's session can still be restored if the reverse proxy server receives a PERSISTEDPTSSOCOOKIE. However, if the timeout for PERSISTEDPTSSOCOOKIE is negative, then the removal of a user from the LoginTrackingMap can effectively force a user to log in again for his next reverse proxy server request.
- PERSISTEDPTSSOCOOKIE can be designed to be a long-term cookie (such as 1 week). The cookie's expiration can be managed in two places: 1) on the cookie itself through the Cookie class, and 2) via the LoginTrackingService. We have redundancy to remove or mitigate the risk of a user being able to hack his cookie and extend the lifetime of his cookie. We achieve this by simply tracking the username and session expiration date on the LoginTrackingService. When a user sends a PERSISTEDPTSSOCOOKIE, that cookie's expiration time must validate against the LoginTrackingService before the server proxy server can recreate the user's session.
- PERSISTEDPTSSOCOOKIE need not be linked to a user's active HttpSession(s). Therefore, a user may not log into the reverse proxy server for a few days and still be able to use his PERSISTEDPTSSOCOOKIE to rebuild his previous reverse proxy server session. That can be the primary function of this cookie. It can be designed for low-security environments.
- URL PATTERN LOGOUT When an URL pattern is detected as being a SSO logout URL, a user can be strongly logged out. This means that the reverse proxy server can go in and invalidate all known HttpSessions the user has registered. The reverse proxy server can also clear the user out of the LoginTrackingMap, which disables the recreation of a user's session via PTSSOCOOKIE. The reverse proxy server can finally set an expiration date to some time in the past in LoginTrackingService, which can disable the recreation of user session via PERSISTEDSSOCOOKIE.
- SSO login can perform authentication behind the scenes so that Active Directory, LDAP, and other identity source can be used to verify a username, password and other login credentials. The user can be unaware this is occurring; then merely login to the reverse proxy server.
- RProxy can delegate to the Security Service for authentication via an authentication source, such as Active Directory or the portal user database.
- an authentication source such as Active Directory or the portal user database.
- RProxy can Provide Intrinsic Support for Basic Auth.
- PRD PRD
- primary authentication these are the authenticators that fire from the proxy to a user's browser. They can be top level object and their authentication level and name can be changed. The order can be Currently, there can be a 1-to-1 mapping of authenticator to matching experience definition.
- RProxy can provide a useful integration story for existing Windows Integrated Auth, Netegrity, Oblix, and other customers that have preexisting SSO solutions.
- Windows Integrated Auth and Netegrity/Oblix integration can occur via external authenticators.
- WIA For WIA, the idea can be to write a web application for lls and enable WIA for that application.
- the application itself knows how to receive forwarded request from the reverse proxy server, authenticate the WIA user with the security service to generate a login token, the forward the login token back to the reverse proxy server to perform linegrated authentication to complete SSO login.
- FIG. 9 illustrates an exemplary request flow.
- FIG. 10 shows an exemplary deployment of Spnego.
- Diagram components can be briefly summarized. Further details can follow and are available on this wiki page.
- WIA between the browser and RProxy requires sticky sessions or the browser would re-authenticate each time with RProxy.
- WIA between RProxy and remote resources in IIS requires cached connections identified by user, so the SSO cookie must have secure user information that cannot be spoofed.
- RProxy can detect that a user needs to be integrated against an SSO solution, the user can be forwarded to a remote servlet specified in the UI. That servlet can manage the interaction with the SSO product and retrieve the SSO credentials. These credentials can then be passed back to RProxy through headers. RProxy cab then create a new user session using those credentials.
- An Experience Definition can contain a number of properties that can be used by the reverse proxy server to determine the user's experiences related to the user's primary authentication to the reverse proxy server (authentication source, login page, interstitial pages, etc), before an unauthenticated user can access a protected the reverse proxy server resource.
- An experience definition can be selected based on rules (experience rules), using conditions such as which resource being requested, the IP address of the request origin, and/or other supported condition types.
- Each experience rule refers to multiple resources that it can apply to.
- the experience rule contains at least the following:
- Logging resource Default Login Resource Associated resources: Resource1, Resource2, ResourceN Basic Auth, Interactive Login Page.
- Login resource this can be a normal resource under the covers but it has additional restriction. Its external URL determines where the user can be redirected to in order to begin the login sequence.
- Associated resources these are the resources that the experienced can apply to.
- Associated proxy authentications these are the authenticators that can fire if the experience is selected.
- the interactive authenticator always fires last.
- this suffix can be appended to the external URL prefix of the login resource to determine the loginpage endpoint, which can be where users are redirected at the start of the interactive login.
- Post logout external URL this URL can be visited after SSO logout occurs. If it's not specified, the user can be redirected to the original requested resource (then the SSO login sequence begins anew).
- the experience delimitation's external URL login path, /login above, can be reserved by the login resource. This prevents any other resources from mapping to the login path(s).
- the login and interstitial pages can make decisions about what to display to a given user/request (such as the language based on User-Agent, what style of page based on IIP addresses, etc.).
- RProxy can provide the login and error pages with relevant information: the original request headers, requested resource information, et al.
- the primary login hostname can be proxy.runner.com.
- HTTP headers can be used to communicate information between RProxy and the login/interstitial/error pages. This can be similar to the CSP headers used between the portal and portlets. All relevant request information can be forwarded from the user's browser to the login pages via HTTP headers, such as User-Agent and IP address.
- the reverse proxy server can authenticate the user to the back end-resource:
- the reverse proxy server can not authenticate the user to the back-end resource. This handles the case of anonymous access back-end resources, as well as the case where a company, due to security concerns, does not want the reverse proxy server to manage user passwords in its Credential Vault.
- the reverse proxy server can provide a way to authenticate a user using basic/digest authentication. This involves detecting the authentication challenge header in a resource response and resubmitting the request with the appropriate user credentials. This can be essentially a simpler version of the Form based Authentication solution described below.
- the Basic/Digest Authentication for a resource can check the HTTP headers of resource responses looking for authentication challenges. If a challenge is detected, the user's name and password can be supplied to the resource without the user seeing the challenge. If the response comes back again, meaning that an incorrect name or password was supplied, then the challenge can be passed on to the user. Once the user responds to the challenge, the reverse proxy server can add that username and password to the Credential Vault, if it is configured to be used.
- the administrator can configure the username and password, similar to the form fields in Form based Authentication. There are three possible ways to fill out these values:
- Form based Authentication can be the most common form of login for web applications, although many enterprise web applications use some kind of SSO technology.
- the reverse server proxy can detect login pages, automatically fill them out and display the final page without bothering the user. If there is a login failure, the reverse proxy server can display the login page to the user and then store the credentials the user fills out for later use. This can be essentially a multi-app “Remember My Password” feature.
- the reverse proxy servers feature can be a lot more generic than that.
- the reverse proxy server can detect particular pages and issue GET or POST requests in response to those pages, thus simulating a particular user action.
- Login pages are defined on the resource level by the administrator. Administrators can define several login pages. When defining a login page, the Administrator has to enter the following information:
- the reverse proxy server can allow defining multiple login pages for a single resource.
- Login pages are defined by 3 attributes: Login Page URL Pattern, Login Action URL and Login Page Text Pattern. Out of these 3 attributes only two are used during detection phase. Those are Login Page URL Pattern and Login Page Text Pattern. Login Page URL Pattern can be used to detect login pages based on the URL. For example, you know that the URL for the Plumtree portal's login page always looks like
- Login Page Text Pattern can be a regular expression written using Java RegEx rules. When this field is specified, the reverse proxy server can check every page returned from the remote server to see if it matches the specified regular expression. For example:
- the above regular expression can be used to detect login pages on the AmazonTM website. Basically, it looks for the form on the page with action URL that has a word sign-in in it. Notice the parenthesis; they are used to define a group within the regular expression. This means that when the reverse proxy server encounters a login form on the page that looks like this:
- the Login Form POST URL can be dynamic.
- the reverse proxy server can allow an administrator to leave the Login Form Action URL field blank when defining the login page and instead specify a regular expression that would extract the Action URL from the action attribute of the form.
- the Login Page Text Pattern can be controlled by two Booleans that specify when it should be used (i.e. for login page detection and/or Action URL extraction).
- the class that implements this logic can be called PTLoginFormDetector and can be in the FormPicker project.
- Each response can be checked against the entire set of login pages defined for that resource. This means that the more login pages are defined for a resource, the more time the reverse proxy server can need to check every response against all of them. We believe this is a reasonable compromise, but we need to performance test this piece of code.
- the reverse proxy server can send authentication data to remote resources, including HTTP headers and cookies.
- the reverse proxy server can also automatically perform form POSTs in order to submit user login data when remote resources present a login page so that the user does not see this login page.
- form POST fails and the user cannot be logged in, they are presented with the remote resource login page.
- the reverse proxy server can detect a login page it can try to automatically submit login data to the remote server, emulating a user filling out a login form. After we detect the login form we know all the information that we need to submit the data: Login Form Action URL and the list of fields. For each field we know its name, type and value. It can be therefore possible to iterate through the list of fields and generate either a body for the POST or a query string for the GET. Once we have the data and know the Action URL, you can submit the request to the remote server.
- the administrator can be able to select whether the form can be submitted as a GET or a POST.
- a GET request all of the form fields can be treated as query string arguments, or if there can be no form fields, the action URL can be sent as a plain URL. This feature can allow the reverse proxy server to simulate almost any action a user would take in response to seeing a particular page.
- the reverse proxy server In order for the reverse proxy server to automatically log a particular user into a remote application, the reverse proxy server has to know the user's credentials (username, password, etc.) How does the reverse proxy server acquire this information?
- the reverse proxy server When the reverse proxy server tries to generate a POST data to send to the remote server, it can try to go through all of the defined fields and get their values. At that time it can be possible to detect if the values for some of the fields have not yet been entered. When such a situation can be detected, the reverse proxy server can do two things: it can forward the login page to the user and it can set a flag on the user's session that indicates that a login page was just displayed to the user.
- the reverse proxy server knows which login form was submitted (because of the flag on the session), it knows the names of the fields that need to be captured (those are the fields that did not have data entered for them) and it knows the data for those fields (since the user just typed all the information in and sent it to the proxy). Having all this information makes it trivial to extract the data from the browser's POST request.
- the reverse proxy server When the reverse proxy server detects a failed login it forwards the login page to the user and then switches to the mode of acquiring credentials.
- the reverse proxy server can be able to authenticate a user to a back end resource using the credentials from a 3 rd party SSO solution (i.e. Windows Integrated Authentication, Netegrity, Oblix, etc. . . . ). This can most likely involve forwarding the appropriate header to the resource.
- a 3 rd party SSO solution i.e. Windows Integrated Authentication, Netegrity, Oblix, etc. . . .
- the reverse proxy server before forwarding content from the remote server to the browser, the reverse proxy server has to transform the data that it had received from the remote server. There are several types of transformations.
- the reverse proxy server leverages HTMLTransformer code from the portal to provide this functionality. You can learn more about this stage by looking at the code in the PTTransformerModule class. Such re-writing should only be needed in cases when the external URL can be different from the internal URL.
- the reverse proxy server can be not only a proxy, but also a development platform for the composite application.
- One of the features that it provides to simplify the development of various applications can be support for adaptive tags. The idea is very simple: The reverse proxy server knows information about users, resources, security, etc. When an application includes a special tag into its HTML output, the reverse proxy server can find those tags and replace them with some user-specific data, or potentially perform some action of behalf of the remote application, etc.
- Tag processing After a response is returned from a remote resource, tag processing occurs. Tag processing also occurs on login and interstitial pages. Identifying tags within the text of the response can be again done by leveraging the HTMLTransformer and Tag Engine code from the portal. The tag processing can be controlled by the PTTagEngineModule class. Tag processing can be implemented using the same Tag Transformation Engine as in the 6.0 Portal. This engine has been componentized so that it can be reused by RProxy.
- RProxy serves error pages in various contexts: login failure, maximum login attempts exceeded, permission denied when accessing a resource, et al.
- error page displayed can be chosen based on the resource being accessed and the current experience definition (which contains the URL of the error page). Error pages can not vary depending on the type of error.
- the remote server can have complete control over the HTML of the error page, and can simply include the error message by adding an RProxy error text tag to the content. In effect, error pages can work the same way as login and interstitial pages.
- RProxy can provide the remote error pages with certain information. This includes the information necessary for login requests (described earlier—including HTTP Headers, cookies, and request information), as well as the following information:
- the actual error message can be included on the remote error page through an error tag.
- Providing error types and codes to the remote server can allow the error page to make the decision to display the error or not, or to replace it with a custom error message.
- the Adaptive Tag Engine from the 6.0 portal can be componentized and reused in the reverse proxy server. This involves several major tasks:
- the reverse proxy server can utilize and maintain a specific set of tags that can be common with the portal tag engine.
- This can include the existing core and logic tag libraries from the portal, including any upgrades and bug fixes to the tags.
- There can also be a common tag library which can contain tags thought to be common to all applications that could integrate with the tag engine (currently portal and the reverse proxy server). This library can include error and user info tags.
- the portal tag libraries can have to be upgraded to match the reverse proxy server in the future.
- the reverse proxy server can also need new tags to cover concepts only relevant to the reverse proxy server. These include:
- Paglets are composed of two basic parts: a front-end pagelet tag and a pagelet engine.
- the pagelet tag can be sued to insert a pagelet into HTML. It can be then replaced by the reverse proxy server with the content of the pagelet.
- the pagelet engine can be a massive parallel pagelet processing (mp3) engine that can be used to retrieve multiple pagelets from band end resources simultaneously.
- mp3 massive parallel pagelet processing
- the tag can be a simple tag that can allow a user to specify the pagelet ID and include data to be passed to the pagelet. There can be two kinds of data passed to the pagelet. The first can be tag attributes, and the second can be an XML payload.
- the standard xhtml tag attributes in the pagelet page i.e., not pt: attributes can be passed to the pagelet directly.
- the XML payload allows the HTML authority to include more complicated data to be passed to the pagelet.
- a pagelet tag can look like this:
- the massively Parallele Pagelet Processing (mp3) Engine can allows the pagelet system to retrieve multiple pagelets simultaneously.
- a client component can create a Request Chain composed of individual Requests. Each request can control all of the information necessary to retrieve a single pagelet. This information includes the ID of the pagelet, the back-enc resource URL>, the pagelet attributes, and the XML payload.
- the Request Chain can send off multiple HTTP request to retrieve the data, and the data can be available to the client component after all requests have returned or timed out. The data can then need to be transformed and converted into a Markup Array.
- the pagelet request flow can involve 2 passes through the HTML data.
- the pass can collect the apgelet data and initiate content retrieval. While the second pass can convert the standard adaptive tags and replace the pagelet tags with the pagelet data.
- the firs requirement can be that there can be a way to put JavaScript and Style Sheets into the head element of the HTML page.
- the second requirement can be that duplicate .js and .css files only be included once per HTML page.
- Pagelet developers can need to mark their JavaScript and Style sheet links to be included in the head using a special JavaScript tag (i.e. ⁇ pt:common.incudeinhead>).pagelet consumers can then need to include a special Include JavaScript Here tag (i.e. ⁇ pt:common.headincludes>) in the Head element of their HTML page. Pagelet JavaScript from head tags would then be included in the output of the Head Includes tag. The Includes tag would also filter out duplicate .js and .css files.
- the reverse proxy server Two types of security exist in the reverse proxy server. The first can be security enforcement exercised on RProxy consumers, whose action can be to access a particular resource. This security can be managed through resource policies, and dictates whether a user has access to a resource. The second can be internal security exercised on RAdmin administrators, whose action can be to configure RProxy. This security dictates whether which the reverse proxy server constructs can be viewed or configured by a particular administrator.
- the reverse proxy server resource can be protected by its resource policy, which describes the conditions under which a user may be granted access to the respective resource, and the roles associated with those conditions.
- IResourceConditionTypeManager extends IConditionTypeManager. It simply limits the conditions that are retrieved, but adds no other functionality.
- Subject encapsulates the following elements that describe the context of the request:
- the policy of the requested resource can be then evaluated, which decides whether this particular request can be granted access in the form of a simple “YES” or “NO” answer.
- RBAC Role-Based Access Control
- ACL Access Control List
- RBAC can be more easily managed than ACL security when there are many users and groups, which can be true in our case.
- Each role can be composed of the set of users and groups that can be considered for this role, and a series of rules that describe the conditions under which a subject can be considered to be part of this role.
- the rules for a role are a series of conditions that are combined with the Boolean operators “AND” and “OR” and nesting to return a “YES” or “NO” decision on whether a subject can be in the role. Notice, the Boolean operator “NOT” can be unsupported for Springbok for purposes of semantic clarity.
- a rule condition can of the following types:
- IP Address One An IPv4 or IPv6 address with Equals optional subnet mask Time Two 1 st Arg: Time of Day Between (crossing over 2 nd Arg: Time of Day midnight is valid) Date One or Two 1 st Arg: YYYY/MM/DD Equals (one arg) or 2 nd Arg: YYYY/MM/DD Between (two args) Day of Week One Weekday or Weekend Equals User Attribute Two 1 st Arg: valid user profile Equals or Contains element 2 nd Arg: a string with no regular expressions — One A rule (must already exist) Is True
- Each resource has an associated policy, and each policy contains a set of defined roles.
- Each role can be a set of users and groups that can be considered for the role, and a set of rules under which a subject can be considered part of this role.
- An incoming request subject can be evaluated against each role for a particular resource, and if the subject can be found to be in one or more roles, the access decision can be “YES” and the set of matching roles can be then passed on to the protected resource as additional information.
- Security Service provides extensive flexibility in evaluating rules, and requires no external dependencies.
- Resources policies have two distinct components; policy rule evaluation and policy persistence. On both accounts, policy rules and experience rules have the same structure of complex Boolean operators tying together conditional statements. Valid types of conditions overlap in both cases. The only notable architectural and functional difference can be that top-level experience rules are evaluated sequentially, while top-level resource policy rules are evaluated with Boolean operators.
- the similarities in resource policies and experience rules beg for a common persistence API and rule engine.
- the strategy in persistence can be to construct rules that are stored in elemental form so that they can be modified and retrieved incrementally through a rule builder UI, and keep these rules synchronized with a rule engine.
- the proposed API for building rules in the Experience Rules section satisfy the requirements of Resource policies, as does the rule engine interface.
- the rule engine should be provided via Security Service's extensive rule evaluation capabilities rather than Portal 6.0's implementation of the Core Rule Engine.
- Security Service v1 provides an expressive set of security features, but has some constraints to which the reverse proxy server must work around in order to provide authorization via Security Service.
- Security Service works in the following way:
- Security Service provides a set of security services including authentication, authorization, and role mapping.
- Each of these services communicates through Security Service via a plug point and can be swapped in and out with different implementations of the same service. Because of this, each service can be called a “provider” and default providers come packaged with Security Service for each of the services.
- the default role mapping provider can be implemented based on the XACML standard.
- Providers are swapped via mBeans, and security configuration can be also performed by manipulating mBeans.
- Run-time security evaluation can be performed via a separate set of interfaces.
- XACML For role mapping, configuration may be not straightforward, because the XACML provider does not provide an interface for direct manipulation of XACML constructs. Manipulations are limited to the addition, deletion, and replacement of XACML policies. Policies can be passed in as either raw XACML strings or the Policy object that can be part of the CSS/XACML policy schema, which can be found at com.bea.common.security.xacml.policy (in cssenv.jar).
- a common API allows for the potential for a shared management UI
- the following API defines generic interfaces for representing rules and expressions, including different types of operators and condition types.
- the rule management API for creating, loading, saving and deleting rules and expressions is also defined as part of the common interfaces.
- the goal of the common API is to provide a unifying interface for representing both resource policies and experience rules such that the different management consoles (UI) for these different types of rules can use the same API for managing and displaying the rules.
- common API encourages code reuses between resource policy and experience rule implementations.
- An expression is either a simple expression (i.e., the most basic expression containing only a single conditional clause), or a complex expression (i.e., containing sub-expressions joined together by a logical operator).
- a rule is an expression that has an associated action value with it, such that when the expression evaluates to true, the action value can be used. If we think of nested expressions being a tree of sub-expressions (recursively), the top-level (root) node is the one that can be referenced by a rule (to form the expression for its condition).
- ConditionOperator is an equality or range operator used in constructing a condition (which consists of a condition type, a condition operator, and one or two condition values), while OperatorLogical is used for constructing nested expressions that are joined together using either AND or OR operators, or negated (NOT). Since we cannot use a ConditionOperator in place of an OperatorLogical, and vice versa, it provides a better type-safe checking to separate the enum.
- an Experience Definition is a set of properties that defines a user's experience when logging in to the reverse proxy server and when using the reverse proxy server.
- use cases include selecting which login page to use (for the primary authentication), which authentication source to use by default, which error page to display when an error occurs, etc.
- An experience definition can be selected conditionally based on rules (experience rules), using conditions such as which resource being requested, the IP address of the request origin, and/or other supported condition types.
- An administrator can compose rules based on Boolean expressions (using AND/OR operators on conditional clauses). These rules can have priority (ordering) assigned to them and can be processed in order until the first match (i.e., the first rule that evaluates to TRUE). The output of this rule can be used to pick an Experience Definition for the current request.
- This component provides a basic rule engine (rule evaluator) implementation that can evaluate rules and expressions defined in the Common Rules API section, natively (i.e., without delegating the evaluation process to any external engine).
- Core Rule Engine is the basic implementation of a native (built-in) rule engine. At runtime, the engine can be invoked and executed by calling the Evaluate( ) method on the rule engine passing in the input environment (context) containing the input data at the time of evaluation (e.g., the URL of the request, etc), which can be used by condition type objects to evaluate the expression.
- the Evaluate( ) method on the rule engine passing in the input environment (context) containing the input data at the time of evaluation (e.g., the URL of the request, etc), which can be used by condition type objects to evaluate the expression.
- the common Rules API defines only the interface for IConditionType.
- the class implementation of the interface is the one that decides what key and value that it needs to store in the input environment.
- the INativeRuleService is the entry point to get the rule-related services utilizing the built-in rule engine. From this, we can get access to the runtime API (IRuleEngine). We can get access to the rule and expression management API (IRuleManager, IExpressionManager). We can get the list of available condition types through the IConditionTypeManager. Each of these modules can be swapped with a different implementation of the same, since the INativeRuleService interface defines not only the getter, but also the setter for these different modules.
- the IRuleEngine implementation can be the re-factored engine from G6 Portal.
- the IExpressionManager/IRuleManager implementation can use Hibernate-backed.
- rule service implementation that does not require a built-in core rule engine.
- both the runtime rule evaluation and the admin-time rule management rely on the XACML provider in Security Service.
- the rule engine implementation can delegate the actual work to the Security Service XACML provider.
- the expression/rule manager can use the MBean interface of the XACML provider to create/retrieve/update/delete rules (as XACML policies).
- Security Service does not expose its internal/core rule engine directly; instead, its rule engine is wrapped inside an access-control/role mapping service interface, and hence the only way to access its rule engine is by making up some mock access-control requests and storing our generic rules and expressions as access-control policies (written in XACML).
- code sharing and code maintenance is a priority, this should give us a nice way to delegate code development and maintenance of a rule engine to the Security Service team.
- Experience Rule component builds on top of the Native Rule Service component, by implementing condition types specific for the reverse proxy server experiences, and implementing IExpression, IRule and object managers (IExpressionManager, IRuleManager, IConditionTypeManager) that know how to load and persist experience expressions, rules, and condition types for the reverse proxy server experience.
- the client IP address condition type can be used to represent both IPv4 and IPv6 IP addresses.
- the comparison method uses regular expression to compare the IP-address string, allowing both exact match and wildcard match on an IP address.
- the IP-address-to-string conversion internally utilizes HttpServletRequest.getRemoteAddr( ) method that returns a string representation of the IP-address. Rule administrator can then create a regular expression to match the IP-address string.
- the Time condition type can allow range operators (greater than, less than) in comparing with a condition value, and use the server's time zone when displayed on the UI but can be converted to use UTC time zone when stored in the database.
- the list of available condition types for the reverse proxy server experiences at start-up can be predefined (“hard-coded”) or automatically discovered. Although we do not aim for extensibility (of allowing custom condition types) for the reverse proxy server v.1.0, we can design the architecture for discovering the available condition types to be flexible, and in a way that does not prevent customers from writing their own custom conditions in the later version of the reverse proxy server.
- the setting contains a list of Java class names that implement the IConditionType interface that can be loaded and used by experience rules.
- the mechanism that we use to pass that information down is through a context map that we call input environment. Before the rule engine evaluates the rules, we need to populate the input environment using the data from the HTTP request and other information.
- Each of the condition type class implementations needs to implement this method with the actual code that extracts the information from the passed in parameters (HTTP request object and the reverse proxy server resource) and put the necessary information (needed by its runtime evaluation) into the input environment context map.
- condition types may have a difference UI, e.g., a resource picker for Requested-Resource condition, a date/time picker for date/time conditions, a set of 4 small boxes for IP-Address, we can employ a UI Renderer mechanism for rendering different condition types (for creation of expressions in the Admin UI).
- UI e.g., a resource picker for Requested-Resource condition, a date/time picker for date/time conditions, a set of 4 small boxes for IP-Address
- UI Renderer mechanism can be essential when we need to support extensibility later on, allowing customers to create their own condition type and plug that in to the Experience Rules.
- customers may create a custom type and provide a renderer for it such that the custom type can (potentially) be discovered in the reverse proxy server Admin UI for creating experience rules.
- the mechanism of how a renderer is associated with a condition type can be scoped out in the reverse proxy server Admin UI project.
- PersistentExperienceExpression extends PersistentObject implements ISimpleExperienceExpression, IComplexExperienceExpression
- PersistentExperienceRule extends PersistentObject implements IExperienceRule
- ConditionTypeBase implements IConditionType:
- ConditionTypeResource extends ConditionTypeBase
- ConditionTypeClientIP extends ConditionTypeBase
- ConditionTypeTime extends ConditionTypeBase
- ConditionTypeWeekday extends ConditionTypeBase
- ConditionTypeDate extends ConditionTypeBase
- ConditionTypeBrowser extends ConditionTypeBase
- ConditionTypeLocale extends ConditionTypeBase
- IExperienceRuleManager extends IRuleManager (extending for covariant return types)
- IPersistenceService For consistency with the other the reverse proxy server API, we should modify the IPersistenceService to add the following methods:
- the entry-point API for accessing experience rules can be the IExperienceService and the IPersistenceService, which both can be accessible from the IRunnerApplication.
- Experience Definition is a set of properties that can be used by the reverse proxy server to determine the settings for user's experiences, primarily related to the user's primary authentication to the reverse proxy server (authentication source, login and interstitial pages), before an unauthenticated user accesses a protected the reverse proxy server resource.
- An experience definition is the outcome of running experience rules. Hence, the selection process of which XD to be used for the current request can be made conditional (and customers can define it) based on a number of things.
- the reverse proxy server can obtain the list of available authentication sources from the Security Service. There can not be any DB table (like PTAuthSources in Portal) that stores the list of available authentication sources in the reverse proxy server schema, which the ExperienceDefinitions table can be joined with. Hence, authentication sources mapping in experience definition can use a simple (element) collection mapping.
- PersistentExperienceDefinition extends PersistentObject implements IExperienceDefinition
- IExperienceDefinitionSearch extends IRunnerSearch:
- Integration points include steps to discover the available condition types for the reverse proxy server experiences, to load experience rules from database, to initialize the rule engine, to populate the input environment map prior to executing rules for the current request, to execute the rule engine, and to integrate the resulted experience definition into the reverse proxy server's primary authentication module, and other places that need to get a handle of current definition (e.g., to redirect to an error page).
- IExperienceService.Evalute . . .
- This API can run all the experience rules and return an IExperienceDefinition object. The following activities can be performed during the execution of this API:
- SSOLoginModule for the reverse proxy server's primary authentication
- SSOLoginModule.onAuthenticateUser( ) and its Login Manager classes the experience rules can be evaluated to produce an ExperienceDefinition containing the needed data for authentication method (“proxy authenticator”), as well as login and interstitial pages if an interactive-login authentication method is selected.
- the default authentication source information in the current ExperienceDefinition can be used when no authentication source is specified by the user submitting the login form.
- Configuring audits can involve changes on specific resource objects. Both authorization configuration audit records and resource configuration audit records are active by default, and cannot be configured.
- the top-level class for the Auditing API is the RunnerAuditMgr, which implements IAuditMgr and can contain all the methods for writing and retrieving data to and from the reverse proxy server DB, using Hibernate. All auditing done through Hibernate can be implemented according to Transaction rules.
- AuditFactory implements IAuditFactory, and generates the RunnerAuditMgr to be used in the module.
- AuthorizationConfigRecords and ResourceConfigRecords can also contain a List of AuditData objects containing the properties data for the records. AuditData objects are not to be directly accessed by other modules; access to the data can be allowed through the enveloping AuthorizationConfigRecord and ResourceConfigRecord classes, through the getproperties( ) method.
- ResourceRolePair Instances of the class ResourceRolePair are returned in a list for CSUAP requests.
- This class can be in the common folder, and is to be treated as a primitive.
- FIG. 12 illustrates an exemplary auditing API.
- AuditRecord implements IAuditRecord ⁇ Property: long id - Hibernate-generated, unique sequence number Property: String serviceName Property: String resourceName Property: Date auditDate - Hibernate-generated Property: String userName Property: String userType Property: long resource_id ⁇ public class AccessRecord extends AuditRecord implements IAccessRecord ⁇ Property: String accessURL Property: String accessIPAddress Property: int accessPrimaryAuthenticationMethod Property: int accessResourceAuthenticationMethod ⁇ public class AuthorizationConfigRecord extends AuditRecord implements IAuthorizationConfigRecord ⁇ Property: List ⁇ AuditData> auditDataList Property: int actionType ⁇ public class ResourceConfigRecord extend
- AccessRecord objects can be persisted to the ACCESSAUDITRECORDS table.
- ResourceConfigRecord objects For ResourceConfigRecord objects, the method called in com.plumtree.runner.persistence.PersistenceService is createResourceConfigRecord( ).
- ResourceConfigRecords can be persisted to the RESOURCECONFIGAUDITRECORDS table.
- Retrieving the data can be implemented in 4 methods:
- Each method takes in a user name or resource ID, as well as a start date, an end date, a start index, and a maximum number of records to be returned. These define the necessary search parameters.
- a list of AuditRecords with the actual class depending on the method called, can be generated, using Hibernate to access the DB tables. The records can be sorted by date, starting with the most recent.
- the current state of potential user access privileges can be determined by searching through all registered policies on the Proxy server, and checking each for accessibility to the user.
- the apps that the given user can potentially access in the current state, combined with the roles they can access those apps as, can then be returned as ResourceRolePair objects in a list. This can be implemented in the getCurrentUserAccessPrivilegesFromUser method.
- DB partitioning can be recommended to prevent any adverse effects when accessing other tables in the reverse proxy server DB.
- best practices regarding the partitioning can be provided for customers.
- the 6.0 portal tag engine has been componentized so that it can be reused by RProxy and possibly other projects.
- This componentization includes removing any Portal dependencies, edits to the API to better serve both projects, and factory based creation of engine components. Converting the Tag Transformation Engine to use factories to retrieve internal components can allow RProxy or Portal to override common components if they have specific requirements that are not met by the componentized Engine. This can also aid in testing.
- the Security Service wrapper that is implemented for the reverse proxy server can provide us with role mapping and policy rule evaluation capabilities, which poses a strange problem. Why are security features split between two different services, the BID Security Service and the reverse proxy server Security Service Wrapper?
- Security Service provides these features as raw MBeans, which means there is no compile-time API.
- the reverse proxy server needs to feed the reverse proxy server objects and general constructs that have no equivalent in the Security Service API (for example, a Policy Rule Builder API). These reasons justify the construction of a wrapper API for Security Service that would be used internally for the reverse proxy server project.
- FIGS. 13A and 13B show current and proposed security service architectures respectively.
- Standalone Security Service can be used as the reverse proxy server's Rules Engine.
- Security Service can provide the following functionality to the reverse proxy server:
- CWAPI The proxy Security API (Security Service Wrapper API)
- CWAPI Voice over IP Security
- the reverse proxy server can be the first (and only) consumer of Security Service in the ALUI product line in the near future, the first version of the reverse proxy server can not expose CWAPI.
- Springbok
- Resource registration requires entry of external and internal URLs.
- the user need not be concerned with whether these URLs represent a reverse proxy, transparent proxy, or combination; the user only needs to enter URLs.
- External URLs are what the user sees, are input into a browser, and are represented in requests to RProxy. When external URLs point to the RProxy hostname, no DNS changes are required. (This is the reverse proxy case.) External URLs that are not based on the name of the RProxy machine require DNS changes. (This is the transparent proxy case.)
- Requirements for a resource URL definition are as follows, with examples below.
- External URL(s) must either be a relative path like ”/a”, a hostname like “crm.bea.com” or “crm”, or a combination thereof “crm.bea.com/a”.
- Multiple URLs can be used as aliases for the same resource. It may contain either “http://”, “https://”, or omit the protocol. If the protocol is omitted, a request with either http or https protocols can match.
- Internal URL must specify a hostname “crm.internal.com” and may specify a path “crm.internal.com/a”. If no protocol is specified, http is assumed. Either http or https may be explicitly specified “https://crm.internal.com”. The external URL's protocol has no effect on the internal URL's protocol.
- Both external and internal URLs are stored in the database as normalized URLs.
- the request URL is normalized before determining the matching resource for the request URL. This is to avoid the problem if two different URL strings referring to the same physical URL location.
- the algorithm for matching a request URL involves three steps. First the protocol can be removed from the request URL. The resulting string then can be used to find a matching resource by from the most specific path to the more generic path. If no matching is found, the second step can use the request with protocol. If still no matching is found, the third step is to use on the path of the request URL.
- the request URL is http://www.bea.com/path1/path2/resource
- the first step can use www.bea.com/path1/path2/resource, www.bea.com/path1/path2, www.bea.com/path1, www.bea.com.
- the second step can use http://www.bea.com/path1/path2/resource, http://ww.bea.com/path1/path2, http://www.bea.com/path1, http://www.bea.com.
- the third step can use /path1/path2/resource, path1/path2, path1.
- proxy.runner.com refers to the reverse proxy server host.
- Each of the numbered entries below represents a distinct resource and below it, example http requests are provided.
- Allowed resource mappings from external to internal are “n to 1,” that is, “n” external request URLs can be mapped to only one internal URL, per resource. Resource mappings can allow configuration of authentication source options, login page, and something akin to experience definitions.
- the Administration Console provides a means of managing users and groups in roles. This means that the Administration Console can most likely have a dependency on the security framework used in the reverse proxy server. This could mean that the Administration Console would also have to run in Web Logic Server.
- the Pagelet Catalog UI can provide a left hand index and right side detail view, similar to our portal tagdocs. This UI can also display the tagdocs for the reverse proxy server tags.
- the left hand index can be split into 2 frames, an upper one containing the tag libraries and pagelet namespaces, and a lower one containing a full list of tags and pagelets.
- the right hand side can contain our standard tagdocs, or a single page showing all the details of a pagelet.
- FIG. 14 shows an exemplary product UI catalog.
- Proxy Authenticators There can be several standard Proxy Authenticators that come with the product, and administrators can be able to create new Proxy Authenticators.
- the preexisting Authenticators can reference internal class names, but the administrators can only be able to configure Remote Proxy Authenticators (i.e. specify a URL, not a class name).
- the reverse proxy server can provide both it's own unique tags, as well as extensions to the common tags provided by the Portal
- Tag authsourcedata Description This stores a list of available auth sources for the currently requested resource in memory.
- the data is stored as a collection, and each item in the collection is a data object containing information about the auth source (id, name, description) accessible through the data object dot notation ($curauth.name).
- Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- Tag resourcelink Description This stores the URL to a specific resource, if available, in memory. Attributes resourceid The resource ID. id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag resourcedata Description This stores a list of resources in memory that are available to the current user.
- the data is stored as a collection, and each item in the collection is a data object containing information about the resource (id, name, description, url) accessible through the data object dot notation ($curresource.name).
- Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- the pagelet tag is simply the way to add a pagelet to an HTML page.
- Tag roledata Description This stores a list of the roles in memory that the current user has available. The data is stored as a collection, and each item in the collection is a variable containing the role name. This can be used with the foreach tag to iterate over role data. Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory.
- Tag roleexpr Description This tag evaluates a role expression and stores the result in memory. It is designed to work with the logic.if tag. Attributes expr An expression consisting of the hasRole function which takes an application role as its argument. This function evaluates whether or not the current user has the requested role. key The key used to store the data in memory. Defaults to “if-result”. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info.
- Tag picker Description This tag selects a user/group/role and passes the result to the specified JavaScript function. Attributes type The type of object to select (user, group, or role). multi A boolean specifying whether or not the user can select multiple items. Default to false. jscallback The JavaScript callback. This method can be passed a 2d javascript array containing the type (user, group, or role), name, and ID of each selected item.
- Tag analytics Description This sends an analytics event to the analytics server. Attributes id The event id. data The event data.
- tags are shared between the reverse proxy server and portal. They include new tags (with the reverse proxy server specific implementations) and enhancements to the pre-existing general tag libraries for specific reverse proxy server needs.
- the reverse proxy server does not include the Portal Standard tags, such as the choose/when/otherwise tag, we can take this opportunity to develop a more flexible way of doing conditionals using tags.
- if-true and if-false tags do not have any attributes. They are simply displayed or not displayed depending on the results of the if tag expr parameter.
- the collectionlength tag is necessary to enable conditional logic based on how many auth sources or resources are returned (i.e. empty, a single item, or a list).
- Tag collectionlength Description This tag evaluates the length of a collection and stores the result in memory. Attributes data The key used to store the collection. key The key used to store the result in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- This tag needs to be converted for use with the collection tag so that you can create collections of variables, in addition to collections of data objects. This is useful for the rolesdata tag.
- the collection tag also needs to be updated to mention the new related child tag, as well as a warning not to mix data types in a collection.
- These tags can allow the reverse proxy server errors to be formatted as desired on a custom error page. There are two ways to implement this. The first can require either adding an API to the Tag Engine to allow the reverse proxy server to set error messages for a user. The reverse proxy server can then need to set the error information before displaying an error page to the user. The second involves implementing the reverse proxy server specific error tags that meet a common error tag API specified by the tag engine.
- Tag error Description This tag displays errors on the page so that they can be placed and formatted as desired. If the errortext tag is included inside this tag, the contents of this tag can only be processed if there is an error. If the child tag is not present, then the error messages can be formatted and displayed from this tag in the standard style.
- Tag errortext Description This tag displays the current error text on the page so that it can be placed and formatted as desired. Attributes text This attribute allows you to override the error text with text of your own choosing.
- Tag errorcode Description This tag stores the error code in tag memory. Attributes id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory.
- Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info.
- Tag includeinhead Description This marks JavaScript & Security Service links to be included in the Head element of the HTML page by the headincludes tag. If a .js or .css file is marked for inclusion multiple times, it can only be included once. Attributes
- the most important security issue in RProxy is the use of the Credential Vault.
- the reverse proxy server stores a user's username and password for each resource in a Credential Vault. While this information can be encrypted, the reverse proxy server needs to be able to extract the non-encrypted data from the vault in order to pass the username and password to the resource. This is dangerous because if the reverse proxy server can decrypt the Credential Vault, someone else could figure out how to do it as well (i.e. steal the reverse proxy server's encryption key, which needs to be stored in the database or file system). This could provide someone with direct access to back-end resources using another user's credentials (i.e. accessing the finance app as the CEO).
- One way to avoid this problem is to encrypt the secondary passwords in the credential vault with the user's primary password, so that more than just the server's encryption key is needed for decryption.
- the reverse proxy server documentation should include a security advisory that this multicast UDP traffic can be sniffed and therefore the network containing the reverse proxy server and Analytics servers should be isolated from the rest of the network.
- One embodiment may be implemented using a conventional general purpose of a specialized digital computer or microprocessor(s) programmed according to the teachings of the present disclosure, as can be apparent to those skilled in the computer art.
- Appropriate software coding can readily be prepared by skilled programmers based on the teachings of the present discloser, as can be apparent to those skilled in the software art.
- the invention may also be implemented by the preparation of integrated circuits or by interconnecting an appropriate network of conventional component circuits, as can be readily apparent to those skilled in the art.
- One embodiment includes a computer program product which is a storage medium (media) having instructions stored thereon/in which can be used to program a computer to perform any of the features present herein.
- the storage medium can include, but is not limited to, any type of disk including floppy disks, optical discs, DVD, CD-ROMs, micro drive, and magneto-optical disks, ROMs, RAMs, EPROMs, EEPROMs, DRAMs, flash memory of media or device suitable for storing instructions and/or data stored on any one of the computer readable medium (media), the present invention can include software for controlling both the hardware of the general purpose/specialized computer or microprocessor, and for enabling the computer or microprocessor to interact with a human user or other mechanism utilizing the results of the present invention.
- Such software may include, but is not limited to, device drivers, operating systems, execution environments/containers, and user applications.
- Embodiments of the present invention can include providing code for implementing processes of the present invention.
- the providing can include providing code to a user in any manner.
- the providing can include transmitting digital signals containing the code to a user; providing the code on a physical media to a user; or any other method of making the code available.
- Embodiments of the present invention can include a computer implemented method for transmitting code which can be executed at a computer to perform any of the processes of embodiments of the present invention.
- the transmitting can include transfer through any portion of a network, such as the Internet; through wires, the atmosphere or space; or any other type of transmission.
- the transmitting can include initiating a transmission of code; or causing the code to pass into any region or country from another region or country.
- transmitting includes causing the transfer of code through a portion of a network as a result of previously addressing and sending data including the code to a user.
- a transmission to a user can include any transmission received by the user in any region or country, regardless of the location from which the transmission is sent.
- Embodiments of the present invention can include a signal containing code which can be executed at a computer to perform any of the processes of embodiments of the present invention.
- the signal can be transmitted through a network, such as the Internet; through wires, the atmosphere or space; or any other type of transmission.
- the entire signal need not be in transit at the same time.
- the signal can extend in time over the period of its transfer. The signal is not to be considered as a snapshot of what is currently in transit.
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Storage Device Security (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
Application role mappings can be maintained at a reverse proxy server. When a request for a web application is received at the reverse proxy servers, the proper user role for the web application can be determined at the reverse proxy server. The proper user role can be sent as part of a HTTP header to the web application. The web application can use the user role without doing an independent mapping of the user to a role.
Description
- This application claims priority to U.S. Provisional Application No. 60/826,633 entitled “Runner Security” by Pandrangi et al., filed Sep. 22, 2006 which is hereby incorporated by reference [Atty. Docket No. BEAS-02041US0] and to U.S. Provisional Application No. 60/883,398 entitled “Runner” by Hayler et al., filed Jan. 4, 2007 which is hereby incorporated by reference [Atty. Docket No. BEAS-02042US0].
- A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.
- Web applications have become increasingly popular within the enterprise as a result of their flexibility of deployment and their relatively intuitive interfaces, but web applications present potential problems in the enterprise environment due to security and governance issues.
-
FIG. 1 illustrates a reverse proxy system of one embodiment. -
FIGS. 2A-2B illustrates a method of encrypting a credential vault. -
FIGS. 3A-3B illustrates a role abstraction system. -
FIG. 4A illustrates the use of pagelet tags. -
FIG. 4B illustrates a non-invasive way to insert a pagelet that does not use pagelet tags. -
FIG. 5 illustrates the use of interstitial pages. -
FIG. 6 illustrates request/response management. -
FIG. 7 shows an exemplary module system. -
FIG. 8A shows an exemplary single-sign-on and authorization system. -
FIG. 8B shows an exemplary interactive system with interstitial pages. -
FIG. 9 illustrates an exemplary request flow system. -
FIG. 10 shows an exemplary deployment of Spnego. -
FIGS. 11A-11B shows an exemplary SSO. -
FIG. 12 illustrates an exemplary auditing API. -
FIGS. 13A and 13B show current and new architectures of one embodiment. -
FIG. 14 shows an exemplary product UI catalog. - Some embodiments of the present invention may be useful in reverse proxy and Single Sign On (SSO) environments.
-
FIG. 1 shows an exemplary reverse proxy, single-sign-on environment. Auser browser 102 can access functionality through thereverse proxy 104. In the example ofFIG. 1 , a request for “http://reverseproxy.companyname.com/mail” is sent to thereverse proxy 104 and mapped to aresource 106 at “http://mail.companyname.com”. In one embodiment, thereverse proxy 104 can be set up to access theweb application instances - For purposes of this application a reverse proxy can be any system that can do such a reverse mapping. In one embodiment, a reverse proxy is a server that proxies content from a remote web application to an end-user and may or may not modify that content.
- No additional or supplemental functionality, such as SSO, should be imputed to the meaning of the term “Reverse Proxy” or “Proxy”.
- Supplemental functionalities can include authentication to determine who the user is; authorization to determine if the user has access to the requested resources; transformation functionality to use tags to combine data from different applications, such as web applications and/or rewrite URLs within a response to point to the
reverse proxy 104. The functionality can also include gathering analytics and auditing data. - Authentications and authorizations can be part of a SSO system such that all requests through the
reverse proxy 104 only require a single sign on. - Authorization can be done by having the
reverse proxy 104 handle the mapping of users for a web application to roles. In one embodiment, the web applications can use different roles while the mapping of users to user can be controlled by thereverse proxy 104. - In one embodiment, different types of authentication can be ranked in order of security. The authentication can be used to access the application if the SSO authentication has a security authorization at or above that required by the application.
- The use of a reverse proxy can also allow for centralized governance. The reverse proxy can keep a central record of web application usage statistics.
- Single sign on can be enabled by having the
reverse proxy 104 send credentials (such as user names and passwords) from acredential vault 110 to the application. - In an exemplary case, the rewriting of URLs can be done by checking the URL for a prefix mapped by the reverse proxy and then converting the prefix to point to the reverse proxy. For example, “http://mail.companyname.com/billing” can be converted to “http://reverseproxy.companyname.com/mail/billing”. Adaptive and pagelet tags are discussed below in more detail and are a way to combine functionality from applications.
- One embodiment of the present invention concerns the control of passwords in a credential vault. For the purpose of this application a credential vault is any storage location for credentials (such as passwords).
- It is desirable that any passwords in the credential vault remain secure. For this reason, these passwords can be encrypted.
- One embodiment of the present invention comprises encrypting a number of secondary passwords with a primary password. The secondary passwords can be passwords to applications accessed through a reverse proxy. The primary password can be for a single sign on system such as a reverse proxy. The secondary passwords can be stored in a
credential vault 202. An encrypted secondary password can be decrypted from the credential vault using the primary password and provided to an application. - The primary password can be a password to a reverse proxy system or SSO system. The secondary passwords can be passwords to remote web applications. The secondary passwords can be encrypted with a function, such as a hash, of the primary password. A fixed string can be encrypted and stored in the credential vault in the same manner. This encrypted fixed string can be used to test to see if the primary password has changed since the secondary passwords and fixed string have been encrypted. The user can be prompted to input the new and old primary passwords, if the primary password has been changed. The secondary password can be decrypted using the old primary password and re-encrypted using the new primary password.
-
FIG. 2A shows an example wherein a primary password 201 is used by amain authentication component 204 to authorize a user. The primary password 201 can be used to encrypt the secondary passwords stored in the credential vault. For example, an encrypted password can be given by: -
- Ehash(primary password)(secondary password)
- and the secondary password can be reconstructed using:
-
- Dhash(primary password) [Ehash(primary password)(secondary password)]
- Where Ex(y) is the encryption of y using key x, and Dx(y) is the decryption of y using key x. The key can be a hash, or any other function, of the primary password. Any type of encryption can be used.
-
FIG. 2B shows the example when the primary password has changed. In that case: -
- Dhash(new primary password) [Ehash(old primary password)(secondary password)]≠secondary password
- To avoid sending the wrong secondary password to an application a known string can be encrypted and a test can be done, If:
-
- Dhash(new primary password) [Ehash(old primary password)(known string)]≠known string
- Then the user can be prompted to input the old and new password with a
page 220. The encrypted secondary passwords can then be decrypted with the old primary password then re-encrypted with the new password. - This system avoids the problems of an admin user easily decrypting the credentials of a user. Anything that the system knows, the admin user will generally be able to know as well. For example, if the security system is configured to mutate all stored passwords with the same key, an admin user, who has access to the box running the security system, can decompile the program and figure out the encryption method. The admin user can then apply that decryption method to every password in the credential vault.
- Since the credential vault password is encrypted with a user's password or a hash of the password, an admin won't have access to a way to decrypt the secondary password. If a user's primary password changes, all credential vault passwords are no longer retrievable.
- In one embodiment, whenever a user enters a password into an Authenticator, the Authenticator can pass the password to Security Service for validation. The Security Service can use this password (or a one way hash of this password) to encrypt any passwords that get stored in the credential vault. The user's password can be a symmetric key which need not be persisted anywhere.
- The user's password can also be used to encrypt a static string, such as “BOJAMBLES”, which is known to Security Service. This encrypted String can be persisted to the database.
-
Id encrypted(“BOJAMBLES)” User1 asdkfjlasdkfjalsdkjfklasdjflksdjf User2 sdfsjkl23jkl23jkl - The next time the user logs in to the reverse proxy server, this password can again be sent to Security Service. If Security Service can log in to the back-end repository with this password, it can do another check. Security Service can use the latest sent password to decrypt the BOJAMBLES string. If the decrypted value is indeed BOJAMBLES, Security Service knows that the user's password has not changed. The security service can now use this password to decrypt every password in User1's credential vault using the last sent password. User1 now has access to all his credential vault passwords for auto-login with backend apps.
- Assume User1 now changes his password to POKEMONRULEZ.
- User1 now tries to access a resource and the reverse proxy server can ask for a login (assuming session expired after password change). User1 now logs on with the new password. This password gets sent to Security Service. It can validate the password with a back-end repository, then it can attempt to decrypt BOJAMBLES with POKEMONRULEZ. The security service can then realize that the user's password has changed. The security service can then let the reverse proxy system know that the user's password has changed.
- The reverse proxy system can then display a page to the user. This page can say something like: “the security service has detected that your password has changed recently. In order to re-encrypt your credentials, please enter both your new and old password. Otherwise, the security service can not be able to re-encrypt your credentials and you can be forced to re-login to all your applications”.
- If User1 is able to recall his previous password and enters it in to the form, the reverse proxy system can send the two passwords back to the security service. The security service can now be able to decrypt BOJAMBLES with the old password. Once that is validated, the security service can decrypt all of the user's credentials in the vault. The security service can then re-encrypt those passwords with the new password, and also re-encrypt BOJAMBLES with the new password.
- Credential acquisition can also be an important part of the credential vault. If a user logs in to the remote web application, we can acquire their password and store it in the credential vault.
- Roles and policies can allow the display and access to data in a flexible manner. Users can be mapped to roles and policies to indicate whether users (as a result of one of these roles) have access to a display or other application resource. A description of one system using roles and policies is given in the U.S. patent “System and Method for Maintaining Security in a Distributed Computer Environment” U.S. Pat. No. 6,158,010 which is incorporated hereby reference.
- Requiring each web application to implement roles and policies can complicate the development of these web applications. One embodiment of the present invention is a way for web applications to use roles without doing the mapping of users to those roles.
- As shown in
FIG. 3A , areverse proxy 302 can maintain role mappings and policies for a web application in acentral store 304. Theweb applications - One embodiment of the present invention is a method comprising maintaining a
central store 304 of application role mappings at areverse proxy server 302; receiving a request for a web application at the reverse proxy server (such as from browser 310); determining the proper user role for the web application at thereverse proxy server 302; and sending the proper user role as part of a HTTP header 312 to theweb application 308. - The
web application 308 can use the user role without doing an independent mapping of the user to a role. The reverse proxy server can interrogate the web application to determine the set of roles used by the web application. The reverse proxy server can implement policies to determine a user's access to the web application. As described in more detail below, code for the web application can include a tag to cause the reverse proxy system to insert a second web application into the displayed page. This second web application can use independent user roles. Thereverse proxy server 302 can look up roles for multiple web applications that are combined into a single presentation to the user. - Administrators can specify which roles the web application support in the administration UI.
-
FIG. 3B shows an example where a user “FrankF” can access a web application 325 only within a specified time period as a result of a mapped role and policy for application 320. The role mapping and policies for “FrankF” can be different for web application 322 than for web application 320 and this can be managed at thereverse proxy server 302. - In one case, the web application 320 can include a pagelet tag (described below) that cause the proxy server 324 to insert a display from web application 322 into the display for web application 320.
- In one embodiment if a user, such as “FrankF”, is unable to access the web application 322 independent of web application 320, the pagelet will not be displayed to the user.
- Pagelets can be comparable to portlets in that they both contain user interfaces (UIs) that can be displayed in more than one consuming application. But, in one embodiment, there are significant differences.
- Portlets can only be displayed in one type of consuming application—a portal. In fact, most portlets are written using proprietary code which requires that they be consumed in a particular vendor's portal. Pagelets, on the other hand, are a much more general technology. Any application_when viewed using the runner reverse-proxy can consume any pagelet.
- Portlets often require that the consuming application be written in the same language or on the same platform as the portlet. Pagelets can be invoked using XML, a language an platform independent standard, so pagelets and their consumers can be written in different languages and on different platforms.
- Portlets, because of their link to portals, assume a specific environment for resolving security and role questions. Pagelets can generalize the functionality, so that security and roles can be customized for any environment.
- Portlets, again due to their link to portals, assume a specific UI paradigm (e.g. view modes). Pagelets require no such constraints. Any standard web technology (i.e. any technology supported by web browsers) can be used to generate any type of UI and that UI will be rendered in the consuming application.
-
FIG. 4A shows an exemplary system using pagelet tags. Thebrowser 402 provides a request to thereverse proxy system 404 in step A. Thereverse proxy system 404 can check for authorization based on Roles and Policies as discussed below. Assuming these are good, the request can be rerouted to aweb application 406 in step B. Thefirst web application 406 can respond withcode 408 that includes apagelet tag 410 in step C. Thereverse proxy system 404 can determine the pagelet web application 414 based on thepagelet tag 410. Assuming that the authorization from the user is good, the pagelet code can be requested in step D and the pagelet code can be returned in step E. The pagelet can be added into a first web application page as a combined presentation and provided to the browser in step F. URLs in the combined presentation can be modified to point to the reverse proxy system. - The user roles can be sent to the web applications in an HTTP header so that the web application need not do an independent mapping of the user to a role. The tags can include a namespace and ID.
- One embodiment of the present invention comprises determining a pagelet web application from a tag in a first web application and inserting the pagelet web application into the display of a page of the first web application.
- A reverse proxy server adapted to receive user request for web application can obtain web application code for the first web application and interpret a tag in the first web application to indicate a pagelet web application. Pagelet web application code, from the pagelet web application and web application code, from the first web application, can be merged and a combined presentation can be provided.
- One embodiment of the present invention is a non-invasive way to insert pagelets into a web page. In some cases, it is desired to not modify the source code of a web page using pagelet tags. For example, the web application may be obtained from a third party or it would be otherwise undesirable or difficult to modify the web application code. In this embodiment, a proxy, such as a reverse proxy, can search for an identifier, such as a name or a code pattern, in the web page and then use this identifier to determine whether to insert the pagelet.
-
FIG. 4B shows one example of a non-invasive pagelet insertion method. In this example,proxy 420 keeps a table 422, or other data structure, that indicates what web page(s) a pagelet is to be inserted into. The table 422 can include an indication of the page that the pagelet is to be inserted into and an indication of the pagelet to be inserted. - In the example of
FIG. 4B , the table 422 indicates page “A.JSP” and pagelet “B”. When page “A.JSP” 424 is obtained by the proxy 420 fromsource 421 to send to abrowser 426, pagelet “B” 428 can be inserted into the displayedpage 430. - The table 422 can also include a location indicator that can indicate to
proxy 420 where in the web page to insert the pagelet. - The indication of page and location can be by pattern matching. For example, a search string can be indicated and each page with the string can have the pagelet inserted. In one embodiment, the web page indication can use Boolean operators such as “AND” and “OR”.
- Optionally, the table 422 can indicate wrapper code for the pagelet. In the example of
FIG. 4B , the wrapper code indicates that the pagelet is to be inserted into a table on the web page. The use of wrapper code can help the pagelet be used in different display contexts. - The table 422 can also optionally include attributes that are to be obtained from the page and provided to the pagelet. In the example of
FIG. 4B , the attribute is a title that is obtained from the web page and provided to the pagelet for display. This example shows extraction info and attribute name. The string indicated by the extraction info on the web page is given the value indicated by the attribute and then given to the pagelet. More than one attribute/extraction pair can be used to provide attributes to a single pagelet. - Looking at
FIG. 4B , in one embodiment, in step A, a request is received atproxy 420 for the first web application. Theproxy 420 gets the web application code from thefirst web application 421 in steps B and C. Theproxy 420 can then use thedata 422 to determine whether a pagelet is to be inserted. - In the example of
FIG. 4B ,web page code 424 is a page that a pagelet is to be inserted into. In steps D and C, the pagelet is obtained frompagelet web application 430. In step E, the pagelet 428 (pagelet B) is inserted into page 430 (Page A) to produce a combined application that is sent to thebrowser 426. - One embodiment of the present invention comprises determining a pagelet web application by recognizing a particular page in a first web application to indicate a pagelet web application and inserting the pagelet web application into a pre-configured section of a page of the first web application. The first web application page and the location to insert the pagelet web application can be determined either programmatically or by specifying a specific page or location directly. This embodiment allows a pagelet web application code to be inserted into a first web application, where the first web application code has not been modified prior to the first web application being proxied.
-
FIG. 5 shows an example of an interstitial page system. In this example, a request frombrowser 502 is received byreverse proxy 504 in step A. The reverse proxy server checks to see if the requested URL is associated with an interstitial page. If so, in step B, theinterstitial page 506 is provided to the browser without needing to accessweb applications - A reverse proxy server can produce interstitial pages to the user. The interstitial pages need not be generated with the web application code.
- The reverse proxy can block access to the web application until the specified interstitial pages have been processed.
- In one embodiment, the interstitial page HTML can comes from a separate web application. This allows you to write one web application that can provide interstitial pages to many web applications. Alternately, there can be different interstitial pages for different web applications.
- In addition, while interstitial pages usually come before you can access the web application, they can come at different points in the login cycle. Interstitial pages can be provided before logging in, and after logging in, in any combination.
- Different interstitial pages can be used for different resources, users, or other conditions.
- In one embodiment, at least one interstitial page is used to receive a user password as a warning page and/or a license agreement page. The interstitial page can include user info. In one embodiment, the user need not be signed in to receive the interstitial pages.
- An exemplary embodiment of a system using methods of the present invention is described below. The following exemplary embodiment is not meant to be limiting as to terms, definitions and the like. For example, language in this section is not intended to limit or define the claim terms but only to describe how the components work in the particular exemplary embodiment. This section merely describes one exemplary way to implement the present invention. Other architectures implementing the methods and systems of the present invention can be done.
- In one embodiment, Pagelets can be composed of two basic parts: a front-end pagelet tag and a Pagelet Engine. The pagelet tag can be used to insert a pagelet into HTML. The pagelet tag can then replaced by a reverse proxy server with the content of the pagelet. The Pagelet Engine can be a massively parallel pagelet processing engine that is used to retrieve multiple pagelets from back end resources simultaneously.
- Pagelet configuration information can be persisted in an IPersistentPagelet interface.
- The Pagelet Tag can be a simple tag that can allow one to specify the pagelet ID and include data to be passed to the pagelet. In one embodiment, there can be two kinds of data passed to the pagelet. The first is tag attributes, and the second is an XML payload. Standard XTM tag attributes in the pagelet tag (i.e. not pt: attributes) can be passed to the pagelet directly. The XML payload can allow the HTML author of the consuming page to include more complicated data to be passed to the pagelet.
- An exemplary pagelet tag can look like this:
-
< pt:ensemble.inject pt:name=”al-collab:discussion”discussionid=”21”> <discussion> <expandedmessages> <messageid>27<messageid> <messageid>36<messageid> <messageid>144<messageid> </expandedmessages> <currentmessage> <messageid>27</messageid> </currentmessageid> </discussion> </pt:ensemble.inject - Pagelets can be identified by a unique combination of namespace and pagelet name. These values can be constant when pagelets are migrated or moved to different servers. Pagelet names can be unique within a namespace. Namespaces are also known as Pagelet Libraries. Namespaces and pagelets can be concatenated together separated by a colon to provide a unique reference to a pagelet (i.e. financeapp:myvacationhours).
- The namespace can be any text string, such as “financeapp” or “Urn://www.mycomp.com/apps/finance”. The namespace can be a part of the pagelet. Namespaces need not be required to be between parent resources as customers may have several near-identical resources that differ only in security that each contains different, but related pagelets from the same back-end resource or multiple back-end resources. This can require a check for pagelet uniqueness within a namespace whenever new pagelets are created or pagelet namespaces are edited.
- A Pagelet Engine can allow the pagelet system to retrieve multiple pagelets simultaneously. In order to retrieve content, a client component can create a Request Chain composed of individual Requests. Each request can contain all of the information necessary to retrieve a single pagelet. This information can include the ID of the pagelet, the back-end resource URL, the pagelet attributes, and the XML payload.
- The Request Chain can then send off multiple HTTP requests to retrieve the data, and the data can be available to the client component after all requests have returned or timed out. The data can then be transformed and converted into a Markup Array.
- The Pagelet Request Flow can involve two passes through the HTML data. The first pass can collect the pagelet data and initiate content retrieval, while the second pass can convert the standard Adaptive Tags and replace the pagelet tags with the pagelet data.
-
- 1. User requests page from the Reverse Proxy Server.
- 2. The Reverse Proxy Server can retrieve main page content from remote server.
- 3. Transformer can converts HTML into markup fragments.
- 4. 1st pass through markup fragments can be done to convert URLs and retrieve pagelets and pagelet data.
- 5. Pagelet security can be checked
- 6. A Request Chain can be initiated for all the pagelets simultaneously and wait until all pagelet content is retrieved.
- 7. Return content can be processed for login pages.
- 8. Returned content can be processed for Adaptive Tags in individual tag engines.
- 9. Adaptive Tags in the main page can be processed. Individual pagelet tags can insert the processed pagelet content into the HTML output.
- 10. Transformed and processed HTML content can be returned to the end user.
- In one embodiment, pagelet tags work in place. The pagelet tags can be placed in a DHTML area so they can be refreshed individually. In one embodiment, an HTML page with placeholder data for slow pagelets can be returned. The Request Chain can be stored on the session and have it continue to retrieve the slow data in the background. Then, the end users' browser can initiate an AJAX request to the reverse proxy server for the additional pagelet content, which could then be filled in dynamically. This can mitigate the problem of slow pagelets.
- The Reverse Proxy System can manage Primary and Resource Authentication, as well as Primary Authorization. The Reverse Proxy System can determine if this user is logged in to the reverse proxy system using the correct authentication method to see this pagelet, whether this user has permission to use this pagelet, and perform Auto-login to remote pagelet servers.
- A login sequence for primary pagelet Authentication/Authorization can look something like this:
-
- 1. User requests page containing pagelets.
- 2. The reverse proxy server checks access on each requested pagelet.
- a. If user is logged in to the resource at the correct authentication level, but still does not have access to a pagelet, that pagelet can be replaced with an “Access Denied” HTML comment.
- b. If user is not logged in to the reverse proxy server, or is logged in at too low an authentication level, add to unauthorized pagelet list.
- 3. Alternately, the unauthorized pagelets can be replaced with login links to upgrade the user's session to the appropriate level.
- a. Authentication module can determine the highest auth level required by an unauthorized pagelet, and attempt to log the user in using that auth method.
- b. If login is successful, the Authentication Module can redirect the user to the original page.
- 4. If there are no unauthorized pagelets, retrieve and display the pagelet content.
- An auto-login sequence for pagelet remote servers can look something like this:
-
- 1. User requests page containing pagelets.
- 2. The reverse proxy server retrieves content for each requested pagelet.
- 3. LoginPageDetector is run on each pagelet response.
- 4. For each pagelet response that contained a login page:
- a. The Auto-login component is used to generate a new pagelet request to handle the login page.
- b. All of the new pagelet requests are sent off in parallel.
- c. Return to step 3 to process responses.
- 5. Pagelet responses (all non-login pages) are transformed and inserted into the output page.
- An auto-login sequence for pagelet remote servers that requires the user to fill out a login form can look something like this:
-
- 1. User requests page containing pagelets.
- 2. The reverse proxy server retrieves content for each requested pagelet.
- 3. LoginPageDetector is run on each pagelet response.
- 4. If a previously processed login page is returned (implying that login failed), the current request is stored on the session and the pagelet login page is displayed to the user.
- 5. The user fills out and posts the form.
- 6. The credential information is retrieved and stored in the credential vault (if enabled).
- 7. The user is redirected to the original page.
- Remote pagelet data can be checked for login requests by all Auto-login components (i.e. Form, Basic Auth, etc. . . . ).
- In one embodiment, there are two main requirements for Pagelet JavaScript and Style Sheets. The first requirement is that there be a way to put JavaScript and Style Sheets into the Head element of the HTML page. The second requirement is that duplicate .js and .css files only are included once per HTML page.
- Pagelet developers can mark their JavaScript & style sheet links to be included in the head using a special JavaScript tag (i.e. <pt:common.includeinhead>). Pagelet consumers can then need to include a special Include JavaScript Here tag (i.e. <pt:common.headincludes>) in the Head element of their HTML page. Pagelet JavaScript from the include-in-head tags can then be included in the output of the Head Includes tag. The Includes tag can also filter out duplicate .js and .css files.
- The head includes tag can be optional. If the tag is not present, then JavaScript and cascading style sheets can be added at the end of the head tag in the main page. If the main page does not have a head tag, a head tag can be added at the beginning of the page. This can require the Transformer to identify the head element when parsing the page. The headincludes tag can be used when control over the insertion of the pagelet JavaScript and Security Service within the head element is required. There need be no way to specify the order of includes from various pagelets.
- The includeinhead tag can work within a pagelet to add Style Sheets and JavaScript to the main page, but it can also be used directly in a main page. In one embodiment, since the includeinhead tag filters Style Sheets & JavaScript file includes to remove duplicates, a main page developer could include their Style Sheets & JavaScript includes in the includeinhead tag, which would ensure that there are no duplicate files included from the pagelet and main page.
- In one embodiment, during In-place Refresh, JavaScript and Style Sheets cannot be inserted into the head element, as it has already been displayed. Therefore, the includeinhead tag does not function in in-place refresh pagelets. In order to facilitate building simple in-place refresh pagelets, the includeinhead tag can be ignored during in-place refresh of a pagelet. This means that a pagelet author can use the includeinhead tag to insert JavaScript libraries into the main page the first time the pagelet is displayed on a page, but that the JavaScript libraries can not be re-included during in-place refresh of the pagelet.
- In transparent proxy mode, the transformURL function is only be used on pagelet content; general resource content doesn't need it. In non-transparent proxy mode, transformURL function is needed for all Javascript URLs.
- If a page requires transformURL function, then the reverse proxy server code can automatically insert to include the transformation Javascript library, as well as an initialization Javascript statement similar to the PTPortlet constructor in portal.
- In-place-refresh libraries: by default, pagelet content need not be set to in-place-refresh; by using an inplacerefresh tag, pagelet developers can turn on in-place refresh (IPR). With IPR turned on, all URLs within pagelet content are prefixed with JavaScript which does in-place refresh.
- If IPR is not turned on, they can manually insert the inplacerefresh tag around a URL to transform that URL into in-place-refresh link. (This tag can be applied to URLs in resource content as well).
- If a resource content page uses in-place refresh (through tags), or has a pagelet inside it which uses in-place refresh, the reverse proxy server can automatically insert the Javascript includes for in-place refresh on the page. Alternatively, the developer can add an inplacerefreshjslibrary tag on a resource or pagelet to make the reverse proxy server insert the in-place refresh libraries. Then the developer can be able to use the .refresh calls that Scripting Framework libraries provide.
- In-place refresh Javascript libraries can also contain Javascript Session Prefs functions in them. So if a resource uses session prefs, it can include the inplacerefreshjslibrary tag to tell the reverse proxy server to include in-place refresh Javascript libraries.
- Below is a list of exemplary public Javascript functions that Scripting Framework can support for developers:
-
- public static function getPageletByName (namespace, id) Returns a single portlet, given a namespace and portlet id (pageletname) NOTE: There is no restriction against having multiple pagelets on the same page which have the same namespace (since you can put the same pagelet on the page more than once), so portlet lookup by name in these cases is not guaranteed.
- public static function getPortletByUniqueID(id) Returns a single portlet, given a pagelet unique ID which is passed down via CSP.
- public static function getSessionPref(name) Get a single session pref
- public static function getSessionPrefs(names) Get multiple session prefs
- public static function setSessionPref(name,value) Set a single session pref
- public static function setSessionPrefs(hash) Set multiple session prefs
- public function clearEvent(eventName,eventNamespace) Clears the event listener for an event public function clearRefreshInterval( ) Sets the refreshInterval of the portlet to 0 and clears any current refresh timers.
- public function deleteSessionPref(name) Deletes a single session pref
- public function deleteSessionPrefs(array) Deletes multiple session prefs
- public function formGetRefresh(form) Requests updated content from the server by submitting a form GET request
- public function formPostRefresh(form) Requests updated content from the server by submitting a form POST request
- public function formRefresh(form) Requests updated content from the server by submitting a form
- public function getRefreshInterval( ) Returns the refreshInterval of the pagelet
- public function getRefreshURL( ) Returns the refresh URL of the pagelet
- public function raiseEvent(eventName,eventArgs,eventNamespace) Raise a new event
- public function refresh(url) Refresh the portlet content from the server, using URL if provided
- public function refreshOnEvent(eventName,eventNamespace) Associate portlet refresh action with a specific event public function
- registerForEvent(eventName,eventCallback,eventNamespace) Register to be notified of an event
- public function setInnerHTML(html) Sets the innerHTML of the pagelet from a string
- public function setRefreshInterval(refreshInterval,startNewRefreshTimer) Sets the refreshInterval of the pagelet
- public function setRefreshURL(url) Sets the refresh URL of the pagelet
- private function PTPagelet(namespace, uniqueid, containerID, refreshURL, refreshInterval)
- Constructor that the reverse proxy server can put in for every pagelet
- The Javascript library which does only transformation can have the following functions:
-
- private function transformURL(url) Transform a URL to be gatewayed
- private function PTPagelet(pageletid, containerID, remoteRequestURL, remoteBaseURL,
- resourcePrefixURL, resourceGatewayPrefixURL)
- Pagelet discovery can include retrieving a list of available pagelets and the following data about each pagelet:
-
- Pagelet name, description, and HTML sample code
- Pagelet parameters (name, description, type, and mandatory)
- Pagelet payload XML Schema URL
- pagelet meta-data (name value pairs)
- Pagelet consumer developers can go to an HTML page to find pagelet information. Pagelet developers/administrators can have the option of removing pagelets from this list. In one embodiment, since consuming resource security checks cannot be handled automatically, the list of allowable consumer resources should be included on the page.
- In order to simplify the reverse proxy server, this UI need not be hosted as part of the reverse proxy server, but should rather be combined with the login server. This can be available through a known URL, which can then be exposed through the reverse proxy server if desired. The reverse proxy server should come with a pre-configured resource that point to this known URL, although by default no one should be able to access the resource.
- Accessing the Pagelet Catalog UI need not require the reverse proxy server admin user login, although it can be secured via basic auth with a static user name. This security should be easy to disable. The pre-existing resource can be setup to auto-login using the static user name.
- This UI can be a simple set of jsp or jsf pages that access the reverse proxy server database and display the pagelet information. Ideally, this UI can also be available to be copied and hosted on a developer website or other location. However, since the pages can be dynamic, that can require the pages to be crawled or manually saved from a browser. The index links can also need to be rewritten to point to static pages.
- The UI can include both dynamic pagelets, and the tag libraries included with the reverse proxy server.
- In one embodiment, since performance is not crucial on the admin server, the pages need not be cached and can access the database for every page view.
- Pagelets can be discoverable programmatically. This can allow an application (such as Holland) to discover which pagelets are available to the current user. Since pagelet security is enforced programmatically, pagelet developers/administrators need not be able to remove their pagelet from this list (via the Publish checkbox). Since the Pagelet Discovery Client can always be running inside the context of a the reverse proxy server resource, the results can only contain pagelets that can be consumed by the current resource.
- A simple Java only API in the client can be provided that can allow an application to query for the available pagelets for the current user in the current request. The API can do automatic filtering of the results based on user access and consuming resource restrictions. The API can also allow filtering of the pagelet results based on other criteria, such as last modified. The queries can return either basic information about the pagelet, such as it's name and description, or full information for the pagelets.
- The queries can be processed by a simple the reverse proxy server based web service on the Admin UI box. The web service can require a valid the reverse proxy server security token from the client. The web service can query for the pagelets available to the consuming resource, and then evaluate the Security Service security policies for the pagelet parent resources to see which ones are visible to the user in the current request.
- In order to provide the correct security filtering, the current request information (i.e. user, IP, time, etc. . . . ) can be passed by the client to the web service. The EDK on the remote resource should already have all of the request headers and information necessary.
- The pagelet information can be published to a secured registry for programmatic discovery and IDE integration.
- Pagelet Discovery Web Service APIs can be exposed as a client-side API similar to the Embedded Development Kit (EDK). The client can be Java only and a Java Archive (JAR) can be provided as one of the reverse proxy server build artifacts.
- The underlying transport can be done by turning the PageletManager query class into a web service using RAT. The web service can return all query information in a single response, rather than sending individual requests for pieces of data. This means that a pagelet query could theoretically be quite expensive. The best practice for querying can be to query for pagelet info for large numbers of pagelets, and then query for the entire pagelet information for an individual pagelet, or a small number of pagelets.
-
public class PageletManager { public IPageletInfoQueryResult QueryPageletInfo(PageletFilter _filter, RunnerSecurityContext); public IPageletQueryResult QueryPagelets(PageletFilter _filter, RunnerSecurityContext); } public class RunnerSecurityContext { public RunnerSecurityContext(String _IPAddress, int _CurrentResourceID, String _RequestURL, OKHTTPHeaders _headers, RunnerSecurityToken, _token); } public class PageletFilter { public void addSearchProperty(PageletSearchProperty _property, String _value); public void addSearchProperty(PageletSearchProperty _property, String[ ] _values); public void setResultsRange (int _firstItem, int _lastItem); } public enum PageletSearchProperty { name, namespace, ID; } Public interface IPageletQueryResult { public int GetTotalResults( ); } public interface IPageletQueryResult extends IPageletQueryResult { public List<IPagelet> GetPageletResults( ); } public interface IPageletInfoQueryResult extends IPageletQueryResult { public List<IPageletInfo> GetPageletInfoResults( ); } public interface IPageletInfo { public int GetID( ); public String GetName( ); public String GetDescription( ); public String GetNamespace( ); } public interface IPagelet extends IPageletInfo { public string GetCodeSample( ); public string GetPayloadSchemaURL( ); public int GetParentResourceID( ); public Boolean GetIsAllowAllConsumers( ); public int[ ] GetConsumerResources( ); public List<IPageletParameter> GetParameters( ); public Map<String, String> GetMetadata( ); } public interface IPageletParameter { public String GetName( ); public String GetDescription( ); public String GetType( ); public boolean GetIsMandatory( ); } - When inserting a pagelet tag into a resource, developers can be able to specify an XML payload within a pagelet tag. That payload can be transferred to the remote tier over HTTP, within the HTTP request for the pagelet content.
- The payload can be sent in the body of a POST request—in our opinion, as discussed above, the pros overweigh the cons. Other CSP data can be sent in HTTP headers, as in previous protocols. Non-payload pagelet requests can be sent as GETs; requests with payload can be sent as POSTs.
- In order to encourage best practices around pagelets, sample pagelets can demonstrate the following principles/practices:
-
- How to describe how much screen real-estate a pagelet needs, as well as how the pagelet consumer can request the pagelet to display in a certain size.
- Skinnable using style sheets and can consume a common set of style classes (possibly based on WSRP/JSR168).
- How to include meta-data specifying the URL to an HTML or image prototype to show composite app developers what the pagelets can look like. This prototype can be hosted on the pagelet server.
- How to convert simple portlets to pagelets. This sample code can show, among other things, how to deal with portlet/user preferences that are available in portlets but not in pagelets.
- The sample pagelet code can look something like the following, although this is not a definition of the IDK API.
-
<%@ page language=“java” import=“com.plumtree.remote.pagelet.*” %> <% // get the pagelet idk IPageletContext pageletContext = PageletContextFactory.createPageletContext(request, response); IPageletRequest pageletRequest = pageletContext.getRequest( ); String styleSheetOverride = pageletRequest.getPageletAttribute(“StyleSheetOverride”); String pageletSize = pageletRequest.getPageletAttribute(“RecommendedSize”); // If the pagelet consumer has specified an alternate style sheet, use that if (null != styleSheetOverride) { %> <pt:common.includeinhead> <link type=“text/css” href=“<%=styleSheetOverride%>” rel=“StyleSheet”/> </pt:common.includeinhead> <% } else { // otherwise use the standard stylesheet %> <link type=“text/css” href=“/styles/mypageletstyles.css” rel=“StyleSheet”/> <% } // pagelet content //get the pagelet/portlet idk IPortletContext portletContext = PortletContextFactory.createPortletContext(request, response); IPortletRequest portletRequest = portletContext.getRequest( ); String settingValue = portletRequest.getSettingValue(SettingType.Portlet, “myPageletActionID); //if the entry has already been set, display it here if ((null != settingValue) && (myPageletActionID == “2”)) { %> <p class=“pagelet-notification-text”>Pagelet action successfully completed.</p> <% } %> <p class=“pagelet-standard-text”>Hello world style override pagelet content.</p> <% if ((pageletSize != null) && (pageletSize == “large”)) { %> // Display complete data in a table <% } else { // If the pagelet is supposed to display in small mode, just display a link to the data %> <a class=“pagelet-link” href=“datalink.html”>Click here to view complete data.</a> - The pagelet components list can include components that are used exclusively during pagelet processing, as well as other modules that are involved in the pagelet processing lifecycle.
- The Tag Engine can process both tags and pagelets. The Tag Engine Module can use the Tag Engine shared component to process the tags, and then processes the pagelets. This module can control the overall pagelet flow, utilize other components, and delegate processing to other modules.
- The same retriever can be used both for pagelets and regular resource requests. Retriever can know what type of request it is (through an argument passed to it) and may do some things differently (create multiple parallel requests for pagelets vs. only one for resources; different timeout; pass through different parameters to CSP library, etc).
- The reverse proxy server can support CSP features both on resources, and on pagelets. The reverse proxy server can support a subset of the portal's CSP features.
- There can be a CSP library (not a module) created which can handle adding/processing of CSP headers. This library can be called by retriever can appropriate arguments.
-
- public void ProcessCSPRequest(IProxyUserSession session, IPTWrappedRequest browserRequest, IOKHttpRequest remoterequest, IRunnerResource resource, ISessionPrefs sessionPrefs, int requestMode, String strConsumingURI, IPagelet pagelet, String strImageserverURI);
- public void ProcessCSPResponse(IProxyUserSession session, IOKHttpRequest remoterequest, IRunnerResource resource, ISessionPrefs sessionPrefs, int requestType);
- User Info, Roles, user id, user name, login token can be available off IProxyUserSession interface.
- Session Prefs can be available from ISessionPrefs interface. IRunnerResource object can contain a list of user info prefs, session prefs, login token sending info to send to remote tier.
- ImageserverURI and Consuming Resource URI (for pagelets only) can be passed into the CSP library by the retriever. CSP libraries can have different modes: regular (resource); pagelet, and in-place-refresh. The mode can be passed in by retriever.
- When pagelet data is retrieved from the remote server, it can be checked for login pages. This could happen the first time a remote server is accessed by a particular user, or if the session times out. The Auto-login Module can identify and process remote login pages for a resource, including pagelets.
- The Auto-login Module can run during the onTransformContent phase and process all remote responses for login pages. Since pagelet processing essentially duplicates normal page processing many times on a single page, the Auto-login component can be broken out into separate classes so that it can be used by both the Auto-login Module and the Pagelet processor (TagEngine Module). This can include both form based login and basic auth login.
- The Auto-login component can be used to check all pagelet responses for login pages. If login pages are detected, the module can be used to generate a login request for the remote resource. This can then be processed using the Retriever. The response can be checked again for login pages and used in place of the original response once the login cycle is finished.
- In order to maintain performance, pagelet responses can be checked for login pages, and then all login pages can be processed in parallel. Even though this is done in parallel, the login cycle for each pagelet could comprise multiple pages, which may mean all pagelets would have to wait until the pagelet with the longest login cycle had finished. A pagelet login is expected to be infrequent so this should not affect normal pagelet usage very much.
- In addition, if the credential vault is being used and login fails for a pagelet, the Auto-login Component (& Tag Engine) can display the login page to the user so they can login successfully. The Auto-login Component then needs to capture the login information from the user's request, store it in the credential vault, and then process the originally requested page.
- The Pagelet Discovery API can be a standalone web service. It can be deployed to the same embedded Tomcat server as the Admin UI and Login Server. There can be a Java-only client similar to the EDK.
- The Pagelet Catalog UI can be a simple set of JAVA Server Pages (JPS) Java Server Faces (JSF) pages that display a list of available pagelets and a detail view for pagelet information. This can be setup so it can easily be configured to be either protected by basic auth with a static username/password or unprotected.
- The UI can be a combination of static HTML pages generated by our tagdocs utility, and jsp/jsf pages to view the pagelets. The static tagdocs index can be included as a jsp include into the complete index. The PageletListBean and the PageletViewBean can handle data access using RMS.
- The reverse proxy server can provide both its own unique tags, as well as extensions to the common tags provided by the Portal. It can also provide the set of portal tags specified in the PRD. In order to maximize interoperability between pagelets and portlets, the portal can be upgraded to include the new common tags. The portal can also know to ignore the reverse proxy server tags, rather than treating them as an error.
- Exemplary Reverse Proxy Server tags can be included in the tag library:
- Auth Source Tag
-
Tag authsourcedata Description This stores a list of available auth sources for the currently requested resource in memory. The data is stored as a collection, and each item in the collection is a data object containing information about the auth source (id, name, description) accessible through the data object dot notation ($curauth.name). Attributes id The key used to store the data list in memory . . . scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. -
<pt:runner.authsourcedata pt:id=”authsources”/> <pt:logic.collectionlength pt:data=”authsources” pt:key=”numauths”/> <pt:logic.if pt:expr=”($numauths)>1”> <pt:logic.if-true> <!--display as HTML drop down --> </pt:logic. if-true> <pt:logic.if-false> <!--display as hidden input --> </pt:logic. if-false> </pt:logic.if> - Resource Link Tags
-
Tag resourcelink Description This stores the URL to a specific resource, if available, in memory. Attributes resourced The resource ID. id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. -
Tag resourcedata Description This stores a list of resources in memory that are available to the current user. The data is stored as a collection, and each item in the collection is a data object containing information about the resource (id, name, description, url) accessible through the data object dot notation ($curresource.name). Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. - These tags behave similarly to the ptdata tags in the Portal.
- Pagelets
-
Tag inject Description This tag is replaced with the output of the specified pagelet. Attributes namespace The pagelet namespace. id The pagelet ID. -
Tag pageletaccessdenied Description This tag displays a custom “access denied” error message when a user does not have proper security to see a pagelet. If this tag does not exist, a generic “access denied” message can be displayed, otherwise the contents of this tag can be shown. Attributes - The pagelet tag is simply the way to add a pagelet to an HTML page.
-
<pt:ensemble.inject pt:name=”al-collab:discussion” pt:id=”discussion” discussionid=”21”> <discussion> <expandedmessages> <messageid>27<messageid> <messageid>36<messageid> <messageid>144<messageid> </expandedmessages> <currentmessage> <messageid>27</messageid> </currentmessageid> </discussion> </pt:ensemble inject> <pt:ensemble.inject pt:name=”al-collab.discussion” pt:id=”discussion” discussionid=”21”> <pt:pageletaccessdenied> <B>Unable to display the current pagelet. Please contact your system administrator.</B> </pt:pageletaccessdenied/> </pt:esemble.inject> - Role Tag
-
Tag roledata Description This stores a list of the roles in memory that the current user has available. The data is stored as a collection, and each item in the collection is a variable containing the role name. This can be used with the foreach tag to iterate over role data. Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. - <pt:ensemble.roledata pt:id=“myroles”/>
-
Tag roleexpr Description This tag evaluates a role expression and stores the result in memory. It is designed to work with the logic.if tag. Attributes expr An expression consisting of the hasRole keyword followed by an application role. This expression evaluates whether or not the current user has the specified role. key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - <pt:ensemble.roleexpr pt:expr=“hasRole admin-role”/>
- User/Group/Role Picker Tag
-
Tag picker Description This tag selects a user/group/role and passes the result to the specified JavaScript function. Attributes form The form of the HTML element to display (link, button, or URL). If the form is URL, anything nested within this tag can not be displayed. Default is link. type The type of object to select (user, group, or role). multi A boolean specifying whether or not the user can select multiple items. Default to false. Jscallback The JavaScript callback. This method can be passed a 2d javascript array containing the type (user, group, or role), name, and ID of each selected item. - <pt: ensemble .picker pt:type=“user” pt:jscallback=“myJSCallbackfunc”/>
- This tag can output an HTML element that can display a pop-up page containing the picker. The picker can be a simple list with filter box, similar to the ones used in the reverse proxy server admin UI.
- Analytics Tag
- This tag may or may not be included in the reverse proxy server, depending on details of the Analytics integration.
-
Tag Analytics Description This sends an analytics event to the analytics server. Attributes Id The event id. Data The event data. - <pt: ensemble.analytics pt:id=“myeventid” pt:data=“myeventdata”/>
- The reverse proxy server Debug Tags
-
Tag debug Description These outputs debug information about the current roles or experience definitions (i.e. how did you get the current role and/or login page). Attributes Type The type of debug info to display (role or experience definition). -
<pt:ensemble.debug pt:type=”role”/> <pt: ensemble. debug pt:type=”experience definition”/> - The reverse proxy server In-place Refresh Tags
-
Tag inplacerefreshjslibraries Description This tag includes the JavaScript libraries necessary for in-place refresh on a page. Attributes -
Tag inplacerefresh Description This tag enables or disables in-place refresh on the current page. Attributes enable ‘true’ enables in-place refresh. ‘false’ disables in-place refresh. If this attribute is not present, in-place refresh is enabled for the contents of the tag, and then the previous in-place refresh setting is restored. -
<pt: ensemble.inplacerefreshjslibraries/> <a href=”full-page -url>normal link </a> <pt: ensemble.inplacerefresh pt:enable=”true”/> <a href=”in-place-refresh-url>in-place link</a> </pt: ensemble.inplacerefresh pt:enable=”false”/> or <pt: ensemble.inplacerefresh> <a href=”in-place-refresh-url>second in-place link</a> </pt: ensemble.inplacerefresh> - Common tags can be shared between the reverse proxy server and portal. They can include new tags (with the reverse proxy server specific implementations) and enhancements to the pre-existing general tag libraries for specific the reverse proxy server needs.
- Tags can be used for doing conditionals using tags. A variety of expr tags (such as the roleexpr tag) can store Boolean results for use by the if tag. This can simplify the if tag, and avoid the problem of having to figure out if the expression is an integer expression, a role expression, or something else.
-
Tag if Description This tag evaluates an expression and then displays either the if-true or if-false tag contents. Attributes expr A Boolean value. This can be input as an tag variable using the $ attribute notation (i.e. pt:expr=“$myboolean”). - The corresponding if-true and if-false tags do not have any attributes. They are simply displayed or not displayed depending on the results of the tag expr parameter.
-
Tag iftrue Description This tag is displayed if the surrounding if tag evaluates to true. -
Tag iffalse Description This tag is displayed if the surrounding if tag evaluates to false. -
Tag intexpr Description This tag evaluates an integer expression and stores the result in memory. Attributes expr An integer value or a tag variable, followed by an integer comparator, and then another integer value or tag variable. The tag variables must evaluate to an integer and be in $ attribute notation surrounded by parentheses. The following comparators are allowed: ‘==’, ‘!=’, ‘<’, ‘>’. key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. -
Tag boolexpr Description This tag evaluates a boolean expression and stores the result in memory. Attributes expr A boolean value or a tag variable, followed by a boolean comparator, and then another boolean value or tag variable. The tag variables must evaluate to a boolean and be in $ attribute notation surrounded by parentheses. The following operators are allowed: ‘&&’, ‘||’, ‘==’, and ‘!=’. key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. -
<pt:logic.intexpr pt:expr=”($numauths) > 1”/> <pt:logic.if pt:expr=”$if-result”> <pt:logic.iftrue> <!-- This is displayed if expr evaluates to true. --> </pt:logic.iftrue> <pt:logic.iffalse> <!-- This is displayed if expr evaluates to false. --> </pt:logic.iffalse> </pt:logic.if> - An alternate way of handling the expression tags is to have the arguments be tag attributes, rather than having an expression string that the tag parses. For example:
- <pt:logic.intexpr pt:value1=“$numauths” pt:operator=“>” pt:value2=“1”/>
- CollectionLength Tag
- The collectionlength tag can be necessary to enable conditional logic based on how many auth sources or resources are returned (i.e. empty, a single item, or a list).
-
Tag collectionlength Description This tag evaluates the length of a collection and stores the result in memory. Attributes data The key used to store the collection. key The key used to store the result in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - Variable Tag Enhancement
- This tag can be converted for use with the collection tag so that you can create collections of variables, in addition to collections of data objects. This can be useful for the rolesdata tag. The collection tag can also need to be updated to mention the new related child tag, as well as a warning not to mix data types in a collection.
- Error Tags
- These tags can allow the reverse proxy server errors to be formatted as desired on a custom error page. There are two ways to implement this. The first can require either adding an API to the Tag Engine to allow the reverse proxy server to set error messages for a user. The reverse proxy server can then need to set the error information before displaying an error page to the user. The second involves implementing the reverse proxy server specific error tags that meet a common error tag API specified by the tag engine.
-
Tag error Description This tag displays errors on the page so that they can be placed and formatted as desired. If the errortext tag is included inside this tag, the contents of this tag can only be processed if there is an error. If the child tag is not present, then the error messages can be formatted and displayed from this tag in the standard style. -
Tag errortext Description This tag displays the current error text on the page so that it can be placed and formatted as desired. Attributes text This attribute allows you to override the error text with text of your own choosing. -
<pt:common.error/> or <pt:common.error> <p> <pt: common.errortext/> <p/> </pt:common.error> -
Tag errorcode Description This tag stores the error code in tag memory. Attributes key The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - <pt:common.errorcode pt:key=“myerrorcode”/>
- User Info Tag
-
Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info. -
<pt:common.userinfo pt:info=”email”/> <pt:common.userinfo pt:info=”email” pt:value=”test@test.com”/> - Head Includes Tag Set
-
Tag includeinhead Description This marks JavaScript & Security Service links to be included in the Head element of the HTML page by the headincludes tag. If no headincludes tag is present, it can be included at the bottom of the Head element, or a Head element can be inserted if there is none. If a .js or .css file is marked for inclusion multiple times, it can only be included once. This tag can be ignored during automatic in-place refresh requests, although custom in-place refresh solutions can need to remove this tag during refresh to function correctly. Attributes -
Tag headincludes Description This tag allows JavaScript and Style Sheet include information to be added to a specific point in the Head element of an HTML page, as required by the XHTML specification. If a .js or .css file is included multiple times, it can actually only be included once in the Head element. Attributes - Main page HTML:
-
<head> <script type=“text/javascript” src=“http://acme.com/main.js”/> <pt:common.headincludes/> </head> - Pagelet HTML:
-
<pt:common.includeinhead> <script type=“text/javascript”><!--JavaScript --></script> <script type=“text/javascript” src=“http://acme.com/test.js”/> <link rel=“stylesheet” href=“http://acme.com/test.css” type=“text/css”/> </pt:common.includeinhead> - In one embodiment, in the reverse proxy server proxy, URLs for various links in the HTML returned by resources are transformed in the reverse proxy mode, but not for transparent proxy mode. For pagelets, URLs can be rewritten in the transparent proxy mode—Javascript refresh can have the same domain, machine name, and port as the main page, otherwise ugly browser warnings appear. Another reason for rewriting URLs is branding: customers want a consistent URL experience for their users in the URL. (i.e. machine name/host doesn't change).
- A “mini-gateway” for URLs inside pagelets can be used, both in transparent and reverse proxy mode. All URLs within can be rewritten with a following scheme, like the following:
- http[s]://includingresourcehost:port/includingresourcepath/PTARGS_pageletresourceid/pageletrelativeurl
- For example: Consuming resource with an external URL: http://runner.bea.com/crm/ can include a pagelet. Pagelet's parent resource can have internal URL: http://collab.bea.com/ and its ID in the reverse proxy server DB is 15. Pagelet has internal URL http://collab.bea.com/discussion/pagelet.jsp. Within the pagelet, there can be a link to http://collab.bea.com/discussion/viewthread.jsp.
- User can hit http://runner.bea.com/crm/main.aspx, which includes the discussion pagelet. The link within a pagelet can get rewritten to http://runner.bea.com/crm/PTARGS—15/discussion/viewthread.jsp. This link can be composed of the consuming resource URL followed by the PTARGS, pagelet ID, and the remainder of the link in the pagelet after the pagelet parent internal URL.
- Internally, mini-gateway can be a resource mapper which extracts resource ID from the URL and sets the appropriate resource on IntermoduleData. On pagelet URLs, it gets called instead of the regular resource mapper.
- Embodiments of the present invention can provide a proxy and SSO solution that interoperates with a portal product. In one embodiment, there can be three major components to: proxy, administration console, and core resource API. These can be called RProxy, Admin Console, and Core API respectively.
- In support of the primary components can be the additional, top level features of Auditing, Analytics, and Development Tools.
- RProxy can support two modes of operation: reverse and transparent. These two modes can interoperate seamlessly. The end user only needs to be aware of when DNS changes are needed; they do not need to know about the distinction between transparent and reverse proxies.
- In reverse proxy mode, RProxy can map resources based on the first part of the destination path in a request. For example, if a user requests proxy.external.com/resourceA/somepage.html then, according to user defined rules, the reverse proxy server map that traffic to resourceA.internal.com/somepage.html. This mode of operation requires content rewriting so that URLs in the HTML returned from a resource point to the reverse proxy server and not to the resource itself. Transparent proxy mode can use DNS configuration such that IP addresses of the desired, external hostnames point to RProxy. In this configuration, RProxy can use the request hostname to determine where to redirect traffic. For example, www.resourceA.com can have an IP address identical to proxy.external.com, and RProxy can accept a request to www.resourceA.com/somepage.html and redirects it to the internal address resourceA.internal.com/somepage.html—HTML content rewriting is required in this case. Alternatively, RProxy may map the resource to the internal address 192.168.1.2 and this host is configured with the hostname www.resourceA.com—in this case HTML content rewriting is unnecessary because the host resource A is configured using its externally facing DNS name, www.resourceA.com, which has a external DNS address mapping to the same IP as proxy.external.com. That is, www.resourceA.com returns URLs that point to itself at www.resourceA.com (instead of returning URLs that point to an internal hostname).
- Finally, these two modes can be used in combination such that www.resourceA.com has an IP address identical to proxy.external.com and www.resourceA.com/appB is mapped to resourceA.internal.com/appB. The users should be aware from the UI and from logs that a true transparent proxy case requires adding a new, internal only DNS entry that map to the internal IP address. This applies when the protected resource has an identical machine name to the external DNS name. For example, mail.ford.com can have an external IP address identical to RProxy. The protected resource can have a hostname of mail.ford.com as well. The user can manually add a DNS entry for an arbitrary internal hostname, say mail.internal.ford.com and map it to the internal address, say 192.168.1.2. When they configure an RProxy Resource, they can specify that mail.ford.com maps to mail.internal.ford.com. The machine mail.ford.com can retain its hostname internally and externally (so no URL rewriting is needed), and RProxy can know how to properly redirect the traffic.
- The following are general steps for processing a request. When the reverse proxy server proxy receives a request from the browser there can be several things that can to happen:
-
- 1) the reverse proxy server can determine which remote server this request refers to. For example: request for http://runner.plumtree.com/mail should be forwarded to the remote server named http://mail.plumtree.com. This stage is called Resource Mapping.
- 2) Also, the reverse proxy server can determine who the user is and potentially provide a way for the user to identify her. This stage is called Authentication.
- 3) Having mapped the resource and identified the user, the reverse proxy server can now determine if this user has access to the requested resource. This is the 3rd stage we call Authorization.
- 4) Assuming that Authorization stage succeeded, the next thing the reverse proxy server can do is to forward the request to the remote server and get the response. This stage can be called Retrieval.
- 5) Since the reverse proxy server provides application assembly functionality, the response from the remote server can contain some instructions for the reverse proxy server to do something. These are called tags the reverse proxy server also needs to re-write URLs within the response to make sure they point back to the reverse proxy server and not to the original server. This stage is called Transformation.
- 6) And finally, the reverse proxy server can send the response back to the browser. This stage is called PostProcessing.
- These stages can be conceptually the same for any kind of request, in other words, no matter if the reverse proxy server received an upload request or download request, WebDAV request or Secure Sockets Layer (SSL) request—the logical stages that the request has to go through can be the same. On the other hand, the behavior of each of the stages could be different for different kind of requests. For example, transformation stage does not do anything for responses containing binary data (images/word documents/etc). Another example is that URL re-writing rules are different for normal pages and pagelet responses.
- Another point to keep in mind is that logic to handle a particular type of request might span multiple stages. For example, a FormPickerModule can responsible for detecting login forms served by remote applications and automatically logging the users into those apps. In order to do this, it can add data to the request (retrieval stage) and examine the date of the response (transformation stage).
- RProxy can manage ACLs on Resource Objects to determine if a user (who has already authenticated with RProxy via SSO login) has access to a requested resource. The reverse proxy server uses Role Based Access Control (RBAC), based on users, groups, and roles as defined below.
- Furthermore, user customizable rules can be mapped to resources. For example, a rule can be created that says, “If a user is from IP address range 192.168.0.1 to 192.168.0.254 then always allow access.” Or, “if a user is accessing this from 8 am to 5 pm, allow access, otherwise deny.” Custom rules are the most likely use of scripting.
- RProxy can accept X.509 (PKI) certificates when establishing SSL connections with remote resources. There need be no certificate management for remote resources. Client certificates between RProxy and the browser user can be supported using SSL/TLS in the web application server itself. We can not support certificate configuration per resource.
- Single Sign On can enable a user to login to RProxy once and not login again until their SSO session times out or is explicitly logged out. SSO encompasses every aspect of login, authentication, interactive login pages, experiences, and rules. There are several different kinds of primary authentication (i.e. form, 3rd party SSO, basic auth, etc. . . . ), and different resources can require different kinds of authentication depending on their desired level of security.
-
FIG. 8A shows exemplary single sign on and authentication.FIG. 8B shows exemplary interactive login and interstitial pages. - In order to authenticate users to RProxy, a login page can be presented that allows the user to input their username, password, and specify an authentication source. Authentication may instead be automatic, as can be the case with Windows Integrated Auth. After authentication, an SSO cookie can be set that indicates the user has a valid login to the system, and the user should not be prompted for login again until this expires or the user can be logged out.
- Authentication sources can be portal specific and can supported via a tag that users can put into their login page.
- RProxy supports WML login pages through complete replacement of the login form, as described below.
- Anonymous access can use the same access and authentication mechanisms and need not be special cased within the code. Anonymous access does not require user authentication. For G5/G6 the reverse proxy server it can be not possible to create new users because the security service can be implemented using the portal.
- SSO Login supports kiosk mode: “is this a public computer?” When enabled, this causes cookie deletion under certain conditions (e.g. browser close) that might not otherwise occur. This can be similar to Outlook web access shared computer versus private computer.
- SSO Login supports kiosk mode through ssoconfig.xml. Users can disable the usage of cookies by specifying negative timeout values. Specifying a negative timeout value can cause the cookie to expire when the browser closes.
- In one embodiment, kiosk mode and cookie expiration may be moved from ssoconfig.xml to the experience definition.
- RProxy can allow customers to completely replace the login page UI. This can be accomplished by configuring an experience rule through an administrative UI to use a specified remote login page instead of the default page. This remote page can then be free to provide different experiences for users based on their locale, browser-type (i.e. wml/BlackBerry), requested resource, etc. . . .
- Login pages can be hosted on a remote server called the login server and the user can create new, custom login resources and experience definitions that refer to any remote host.
- In order for remote login pages to properly display, RProxy can provide access to the original HTTP Request information. This information can be used to determine what kind of page to display.
-
- HTTP Request Headers—All headers from the original request can need to be forwarded to the remote resource.
- Cookies—All cookies can need to be forwarded to the remote resource
- HTTP Request Data—The remote login resource can need access to the following data from the original HTTP Request: Protocol, Remote Address (IP), Remote Host, Scheme, ServerName, ServerPort, isSecure
- Requested Resource—Which RProxy resource can be being requested/accessed.
- Sample Login Pages
- The reverse proxy server can ship with sample experience definitions available in both JSP and ASP.NET. Those pages can include login, usage agreement and error pages. These pages can be internationalized.
- Any complicated pages can have both a simple version (installed on the reverse proxy server) and a complicated version that can not be active when shipped.
- The simple login page can prompt for the username and password. Depending on how many auth sources are available for the current resource, it can either store the auth source as a hidden input or display a drop down for the user to choose an auth source.
- The complicated login page can choose one of several login pages based on the user's request (i.e. from what subnet, in what language (this can only be a comment), what type of browser—blackberry).
- A guest user can have a distinct identity and may have user profile data. An anonymous user's identity can be unknown, though we may know key information such as their IP address. An anonymous user can not have user profile data or a credential vault. Both anonymous and guest users have session data (and thus, “session prefs”). Guest users need not exist in the reverse proxy server. There need be no way to create a new user in the security service.
- When a resource supports anonymous access, no authentication need be necessary. Any user can see the resource using an anonymous proxy user session or as a specific user.
- SSO logout occurs when a user clicks on a logout link that can be specified by an URL pattern for a resource. This URL pattern can be configurable through the admin UI. When this URL pattern is matched, the SSO logout procedure can fire. After that procedure is completed, the user can be redirected to the SSO logout page URL specified on the experience definition.
- There can be two cookies which manage/persist/recreate user sessions in the reverse proxy server: PTSSOCOOKIE and PERSISTEDPTSSOCOOKIE. Both cookies have timeout values that are configurable in ssoconfig.xml. The user can disable the use of both cookies by specifying a negative timeout value. Positive values for the timeout of these cookies can force them to be persisted to the user's hard disk.
- PTSSOCOOKIE—This cookie can be designed to be short-lived. The duration of this cookie can be enforced by linking HttpSessions to this object via a relationship managed by the LoginTrackingService. The relationship can be managed by the LoginTrackingService because this is the only object in the reverse proxy server that really manages application-scoped variables.
- Because a user's session exists across domains, application-scoped variables can be the only way to track and persist data across domains.
- When a user's HttpSession expires (this can occurs when the user is not actively using this httpSession), the death or invalidation of this HttpSession can be intercepted by a session listener called RunnerHttpSessionListener. This session listener can query the LoginTrackingService for all the active HttpSessions bound to this user. It can then remove the HttpSession which just expired. If after that, there are no active HttpSessions left for this user, the user can be removed entirely from the LoginTrackingService and the user's SSO session can have effectively expired. This can make it impossible for a user to reconstruct the reverse proxy server session by sending a PTSSOCOOKIE.
- PTSSOCOOKIE can be essentially linked to active HttpSessions. However, the removal of a user from the LoginTrackingService/Map triggered by the lack of active HttpSessions can be a weak form of logout. That means that if a PERSISTEDPTSSOCOOKIE is available (i.e., ssoconfig.xml has a positive value for this cookie's expiration and the user possesses one), the user's session can still be restored if the reverse proxy server receives a PERSISTEDPTSSOCOOKIE. However, if the timeout for PERSISTEDPTSSOCOOKIE is negative, then the removal of a user from the LoginTrackingMap can effectively force a user to log in again for his next reverse proxy server request.
- PERSISTEDPTSSOCOOKIE—Cookie can be designed to be a long-term cookie (such as 1 week). The cookie's expiration can be managed in two places: 1) on the cookie itself through the Cookie class, and 2) via the LoginTrackingService. We have redundancy to remove or mitigate the risk of a user being able to hack his cookie and extend the lifetime of his cookie. We achieve this by simply tracking the username and session expiration date on the LoginTrackingService. When a user sends a PERSISTEDPTSSOCOOKIE, that cookie's expiration time must validate against the LoginTrackingService before the server proxy server can recreate the user's session. PERSISTEDPTSSOCOOKIE need not be linked to a user's active HttpSession(s). Therefore, a user may not log into the reverse proxy server for a few days and still be able to use his PERSISTEDPTSSOCOOKIE to rebuild his previous reverse proxy server session. That can be the primary function of this cookie. It can be designed for low-security environments.
- URL PATTERN LOGOUT—When an URL pattern is detected as being a SSO logout URL, a user can be strongly logged out. This means that the reverse proxy server can go in and invalidate all known HttpSessions the user has registered. The reverse proxy server can also clear the user out of the LoginTrackingMap, which disables the recreation of a user's session via PTSSOCOOKIE. The reverse proxy server can finally set an expiration date to some time in the past in LoginTrackingService, which can disable the recreation of user session via PERSISTEDSSOCOOKIE.
- SSO login can perform authentication behind the scenes so that Active Directory, LDAP, and other identity source can be used to verify a username, password and other login credentials. The user can be unaware this is occurring; then merely login to the reverse proxy server.
- RProxy can delegate to the Security Service for authentication via an authentication source, such as Active Directory or the portal user database. We have abandoned any thoughts of integrating WebLogic Server or BEA Core Security for the Reverse Proxy Server Springbok.
- Proxy Authenticators
- In the PRD these can be referred to as “primary authentication.” These are the authenticators that fire from the proxy to a user's browser. They can be top level object and their authentication level and name can be changed. The order can be Currently, there can be a 1-to-1 mapping of authenticator to matching experience definition.
- There can be only one interactive authenticator (for interactive login pages). Aside from the interactive authenticator, the remaining authenticators are “integrated”. This can be legacy terminology. All authenticators, other than the form authenticator, are integrated.
- Security Service Login Token Timeout
- The Security Service plans to can have login token timeout. RProxy can provide a useful integration story for existing Windows Integrated Auth, Netegrity, Oblix, and other customers that have preexisting SSO solutions. Windows Integrated Auth and Netegrity/Oblix integration can occur via external authenticators.
- For WIA, the idea can be to write a web application for lls and enable WIA for that application. The application itself knows how to receive forwarded request from the reverse proxy server, authenticate the WIA user with the security service to generate a login token, the forward the login token back to the reverse proxy server to perform linegrated authentication to complete SSO login. WIA/Simple and Protected GSSAPI Negotiation Mechanism(Spnego) request diagram
-
FIG. 9 illustrates an exemplary request flow. - Summary of Request Flow
-
- 1. A user can open a browser and enters in an URL: http://www.runner.com/resource1
- 2. The reverse proxy server can intercept the request. The reverse proxy server can determine that the user doesn't have an access level high enough for /resource1. The reverse proxy server can determine that the only authenticator which can grant that access level can be the Spnego Authenticator. The Spnego Authenticator sets a 302 response to the spnego servlet: 302 http://www.runner.com/SpnegoServlet.
- 3. Browser can follow the 302 and does an HTTP GET www.runner.com/SpnegoServlet
- 4. The reverse proxy server can recognize that the user needs an anonymous session to access /SpnegoServlet. It can create one and fetches the /SpnegoServlet from the internal address of http://internal.bea.com/SpnegoServlet.
- 5. The request to http://internal.bea.com/SpnegoServlet can be handed to Tomcat. Tomcat can pass control to the Security Service Negotiate Filter. The Negotiate Filter can call the Security Service Negotiate Service to do some processing, but that can be left out of the diagram for simplicity. The Security Service Negotiate Service can recognize that this request need not be authorized because there are no Authorization headers on the request. It can respond with a 401 and sets the header WWW-Authenticate.
- 6. The reverse proxy server can pass the Filter's response back to the browser as is.
- 7. The browser can see the WWW-AUTHENTICATE header and, if properly set up correctly, can query SSPI for a security token for the service that returned the header. The SPN can be generally of the form <servicename>/<machinename>. User can query for these SPNs from LDAP.
- 8. SSPI can send the user's Ticket Granting Ticket to Kerberos. This Ticket Granting Ticket was given to the user after he completed his window's login. This Ticket Granting Ticket establishes this user's identity to Kerberos and can be used to retrieve a security token for the SPN which just asked the user to identify himself.
- 9. Kerberos queries Active Directory's LDAP repository for security data for the requested SPN.
- 10. Active Directory validates the user's TGT and returns a service ticket for the requested SPN.
- 11. Kerberos can relay this service ticket back to SSPI
- 12. SSPI can relay this service ticket back to the browser
- 13. The browser can encapsulate this service ticket into a security blob and sends it back as an Authorization header.
- 14. The reverse proxy server can grant anonymous access to internal.bea.com/SpnegoServlet as before, except this time the request has an Authorization header containing the SPNEGO security blob.
- 15. Security Service Negotiate Filter can receive the request from the container. It can call the Security Service Negotiate Service to examine the contents of the Authorization header.
- 16. The Security Service Negotiate Service can parse the SPNEGO security blob and does basic validation (i.e. verifies that this is a valid SPNEGO token). If this validation fails, Security Service Negotiate Service can NOT instantiate a SPNEGO Token object. User can verify this in ptspy. If the token validates, Security Service can call JGSS to extract the user identity from the SPNEGO security blob. Security Service can then call JAAS to log this user into a provider. This provider can be swappable and can be an LDAP provider. This can be replaced in m7 by a Virtual Provider to speed up efficiency and eliminate some extraneous LDAP calls. After the user has been validated against the provider, Security Service can wrap the JAAS subject into a wrapper class called an Identity. This Identity can then be stored on the HttpSession. After that, the Negotiate Service returns control to the container.
- 17. Tomcat can call the SpnegoServlet.
- 18. SpnegoServlet reads the Security Service Identity off the HttpSession. If one is found, the servlet can return security data (username, ssovendortype, etc) in the form of http headers.
- 19. The reverse proxy server can parse the response for the security headers. If they are found, the reverse proxy server can validate this user against Security Service over SOAP. This is not in the diagram. If Security Service validates the user, the reverse proxy server can create an Identity for the user and grant the access level associates with the Spnego Authenticator. It can also flush a 302 to the response buffer to the original resource that the user requested in step 1 (i.e. 302: Http://www.runner.com/resource1). It can also send back the reverse proxy server cookie which contains the access level that the user has acquired.
- 20. The browser sees the 302 on the http response and follows it (i.e., issues a HTTP GET: www.resource.com/resource1). The browser can also attach the cookie that was attached in the previous step.
- 21. The reverse proxy server can examine the request and can find a cookie with an access level equal to that which is associated with the Spnego Authenticator. The reverse proxy server can authorize the request to /resource1 and retrieve this resource for the user.
-
FIG. 10 shows an exemplary deployment of Spnego. - Diagram components can be briefly summarized. Further details can follow and are available on this wiki page.
-
- Security Service/Admin UI—Tomcat instance which serves both Security Service war and Admin UI war.
- Tomcat/RunnerProxy—Tomcat instance which serves Proxy war.
- Tomcat/LoginServer/SPNEGO Integration Servlet/BEA Security Service—Tomcat instance can host the login server war. At the time of this writing, the SPNEGO Integration Servlet can be deployed with this war, along with the BEA Security Service jars. These can be decoupled at a later point in time.
- sso.bat—a short .bat file can be temporarily set java opts to load jaas.conf
- jaas.conf—a short txt file can configure this Tomcat instance to run as a specific SPN. Also points to the SPN's keytab file.
- krb5.ini—a txt file containing information so that this server can know where to find various kerberos services
- Active Directory—Active Directory can be a term that can refer both to Window's Kerberos Authentication Services and Window's LDAP repository.
- AD User—A user that can be created. This user can be used as a container for a SPN which can run Tomcat.
- ServicePrincipalName(SPN)—An SPN can be an LDAP attribute that can be associated to a container object, such as a user. When a user wishes to authenticate with SPNEGO through their IE browser, the IE browser can query Active Directory and obtain a service ticket for the SPN which can be running Tomcat.
- WIA between the browser and RProxy requires sticky sessions or the browser would re-authenticate each time with RProxy. WIA between RProxy and remote resources in IIS requires cached connections identified by user, so the SSO cookie must have secure user information that cannot be spoofed.
- Remote Delegated SSO Integration Pages
- Since many current portal customers use custom SSO integrations for their own in-house SSO solutions, we need to support this in the reverse proxy server. In order to avoid customizations in the core RProxy code, we can use a remote integration framework. Rather than writing code integrations for Netegrity and Oblix, those can be provided as sample integrations using the remote framework.
- Customers with Oblix/Netegrity already installed can use their SSO solution to protect the cross-domain login form. This can then forward to a remote resource that can recognize the SSO cookie and return the data to the reverse proxy server.
- RProxy can detect that a user needs to be integrated against an SSO solution, the user can be forwarded to a remote servlet specified in the UI. That servlet can manage the interaction with the SSO product and retrieve the SSO credentials. These credentials can then be passed back to RProxy through headers. RProxy cab then create a new user session using those credentials.
- Experience Definitions and Rules
- An Experience Definition can contain a number of properties that can be used by the reverse proxy server to determine the user's experiences related to the user's primary authentication to the reverse proxy server (authentication source, login page, interstitial pages, etc), before an unauthenticated user can access a protected the reverse proxy server resource. An experience definition can be selected based on rules (experience rules), using conditions such as which resource being requested, the IP address of the request origin, and/or other supported condition types.
- Each experience rule refers to multiple resources that it can apply to. The experience rule contains at least the following:
-
Logging resource: Default Login Resource Associated resources: Resource1, Resource2, ResourceN Basic Auth, Interactive Login Page. - Windows Integrated Authentication
-
Internal login endpoint suffix: /loginpage.Jsp Internal interstitial endpoint /interstitialpage.jsp suffix: Internal error endpoint suffid: /errorpage.jsp Post logout external URL: http://anotherhost.bea.com/postlogout.jsp Maximum interstitial visits: 1 - An explanation of each of these fields follows:
- Login resource: this can be a normal resource under the covers but it has additional restriction. Its external URL determines where the user can be redirected to in order to begin the login sequence.
- Associated resources: these are the resources that the experienced can apply to.
- Associated proxy authentications: these are the authenticators that can fire if the experience is selected. The interactive authenticator always fires last.
- Internal login endpoint suffix: this suffix can be appended to the external URL prefix of the login resource to determine the loginpage endpoint, which can be where users are redirected at the start of the interactive login.
- Internal interstitial endpoint suffix: same deal but this can be for interstitials. Note that if the user wants to make interstitials come firs, they just flip the endpoints.
- Internal error endpoints suffix: same, but for errors. These pages only get visited when an error occurs.
- Post logout external URL: this URL can be visited after SSO logout occurs. If it's not specified, the user can be redirected to the original requested resource (then the SSO login sequence begins anew).
- Maximum interstitial visits: this can be the number of times a user can visit interstitial pages before causing an error. This prevents the user from not clicking the “I agree” in a consent page and visiting if forever, and also prevents accidental loops since the administrator can write customer interstitial pages.
- The experience delimitation's external URL login path, /login above, can be reserved by the login resource. This prevents any other resources from mapping to the login path(s). The path “/” alone can be an invalid external URL login path.
- Experiences can also have conditions that determine when it can be selected based on time of day, request IP, etc.
- The login and interstitial pages can make decisions about what to display to a given user/request (such as the language based on User-Agent, what style of page based on IIP addresses, etc.).
- They can also embed tags to be processed like any resource. RProxy can provide the login and error pages with relevant information: the original request headers, requested resource information, et al.
- If maximum interstitial visits is 1, there can be not maximum enforced for this experience definition.
- Interactive Login Sequence (Login Pages and Interstitials)
- In the examples, the primary login hostname can be proxy.runner.com. When the SSO login sequence can be initiated for a request, the following occur:
-
- 1. An experience definition can be chosen based on the original requested resource, the request itself, and the current user.
- 2. RProxy redirects the user to the external login endpoint:
- https://proxy.runner.com/login/loginpage.jsp
- During the login sequence, HTTP headers can be used to communicate information between RProxy and the login/interstitial/error pages. This can be similar to the CSP headers used between the portal and portlets. All relevant request information can be forwarded from the user's browser to the login pages via HTTP headers, such as User-Agent and IP address.
-
- 3. RProxy returns the login HTML content to the user, rewritten in the same manner as a normal relative resource, e.g. links are rewritten to point to the external URL login path: proxy.runner.com/login and so a post link to the original login page would go to:
- https://proxy.runner.com/login/loginpage.jsp
- a. If the login page is unavailable, a default login page can be returned from a local RProxy file as a fallback. Thus, even if the server hosting the login pages is down, user login can still occur.
- b. If the default is unavailable, an RProxy error page can be returned. This can be the user customizable page at errorpage.jsp or if that cannot be contacted, an error page from a local file, and if that is unavailable a hard coded error.
- 4. The user enters username, password, and authentication source information and submits the login page, which can be forwarded to the mapped internal login URL.
- a. The internal URL receiving the form post or get with query string can be responsible for parsing out the username, password, and other information and then responding to RProxy with empty HTML content but with the headers:
- runner_username=username
- runner_password=password
- (There are other headers, see LoginPageHeader in the code.) This means that for every login, an additional request can be sent to the internal login URL than otherwise might be necessary if RProxy was parsing username/password information from a form submission. The benefit can be that the user customized login page can parse the submission and use whatever fields they need. (This might be a requirement for ASP.NET or JSF components that create form and component IDs in sequence based on the other components on the page and therefore may have submit fields on a page that change.)
- RProxy detects the login headers and, instead of returning a response to the user's browser, attempts authentication with those credentials.
- b. If authentication fails, the user can be sent to the login page again, and tags or headers can be used to describe the error.
- a. The internal URL receiving the form post or get with query string can be responsible for parsing out the username, password, and other information and then responding to RProxy with empty HTML content but with the headers:
- 5. After authentication succeeds, a user session can be created but marked as attempting interstitials
- a. If interstitial pages are configured, RProxy redirects the user to the interstitial page endpoint. The user Meta data and other information can be sent in HTTP headers.
- https://proxy.runner.com/login/interstitialpage.jsp
- RProxy continues to forward user requests that are to:
- https://proxy.runner.com/login
- Until a page returns the HTTP header: runner_interstitial_complete=true. The interstitial sequence ends in error if either the maximum interstitial visits are reached or the header runner_interstitial_complete=false is returned.
- b. If the interstitial fails the user can be sent to the error page.
- a. If interstitial pages are configured, RProxy redirects the user to the interstitial page endpoint. The user Meta data and other information can be sent in HTTP headers.
- 6. When interstitial pages are complete or if none are configured, the user session can be logged in and the user can be redirected to the original requested resource.
- SSO sends the following 302 redirects to the browser:
-
- To a login domain
- e.g. when the requested domain crm.bea.com is not the primary SSO cookie login domain of proxy.plumtree.com
- To a login page after integrated authenticators fail for a resource or if there are none
- To the interstitial page after login page completion
- To the original requested resource after login success
- To an error page when an error occurs
- To a login domain
- There are several different ways that the reverse proxy server can authenticate the user to the back end-resource:
-
- None (Authentication disabled)
- Basic/Digest Authentication
- Form based Authentication
- Delegated Authentication (Windows Integrated, Netegrity, Oblix, etc. . . . )
- No Authentication
- By default, the reverse proxy server can not authenticate the user to the back-end resource. This handles the case of anonymous access back-end resources, as well as the case where a company, due to security concerns, does not want the reverse proxy server to manage user passwords in its Credential Vault.
- Basic/Digest Authentication
- The reverse proxy server can provide a way to authenticate a user using basic/digest authentication. This involves detecting the authentication challenge header in a resource response and resubmitting the request with the appropriate user credentials. This can be essentially a simpler version of the Form based Authentication solution described below.
- The Basic/Digest Authentication for a resource can check the HTTP headers of resource responses looking for authentication challenges. If a challenge is detected, the user's name and password can be supplied to the resource without the user seeing the challenge. If the response comes back again, meaning that an incorrect name or password was supplied, then the challenge can be passed on to the user. Once the user responds to the challenge, the reverse proxy server can add that username and password to the Credential Vault, if it is configured to be used.
- In order to setup Basic/Digest Authentication for a resource, the administrator can configure the username and password, similar to the form fields in Form based Authentication. There are three possible ways to fill out these values:
-
- User Profile—the value for the field can be retrieved from the user's profile data
- Credential Vault—the value for the field can be retrieved from the user's credential vault. There are two options for using the credential vault: automatic (The reverse proxy server handles all details), and choosing an element from a credential vault (this allows sharing credentials between resources, which should not be allowable by default).
- Constant—this type can be used to specify constant field values. Administrators enter a value for the field and that value can be used for all users in all cases.
- Form based Authentication
- Form based Authentication can be the most common form of login for web applications, although many enterprise web applications use some kind of SSO technology.
- The reverse server proxy can detect login pages, automatically fill them out and display the final page without bothering the user. If there is a login failure, the reverse proxy server can display the login page to the user and then store the credentials the user fills out for later use. This can be essentially a multi-app “Remember My Password” feature.
- Defining a Login Page
- Even though we call it login page detection, the reverse proxy servers feature can be a lot more generic than that. The reverse proxy server can detect particular pages and issue GET or POST requests in response to those pages, thus simulating a particular user action.
- Login pages are defined on the resource level by the administrator. Administrators can define several login pages. When defining a login page, the Administrator has to enter the following information:
-
- Login Page URL Pattern—a pattern that describes a set of URLs for a particular login page
- Login Page Text Pattern—a pattern that describes the particular content that identifies a login page. This also requires two Booleans to describe how to use the text pattern: Use for Login Page Detection and User for Action URL.
- Login Page Action URL—a complete URL of the page that can be used to submit the form data.
- Set of form fields that a login form contains. The following information can be specified for each form field:
- Field name—the name of the input element in the HTML form
- Field type—the type of the value. This attribute describes where the reverse proxy server should get the value for the field when doing automatic form submission. Possible values are
- User Profile—the value for the field can be retrieved from the user's profile data
- Credential Vault—the value for the field can be retrieved from the user's credential vault. There are two options for using the credential vault: automatic (The reverse proxy server handles all details), and choosing an element from a credential vault (this allows sharing credentials between resources, which should not be allowable by default).
- Default—in case when the field has a default value (i.e. <input type=“hidden” name=“query” value=“blah”/>, Administrator can choose Default type to tell the reverse proxy server to extract this default value from the form and use it in the form post.
- Constant—this type can be used to specify constant field values. Administrators enter a value for the field and that value can be used for all users in all cases.
- Field value—depending on the type the value might be ignored (Default type) or refer to the constant that can be sent to the remote server (Constant type) or refer to the name of the user profile or credential vault setting.
- It can be important to remember that the main purpose of this feature can be to automate logins into remote applications. In some cases logging in might be a multi-step process. In order to support such cases, the reverse proxy server can allow defining multiple login pages for a single resource.
- Login Page Detection
- Detecting login pages can be pretty trivial once the user has the right data. RProxy relies on the administrator to enter all the necessary data through the admin UI. Login pages are defined by 3 attributes: Login Page URL Pattern, Login Action URL and Login Page Text Pattern. Out of these 3 attributes only two are used during detection phase. Those are Login Page URL Pattern and Login Page Text Pattern. Login Page URL Pattern can be used to detect login pages based on the URL. For example, you know that the URL for the Plumtree portal's login page always looks like
- http://servername/porta/server.pt?* space=Login*
- Notice that Login Page URL Pattern only support * wildcard. It can not support any other wildcards.
- Sometimes the URL of the login form is always different (Amazon™). However, the login form always looks the same. This means that it can be possible to detect the login page based on the content of HTML returned from the remote resource. And this can be what Login Page Text Pattern is used for. Login Page Text Pattern can be a regular expression written using Java RegEx rules. When this field is specified, the reverse proxy server can check every page returned from the remote server to see if it matches the specified regular expression. For example:
- <form.*action=\″?(.*/sign-in[̂\″]*)\″?.*>
- The above regular expression can be used to detect login pages on the Amazon™ website. Basically, it looks for the form on the page with action URL that has a word sign-in in it. Notice the parenthesis; they are used to define a group within the regular expression. This means that when the reverse proxy server encounters a login form on the page that looks like this:
-
<form name=“sign-in” action=“/gp/flex/sign-in/select.html/102-6407777- 8688900?%5Fencoding=UTF8&protocol=https” method=“POST”>
it can extract the URL into a separate group. This means that the call to Matcher.group (0) can return the full <form name=“sign-in” . . . method=“POST”> string and the call to Matcher.group(1) can return only the action URL/gp/flex/sign-in/select.html/ . . . / . . . &protocol=https - This is a very important feature, especially in cases like Amazon™, where the Login Form POST URL can be dynamic. In order to support dynamic Form POST URLs the reverse proxy server can allow an administrator to leave the Login Form Action URL field blank when defining the login page and instead specify a regular expression that would extract the Action URL from the action attribute of the form.
- The Login Page Text Pattern can be controlled by two Booleans that specify when it should be used (i.e. for login page detection and/or Action URL extraction).
- The class that implements this logic can be called PTLoginFormDetector and can be in the FormPicker project.
- Each response can be checked against the entire set of login pages defined for that resource. This means that the more login pages are defined for a resource, the more time the reverse proxy server can need to check every response against all of them. We believe this is a reasonable compromise, but we need to performance test this piece of code.
- Since certain form pages only occur after the main login page (i.e. a usage agreement), we could only check for these immediately after another login form occurred, if there was a performance problem with checking for too many login forms.
- The reverse proxy server can send authentication data to remote resources, including HTTP headers and cookies. The reverse proxy server can also automatically perform form POSTs in order to submit user login data when remote resources present a login page so that the user does not see this login page. When form POST fails and the user cannot be logged in, they are presented with the remote resource login page.
- Login Data Submission
- The reverse proxy server can detect a login page it can try to automatically submit login data to the remote server, emulating a user filling out a login form. After we detect the login form we know all the information that we need to submit the data: Login Form Action URL and the list of fields. For each field we know its name, type and value. It can be therefore possible to iterate through the list of fields and generate either a body for the POST or a query string for the GET. Once we have the data and know the Action URL, you can submit the request to the remote server.
- When configuring login form info, the administrator can be able to select whether the form can be submitted as a GET or a POST. In a GET request, all of the form fields can be treated as query string arguments, or if there can be no form fields, the action URL can be sent as a plain URL. This feature can allow the reverse proxy server to simulate almost any action a user would take in response to seeing a particular page.
- Acquiring A User's Data
- In order for the reverse proxy server to automatically log a particular user into a remote application, the reverse proxy server has to know the user's credentials (username, password, etc.) How does the reverse proxy server acquire this information?
- When the reverse proxy server tries to generate a POST data to send to the remote server, it can try to go through all of the defined fields and get their values. At that time it can be possible to detect if the values for some of the fields have not yet been entered. When such a situation can be detected, the reverse proxy server can do two things: it can forward the login page to the user and it can set a flag on the user's session that indicates that a login page was just displayed to the user.
- Under normal circumstances, the user can fill out the login page as they normally would if the reverse proxy server was not installed. When the user submits the form, the information goes back to the reverse proxy server. At that point the reverse proxy server knows which login form was submitted (because of the flag on the session), it knows the names of the fields that need to be captured (those are the fields that did not have data entered for them) and it knows the data for those fields (since the user just typed all the information in and sent it to the proxy). Having all this information makes it trivial to extract the data from the browser's POST request.
- Dealing with Login Failures
- What happens when the user's password on the remote system has changed or expired? How does the reverse proxy server detect such cases and acquires new credentials for the user? When a user's credentials change on the remote system, sending old credentials that the reverse proxy server has stored can result in a login failure. Since we are dealing with web applications, login failures are usually dealt with in two ways: either the remote application just shows the login page again (possibly with some additional text) or the remote application shows an error page with a link that says “click here to try again”).
- Based on the assumptions laid out above, we can claim that when the same login page can be displayed twice in a row (without displaying any non-login pages in between), then this can be a good indication of a failed login. So, what about a case when an error page is displayed? It can be possible to reduce that case to the previous one by defining this error page as a login form in the reverse proxy server. Since the expected user action can be clicking on a link (GET request), the administrator can just define a new login page in the reverse proxy server's admin UI, leave the set of fields empty, set it to GET, and set the Login Action URL to the URL of the link (we can use a regular expression to extract that info). Voilà, we just reduced the case of separate error pages to the case of a repeated login page.
- When the reverse proxy server detects a failed login it forwards the login page to the user and then switches to the mode of acquiring credentials.
- Delegated Authentication
- The reverse proxy server can be able to authenticate a user to a back end resource using the credentials from a 3rd party SSO solution (i.e. Windows Integrated Authentication, Netegrity, Oblix, etc. . . . ). This can most likely involve forwarding the appropriate header to the resource.
- In some cases, before forwarding content from the remote server to the browser, the reverse proxy server has to transform the data that it had received from the remote server. There are several types of transformations.
- URL Re-Writing
- Consider a case when an internal resource with the URL http://mail.plumtree.com/ can be mapped through the reverse proxy server to the URL http://runner.plumtree.com/mail. When the user hits the reverse proxy server URL, her request can be forwarded to http://mail.plmtree.com/ and she can be presented with some HTML page. What should happen to the links on that HTML page that point back to the original URL? The user might not have direct network access to mail.plumtree.com and therefore such links should be re-written to point back to http://runner.plumtree.com/mail.
- The reverse proxy server leverages HTMLTransformer code from the portal to provide this functionality. You can learn more about this stage by looking at the code in the PTTransformerModule class. Such re-writing should only be needed in cases when the external URL can be different from the internal URL.
- Tag Transformation
- The reverse proxy server can be not only a proxy, but also a development platform for the composite application. One of the features that it provides to simplify the development of various applications can be support for adaptive tags. The idea is very simple: The reverse proxy server knows information about users, resources, security, etc. When an application includes a special tag into its HTML output, the reverse proxy server can find those tags and replace them with some user-specific data, or potentially perform some action of behalf of the remote application, etc.
- After a response is returned from a remote resource, tag processing occurs. Tag processing also occurs on login and interstitial pages. Identifying tags within the text of the response can be again done by leveraging the HTMLTransformer and Tag Engine code from the portal. The tag processing can be controlled by the PTTagEngineModule class. Tag processing can be implemented using the same Tag Transformation Engine as in the 6.0 Portal. This engine has been componentized so that it can be reused by RProxy.
- RProxy serves error pages in various contexts: login failure, maximum login attempts exceeded, permission denied when accessing a resource, et al.
- The error page displayed can be chosen based on the resource being accessed and the current experience definition (which contains the URL of the error page). Error pages can not vary depending on the type of error. The remote server can have complete control over the HTML of the error page, and can simply include the error message by adding an RProxy error text tag to the content. In effect, error pages can work the same way as login and interstitial pages.
- Error Request Information
- In order to properly support customization of Error UI pages, RProxy can provide the remote error pages with certain information. This includes the information necessary for login requests (described earlier—including HTTP Headers, cookies, and request information), as well as the following information:
-
- Error Type—What kind of error has occurred (i.e. Login, Request, Server, Other)
- Error Code—A code for the specific error that has occurred (i.e. Invalid password, remote server unavailable, no such resource).
- Error Severity—The severity level of the error (i.e. Warning, Error, Fatal).
- The actual error message can be included on the remote error page through an error tag. Providing error types and codes to the remote server can allow the error page to make the decision to display the error or not, or to replace it with a custom error message.
- The Adaptive Tag Engine from the 6.0 portal can be componentized and reused in the reverse proxy server. This involves several major tasks:
-
- Remove portal dependencies from codebase.
- Convert Tag Engine to Factory/Interface pattern in case the reverse proxy server needs different engine functionality than the Portal.
- Unify Engine implementation details into a single easy-to-use class.
- Write additional unit tests for the engine.
- The reverse proxy server can utilize and maintain a specific set of tags that can be common with the portal tag engine. This can include the existing core and logic tag libraries from the portal, including any upgrades and bug fixes to the tags. There can also be a common tag library which can contain tags thought to be common to all applications that could integrate with the tag engine (currently portal and the reverse proxy server). This library can include error and user info tags. The portal tag libraries can have to be upgraded to match the reverse proxy server in the future.
- In addition to providing support for the core engine tags (logic, html, i18n, etc. . . . ), the reverse proxy server can also need new tags to cover concepts only relevant to the reverse proxy server. These include:
-
- Resource Links (data tags similar to current portal navigation data tags)
- The Reverse Proxy Server Auth Sources (similar to current portal auth source tag, but per resource)
- Pagelets (front end to pagelets, can be discussed in detail below)
- The reverse proxy server Debug Tags for Roles and Experience Definitions (how did you get the current role and/or login page)
- The reverse proxy server Info Tags (Role & User)
- Analytics Tag (Add any analytics event you want)
- Paglets are composed of two basic parts: a front-end pagelet tag and a pagelet engine. The pagelet tag can be sued to insert a pagelet into HTML. It can be then replaced by the reverse proxy server with the content of the pagelet. The pagelet engine can be a massive parallel pagelet processing (mp3) engine that can be used to retrieve multiple pagelets from band end resources simultaneously.
- Pagelet Tag:
- The tag can be a simple tag that can allow a user to specify the pagelet ID and include data to be passed to the pagelet. There can be two kinds of data passed to the pagelet. The first can be tag attributes, and the second can be an XML payload. The standard xhtml tag attributes in the pagelet page (i.e., not pt: attributes can be passed to the pagelet directly. The XML payload allows the HTML authority to include more complicated data to be passed to the pagelet. A pagelet tag can look like this:
-
<pt:ensemble.inject pt:name=”al-collab:discussion”discussionid=21”> <discussion> <expandedmessages> <messageid>27<messageid> <messageid>36<messageid> <messageid>144<messageid> <expandedmessages> <currentmessage> <messageid>27<messageid> <currentmessageid> <discussion> </pt:ensemble.inject> - The massively Parallele Pagelet Processing (mp3) Engine can allows the pagelet system to retrieve multiple pagelets simultaneously. In order to retrieve content, a client component can create a Request Chain composed of individual Requests. Each request can control all of the information necessary to retrieve a single pagelet. This information includes the ID of the pagelet, the back-enc resource URL>, the pagelet attributes, and the XML payload.
- The Request Chain can send off multiple HTTP request to retrieve the data, and the data can be available to the client component after all requests have returned or timed out. The data can then need to be transformed and converted into a Markup Array.
- Pagelet Request Flow
- The pagelet request flow can involve 2 passes through the HTML data. The pass can collect the apgelet data and initiate content retrieval. While the second pass can convert the standard adaptive tags and replace the pagelet tags with the pagelet data.
-
- User request page from the reverse proxy server.
- The reverse proxy server retrieves content from the remote server.
- Transformer converts HTML into markup fragments.
- 1st pass through markup fragments can be done to convert URLs and retrieve pagelets and pagelet data.
- MP3 request chain can be initiated for all the pagelets simultaneously and waits until. All pagelet content can be retrieved for all the pagelets simultaneously and waits until all pagelet content can be retrieved.
- Returned content can be processed for adaptive tags in individual tag engines (pagelet tags not allowed).
- Adaptive tags in the main page are processed. Individual pagelet tags insert the processed pagelet content into the HTML output. Transformed and processed HTML content can be returned to the end user.
- Pagelet JavaScript and Style Sheets
- There are two main requirements for pagelet JavaScript and Style sheets. The firs requirement can be that there can be a way to put JavaScript and Style Sheets into the head element of the HTML page. The second requirement can be that duplicate .js and .css files only be included once per HTML page.
- Pagelet developers can need to mark their JavaScript and Style sheet links to be included in the head using a special JavaScript tag (i.e.<pt:common.incudeinhead>).pagelet consumers can then need to include a special Include JavaScript Here tag (i.e. <pt:common.headincludes>) in the Head element of their HTML page. Pagelet JavaScript from head tags would then be included in the output of the Head Includes tag. The Includes tag would also filter out duplicate .js and .css files.
- Security Model
- Two types of security exist in the reverse proxy server. The first can be security enforcement exercised on RProxy consumers, whose action can be to access a particular resource. This security can be managed through resource policies, and dictates whether a user has access to a resource. The second can be internal security exercised on RAdmin administrators, whose action can be to configure RProxy. This security dictates whether which the reverse proxy server constructs can be viewed or configured by a particular administrator.
- Proxy Security
- The reverse proxy server resource can be protected by its resource policy, which describes the conditions under which a user may be granted access to the respective resource, and the roles associated with those conditions.
- Resource Policy API
- The following interfaces compose the subsection of the Rules API that can be specific to policies:
- IResourceRuleFactory can be the entry point to policies. It can be used to generate an
- IResourceRuleService based on the CRE or Security Service implementations.
- IResourceRuleFactory:
- IResourceRuleService GetResourceRuleService(POLICY_ENGINE_TYPE)
- enum POLICY_ENGINE_TYPE {CSS, CRE}
- IResourceRuleService GetResourceRuleService(POLICY_ENGINE_TYPE)
- IResourceRuleService can be the main entry point to the policy rule manager and evaluator.
- IResourceRuleService:
- IResourceRuleManager GetResourceRuleManager( )
- IResourceRuleEngine GetResourceRuleEngine( )
- IResourceConditionTypeManager GetResourceConditionTypeManager( )
- IPolicyRuleEngine can be the run-time role evaluation engine.
- IPolicyRuleEvaluator
- List<IResourceRuleRole>getRoles(IRunnerIdentity user, IRunnerResource resource, Map context)
- IResourceRuleManager administers policies, rules, roles, and conditions.
- Creating a policy rule IResourceRule automatically creates the associated IResourceRuleRole and IResourceBackendRole.
- IResourceRuleManager: extends IRuleManager
- List<IResourcePolicy>GetPolicies( )
- IResourcePolicy GetPolicy(int policyID)
- List<IResourceRole>GetPolicyRoles( )
- IResourceRole GetPolicyRole(int roleID)
- IResourceRoleRule extends IRule
- IResourcePolicy GetPolicy( )
- IGroup[ ] getGroups( )
- void addGroup(IGroup)
- void removeGroup(IGroup)
- IUser[ ] getUsers( )
- void addUser (IUser)
- void removeUser (IUser)
- IResourceRole GetRole( )
- IResourceRole
- IResourceRoleRule getRule( )
- IResourceBackendRole getBackendRole( )
- IResourcePolicy getOwningPolicy( )
- IResourceBackendRole
- IResourceRole getResourceRole( )
- A default IResourcePolicy can be created when each IRunnerResource is created. In Springbok, there is one and only one policy per Resource.
- IResourcePolicy
- void addRole(IResourceRole role)
- void removeRole(IResourceRole role)
- IResourceRole[ ] getRoles( )
- IRunnerResource getOwningResource( )
- IResourceConditionTypeManager extends IConditionTypeManager. It simply limits the conditions that are retrieved, but adds no other functionality.
- Policy Evaluation
- When a request comes in to RProxy, the target resource and the incoming subject can be specified in the context Map. “Subject” encapsulates the following elements that describe the context of the request:
- the user's identity
- the environment under which the request can be being made
-
- the time of day
- the date
- the IP address of the requesting computer
- RBAC Security
- The policy of the requested resource can be then evaluated, which decides whether this particular request can be granted access in the form of a simple “YES” or “NO” answer.
- Security designs can be based on role-based security (Role-Based Access Control, or RBAC). To be clear, what this means is that a resource policy defines one or more roles that can access the resource, and describes what it means for a user to be in each of these roles. Then, an incoming subject can be granted access to the resource if and only if the subject meets the criteria of one of those roles.
- This can be in contrast to Access Control List (ACL) security, where control over a resource can be defined by a list of explicit users or groups that can access the resource. The ACL on a resource typically defines what actions can be performed on resource by each group. RBAC can be more easily managed than ACL security when there are many users and groups, which can be true in our case.
- For a given resource, a set of security roles can be specified. Each role can be composed of the set of users and groups that can be considered for this role, and a series of rules that describe the conditions under which a subject can be considered to be part of this role.
- The rules for a role are a series of conditions that are combined with the Boolean operators “AND” and “OR” and nesting to return a “YES” or “NO” decision on whether a subject can be in the role. Notice, the Boolean operator “NOT” can be unsupported for Springbok for purposes of semantic clarity.
- A rule condition can of the following types:
-
Number of Subject attribute Arguments Possible Value Types Possible conditions IP Address One An IPv4 or IPv6 address with Equals optional subnet mask Time Two 1st Arg: Time of Day Between (crossing over 2nd Arg: Time of Day midnight is valid) Date One or Two 1st Arg: YYYY/MM/DD Equals (one arg) or 2nd Arg: YYYY/MM/DD Between (two args) Day of Week One Weekday or Weekend Equals User Attribute Two 1st Arg: valid user profile Equals or Contains element 2nd Arg: a string with no regular expressions — One A rule (must already exist) Is True - Each resource has an associated policy, and each policy contains a set of defined roles. Each role can be a set of users and groups that can be considered for the role, and a set of rules under which a subject can be considered part of this role.
- An incoming request subject can be evaluated against each role for a particular resource, and if the subject can be found to be in one or more roles, the access decision can be “YES” and the set of matching roles can be then passed on to the protected resource as additional information.
- Security Service Rule Engine
- Security Service provides extensive flexibility in evaluating rules, and requires no external dependencies.
- Policy Implementation and Dependencies
- Resources policies have two distinct components; policy rule evaluation and policy persistence. On both accounts, policy rules and experience rules have the same structure of complex Boolean operators tying together conditional statements. Valid types of conditions overlap in both cases. The only notable architectural and functional difference can be that top-level experience rules are evaluated sequentially, while top-level resource policy rules are evaluated with Boolean operators.
- Clearly, the similarities in resource policies and experience rules beg for a common persistence API and rule engine. Referencing the Experience Rules section of this document, the strategy in persistence can be to construct rules that are stored in elemental form so that they can be modified and retrieved incrementally through a rule builder UI, and keep these rules synchronized with a rule engine.
- The proposed API for building rules in the Experience Rules section satisfy the requirements of Resource policies, as does the rule engine interface. However, the rule engine should be provided via Security Service's extensive rule evaluation capabilities rather than Portal 6.0's implementation of the Core Rule Engine.
- Security Service Integration Overview
- Security Service v1 provides an expressive set of security features, but has some constraints to which the reverse proxy server must work around in order to provide authorization via Security Service. Security Service works in the following way: Security Service provides a set of security services including authentication, authorization, and role mapping. Each of these services communicates through Security Service via a plug point and can be swapped in and out with different implementations of the same service. Because of this, each service can be called a “provider” and default providers come packaged with Security Service for each of the services. For example, the default role mapping provider can be implemented based on the XACML standard.
- Providers are swapped via mBeans, and security configuration can be also performed by manipulating mBeans. Run-time security evaluation can be performed via a separate set of interfaces.
- For role mapping, configuration may be not straightforward, because the XACML provider does not provide an interface for direct manipulation of XACML constructs. Manipulations are limited to the addition, deletion, and replacement of XACML policies. Policies can be passed in as either raw XACML strings or the Policy object that can be part of the CSS/XACML policy schema, which can be found at com.bea.common.security.xacml.policy (in cssenv.jar).
- Common Rules API
- Policies and experience rules are both constructed out of potentially nested and complex Boolean expressions, and based on product requirements, also share many of the same basic conditions. Because constructing a rule schema is a significant enough effort, it makes sense to share as much as the effort involved between the two as possible. Experience rules and Resource policies are different in functional aims but are distinctly similar in their form and composition. This has led to an effort to consolidate their design, API, and implementation as much as possible. The benefits of this are:
- elimination of duplicate efforts
- a common API allows for the potential for a shared management UI
- code reuse
- The following API defines generic interfaces for representing rules and expressions, including different types of operators and condition types. The rule management API for creating, loading, saving and deleting rules and expressions is also defined as part of the common interfaces. The goal of the common API is to provide a unifying interface for representing both resource policies and experience rules such that the different management consoles (UI) for these different types of rules can use the same API for managing and displaying the rules. In addition, common API encourages code reuses between resource policy and experience rule implementations.
- Definitions:
-
- Expression: a set of conditional clauses separated by operators (AND/OR) that evaluates to either TRUE or FALSE. The most basic expression consists of just a single conditional clause (e.g., [IP-address=192.168.0.1]). Expressions can be nested to form a more complex expression.
- Rule: an expression that is associated with an action, such that when the expression evaluates to TRUE, the action can be chosen/executed. In essence, a rule is an IF-THEN statement, with the expression being the IF part and the action being the THEN part. The action can be producing an object ID (for example, an Experience Definition in the case of Experience Rules) or just a Boolean outcome (for example, access or no-access in the case of Policy Rules).
- Rules API
- Java Package: com.plumtree.runner.rules
- Rule and Expression Interfaces
- IExpression:
-
- Property: int id
- Property: String name
- Property: String description
- Property: Date created
- Property: Date lastModified
- boolean isComplexExpression( )
- ISimpleExpression extends IExpression
-
- Property: int conditionTypeID // (e.g., Accessed Resource, IP address, Time, etc)
- Property: int conditionOperatorTypeID // (e.g., equal, greater-than, between, etc)
- Property: String conditionValueStr
- Property: String conditionValue2Str // (for condition types that require 2 input values, e.g., time condition that requires start time and end time)
- IComplexExpression extends IExpression
-
- Property: int operatorTypeID // (e.g., AND operator, OR operator)
- Property: Set<IExpression>subexpressions( )
- void AddSubExpression(IExpression s)
- void RemoveSubExpression(IExpression s)
- An expression is either a simple expression (i.e., the most basic expression containing only a single conditional clause), or a complex expression (i.e., containing sub-expressions joined together by a logical operator).
- The following properties are used by a simple expression to specify a conditional clause:
-
- conditionTypeID, which indicates what type of condition it is, e.g., IP address or time.
- conditionOperator, which indicates the type of equality/range operator (equal, greater than, etc) used in comparing the condition value.
- conditionValue, which is the value to compare the condition against, e.g., 192.168.0.1 for an IP-address condition type.
- The following properties are used by a complex expression to construct an expression tree:
-
- subexpressions, which lists the sub-expressions this expression depends on
- operatorTypeID, which indicates the relation between the sub-expressions, i.e., either the sub-expressions are AND-ed or OR-ed together, or negated (NOT-ed).
- IRule:
-
- Property: IExpression condition
- Property: int actionValue
- Property: int id
- Property: String name
- Property: String description
- Property: Date created
- Property: Date lastModified
- By definition, a rule is an expression that has an associated action value with it, such that when the expression evaluates to true, the action value can be used. If we think of nested expressions being a tree of sub-expressions (recursively), the top-level (root) node is the one that can be referenced by a rule (to form the expression for its condition).
- Condition Type and Operator Type Interfaces
- Examples of condition types can be Requested-Resource, or client-IP-address, time, etc. Given input values, a condition type can evaluate to either TRUE or FALSE. Most condition types take in only a single condition value (e.g., IP address==<value>) but some may take two condition values (e.g., time between <value1> and <value2>).
- IConditionType:
-
- Property: int conditionTypeID
- Property: String name
- EnumSet GetSupportedConditionoperators( )
- int GetConditionValueCount(Conditionoperator op)
- boolean Evaluate(Map context, ConditionOperator op, Object conditionValue)
- boolean Evaluate(Map context, ConditionOperator op, Object conditionValue1, Object conditionValue2)
- Object ConvertValueFromString(String strValue)
- String ConvertValueToString(Object value)
- enum ConditionOperator (EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, BETWEEN):
-
- Property: int operatorTypeID
- ConditionOperator valueOf(int operatorTypeID)
- enum OperatorLogical (AND, OR, NOT):
-
- Property: int operatorTypeID
- OperatorLogical valueOf(int operatorTypeID)
- boolean Evaluate(List<Boolean>subExpressions)
- Why do we have ConditionOperator and OperatorLogical in separate enums? ConditionOperator is an equality or range operator used in constructing a condition (which consists of a condition type, a condition operator, and one or two condition values), while OperatorLogical is used for constructing nested expressions that are joined together using either AND or OR operators, or negated (NOT). Since we cannot use a ConditionOperator in place of an OperatorLogical, and vice versa, it provides a better type-safe checking to separate the enum.
- Rules Management API
- Object Manager Interfaces (Management API)
- IExpressionManager:
-
- List<? extends IExpression>GetExpressions( )
- List<? extends IExpression>GetExpressions(Map contextFilter)
- IExpression GetExpression(int expressionID)
- ISimpleExpression CreateSimpleExpression( )
- IComplexExpression CreateComplexExpression( )
- void SaveExpression(IExpression expr)
- void DeleteExpression(IExpression expr)
- IRuleManager:
-
- List<? extends IRule>GetRules( )
- List<? extends IRule>GetRules(Map contextFilter)
- IRule GetRule(int ruleID)
- IRule CreateRule( )
- void SaveRule(IRule rule)
- void DeleteRule(IRule rule)
- IConditionTypeManager:
-
- IConditionType GetConditionType(int conditionTypeID)
- List<? extends IConditionType>GetConditionTypes( )
- Rules Architecture Strategy
- The strategy for the unified and experience/resource-specific issues is:
-
- Interfaces
- the core API for managing rules has been consolidated into one unified API
- experience rules and policy rules have specific managers as well
- experiences and policies have separate (non-shared) engines for evaluation
- Interfaces
- Experience Rules/Definitions
- In the reverse proxy server, an Experience Definition is a set of properties that defines a user's experience when logging in to the reverse proxy server and when using the reverse proxy server. Typically, use cases include selecting which login page to use (for the primary authentication), which authentication source to use by default, which error page to display when an error occurs, etc. An experience definition can be selected conditionally based on rules (experience rules), using conditions such as which resource being requested, the IP address of the request origin, and/or other supported condition types.
- An administrator can compose rules based on Boolean expressions (using AND/OR operators on conditional clauses). These rules can have priority (ordering) assigned to them and can be processed in order until the first match (i.e., the first rule that evaluates to TRUE). The output of this rule can be used to pick an Experience Definition for the current request.
- The scope of the implementations includes the following components:
-
- Native Rule Service component:
- Provides a basic implementation a rule engine that can evaluate rules and expressions defined in the common Rules API section, directly without relying on any external rule engine.
- Experience Rule component:
- Extends and implements the expression/rule interfaces defined by the common Rules API, specifically for experience rules implementation. Persistence of experience rules and the different condition types supported by experience rules can be implemented as part of this component.
- Experience Definition component:
- Experience definition is the “outcome” of executing experience rules, when the rule matches. The definition consists of a set of properties that can be specific to the reverse proxy server. Persistence of experience definitions is part of this component.
- Native Rule Service component:
- Native Rule Service
- This component provides a basic rule engine (rule evaluator) implementation that can evaluate rules and expressions defined in the Common Rules API section, natively (i.e., without delegating the evaluation process to any external engine).
- Interfaces
- Core Rule Engine Interface (Runtime API)
- IRuleEngine:
-
- int Evaluate(Map context)
- Core Rule Engine is the basic implementation of a native (built-in) rule engine. At runtime, the engine can be invoked and executed by calling the Evaluate( ) method on the rule engine passing in the input environment (context) containing the input data at the time of evaluation (e.g., the URL of the request, etc), which can be used by condition type objects to evaluate the expression.
- How the input environment (context) gets populated is specific to the underlying implementation of the condition type object. The common Rules API defines only the interface for IConditionType. The class implementation of the interface is the one that decides what key and value that it needs to store in the input environment.
- Native Rule Service Interface (Entry-point API for accessing the rule service)
- INativeRuleService:
-
- IRuleEngine getRuleEvaluator( )
- IExpressionManager getExpressionManager( )
- IRuleManager getRuleManager( )
- IConditionTypeManager getConditionTypeManager( )
- void setRuleEvaluator(IRuleEngine re)
- void setExpressionManager(IExpressionManager em)
- void setRuleManager(IRuleManager rm)
- void setConditionTypeManager(IConditionTypeManager ctm)
- INativeRuleFactory:
-
- INativeRuleService getRuleService( )
- The INativeRuleService is the entry point to get the rule-related services utilizing the built-in rule engine. From this, we can get access to the runtime API (IRuleEngine). We can get access to the rule and expression management API (IRuleManager, IExpressionManager). We can get the list of available condition types through the IConditionTypeManager. Each of these modules can be swapped with a different implementation of the same, since the INativeRuleService interface defines not only the getter, but also the setter for these different modules.
- Implementation
- For the implementation of the rule engine, we re-use and re-factor the G6 Portal Experience Rule Engine for native rule evaluation within the reverse proxy server. The IRuleEngine implementation can be the re-factored engine from G6 Portal. The IExpressionManager/IRuleManager implementation can use Hibernate-backed. We can implement such an IExpressionManager/IRuleManager within the Native Rule Service itself, or delegate those object manager implementations to the downstream component (upper layer) that uses and builds on top of the Native Rule Service (so that the downstream component can have more flexibility, for storing extra attributes in rules/expressions, or using different persistence mechanisms, etc).
- Other consideration: Security Service-Based Rule Service
- There is another option that we have considered for the rule service implementation that does not require a built-in core rule engine. For this option, both the runtime rule evaluation and the admin-time rule management rely on the XACML provider in Security Service. The rule engine implementation can delegate the actual work to the Security Service XACML provider. The expression/rule manager can use the MBean interface of the XACML provider to create/retrieve/update/delete rules (as XACML policies). One challenge with this option is that Security Service does not expose its internal/core rule engine directly; instead, its rule engine is wrapped inside an access-control/role mapping service interface, and hence the only way to access its rule engine is by making up some mock access-control requests and storing our generic rules and expressions as access-control policies (written in XACML). We may also need to maintain some meta-data outside Security Service to describe extra information not readily stored in Security Service. This approach seems counter-intuitive if what we focus on is a clean/elegant design for the Rule Service implementation. However, if code sharing and code maintenance is a priority, this should give us a nice way to delegate code development and maintenance of a rule engine to the Security Service team.
- We decided, for the purpose of experience rules evaluation, to just use and implement the native rule engine, instead of relying on Security Service.
- Experience Rules
- Experience Rule component builds on top of the Native Rule Service component, by implementing condition types specific for the reverse proxy server experiences, and implementing IExpression, IRule and object managers (IExpressionManager, IRuleManager, IConditionTypeManager) that know how to load and persist experience expressions, rules, and condition types for the reverse proxy server experience.
- Condition Types
- Following is the list of condition types supported by the reverse proxy server experiences:
-
- Requested Resource
- Client IP Address
- Time
- Day of Week
- Date
- Client Browser Type (User-Agent request header)
- Locale (Accept-Language request header)
- The client IP address condition type can be used to represent both IPv4 and IPv6 IP addresses. The comparison method uses regular expression to compare the IP-address string, allowing both exact match and wildcard match on an IP address. The IP-address-to-string conversion internally utilizes HttpServletRequest.getRemoteAddr( ) method that returns a string representation of the IP-address. Rule administrator can then create a regular expression to match the IP-address string.
- The Time condition type can allow range operators (greater than, less than) in comparing with a condition value, and use the server's time zone when displayed on the UI but can be converted to use UTC time zone when stored in the database.
- The list of available condition types for the reverse proxy server experiences at start-up can be predefined (“hard-coded”) or automatically discovered. Although we do not aim for extensibility (of allowing custom condition types) for the reverse proxy server v.1.0, we can design the architecture for discovering the available condition types to be flexible, and in a way that does not prevent customers from writing their own custom conditions in the later version of the reverse proxy server.
- To allow flexible settings for the list of condition types, we can either use an XML config file (based on openconfig, stored in the same directory as the reverse proxy server mainconfig.xml), or use a database table and seed the table during installation of the reverse proxy server. The setting contains a list of Java class names that implement the IConditionType interface that can be loaded and used by experience rules.
- Populating Input Environment for Condition Type Evaluation
- For an expression to evaluate to either TRUE or FALSE, e.g., (Client-IP-Address=192.168.*), we need to be able to obtain the client's IP address from the HTTP request object, and somehow pass that information down to the rule engine, which in turn delegates the evaluation to the corresponding condition type object, which can evaluate the input against the defined condition value (i.e., 192.168.*).
- The mechanism that we use to pass that information down is through a context map that we call input environment. Before the rule engine evaluates the rules, we need to populate the input environment using the data from the HTTP request and other information. Each of the condition type class implementations needs to implement this method with the actual code that extracts the information from the passed in parameters (HTTP request object and the reverse proxy server resource) and put the necessary information (needed by its runtime evaluation) into the input environment context map.
- Condition Type UI Renders'
- Since different condition types may have a difference UI, e.g., a resource picker for Requested-Resource condition, a date/time picker for date/time conditions, a set of 4 small boxes for IP-Address, we can employ a UI Renderer mechanism for rendering different condition types (for creation of expressions in the Admin UI).
- UI Renderer mechanism can be essential when we need to support extensibility later on, allowing customers to create their own condition type and plug that in to the Experience Rules. By defining the interface for the condition type as well as the renderer for it, customers may create a custom type and provide a renderer for it such that the custom type can (potentially) be discovered in the reverse proxy server Admin UI for creating experience rules.
- The mechanism of how a renderer is associated with a condition type can be scoped out in the reverse proxy server Admin UI project.
- API/Classes
- Java Packages:
-
- com.plumtree.runner.experience (for the interfaces)
- com.plumtree.runner.persistence.experience (for Persistent* classes)
- com.plumtree.runner.impl.experience (for the rest of the classes)
- IExperienceExpression extends IExpression, IPersistentObject
- ISimpleExperienceExpression extends ISimpleExpression, IExperienceExpression
- IComplexExperienceExpression extends IComplexExpression, IExperienceExpression
- IExperienceRule extends IRule, IPersistentObject:
-
- Property: int priority //(priority/positioning of the rule in relation to other rules)
- PersistentExperienceExpression extends PersistentObject implements ISimpleExperienceExpression, IComplexExperienceExpression
- PersistentExperienceRule extends PersistentObject implements IExperienceRule
- ConditionTypeBase implements IConditionType:
-
- void PopulateContext (Map context, HttpServletRequest request, IRunnerResource requestedResource)
- ConditionTypeResource extends ConditionTypeBase
- ConditionTypeClientIP extends ConditionTypeBase
- ConditionTypeTime extends ConditionTypeBase
- ConditionTypeWeekday extends ConditionTypeBase
- ConditionTypeDate extends ConditionTypeBase
- ConditionTypeBrowser extends ConditionTypeBase
- ConditionTypeLocale extends ConditionTypeBase
- IExperienceRuleManager extends IRuleManager (extending for covariant return types)
- ExperienceRuleManager implements IExperienceRuleManager
- ExperienceConditionTypeManager implements IConditionTypeManager
- Experience Service API (Entry-point API to access experience-related services)
- IExperienceFactory:
-
- IExperienceService GetExperienceService( )
- IExperienceService:
-
- IExperienceDefinition Evaluate(HttpServletRequest request, IRunnerResource requestedResource)
- IConditionTypeManager getConditionTypeManager( )
- IExperienceRuleManager getRuleManager( )
- For consistency with the other the reverse proxy server API, we should modify the IPersistenceService to add the following methods:
-
- IExperienceExpression createExperienceExpression(boolean isComplex)
- IExperienceRule createExperienceRule( )
- IExperienceExpression getExperienceExpression(int expressionID)
- IExperienceRule getExperienceRule(int ruleID)
- IExperienceExpressionSearch createExperienceExpressionSearch( )
- IExperienceRuleSearch createExperienceRuleSearch( )
- IExperienceExpressionSearch extends IRunnerSearch:
-
- List<lExperienceRule>performSearch( )
- IExperienceRuleSearch extends IRunnerSearch:
-
- List<lExperienceRule>performSearch( )
- The entry-point API for accessing experience rules can be the IExperienceService and the IPersistenceService, which both can be accessible from the IRunnerApplication.
- Experience Definitions
- Experience Definition (XD) is a set of properties that can be used by the reverse proxy server to determine the settings for user's experiences, primarily related to the user's primary authentication to the reverse proxy server (authentication source, login and interstitial pages), before an unauthenticated user accesses a protected the reverse proxy server resource.
- An experience definition is the outcome of running experience rules. Hence, the selection process of which XD to be used for the current request can be made conditional (and customers can define it) based on a number of things.
- Properties of Experience Definitions
- Each experience definition contains the following properties:
-
- Login Resource:
- A the reverse proxy server resource that provides the login/interstitial/error pages. This is a normal resource under the cover but it has additional restrictions. Its external URL determines where the user can be redirected to in order to begin the login sequence.
- Pre-login Interstitial Page URL suffix:
- A suffix appended to the external URL prefix of the login resource to determine the pre-login interstitial page endpoint (e.g., a page to display “System Down” message).
- Login Page URL suffix:
- A suffix appended to the external URL prefix of the login resource to determine the login page endpoint, which is where users are redirected at the start of interactive login.
- Post-login Interstitial Page URL suffix:
- A suffix appended to the external URL prefix of the login resource to determine the pre-login interstitial page endpoint (e.g., to display a “User Agreement” page or “Password expires in 10 days” message).
- Error Page URL suffix:
- A suffix for the error page. An error page only gets visited when an error occurs.
- Authentication Sources, and Default Authentication Source
- Authentication Method
- Post Logout Page URL:
- This URL is visited after SSO logout occurs.
- Max Interstitial Visits:
- This is the number of times a user can visit interstitial pages before causing an error. This prevents the user from not clicking the “I agree” in a consent page and visiting it forever, and also prevents accidental loops since the administrator can write custom interstitial pages. Set it to −1, if no maximum should be enforced.
- Login Resource:
- Persistence of Experience Definitions
- Hibernate-based persistence for experience definitions should be relatively straightforward. The relevant association mappings in experience definition:
-
- Many-to-many mapping from Experience Definition to Authentication Sources
- Many-to-one mapping from Experience Definition to Authentication Method (“proxy authenticator”)
- The reverse proxy server can obtain the list of available authentication sources from the Security Service. There can not be any DB table (like PTAuthSources in Portal) that stores the list of available authentication sources in the reverse proxy server schema, which the ExperienceDefinitions table can be joined with. Hence, authentication sources mapping in experience definition can use a simple (element) collection mapping.
-
<hibernate-mapping> <class name=“com.plumtree.runner.persistence.experience. PersistentExperienceDefinition” table=“ExperienceDefinitions”> ... <!-- authentication method --> <many-to-one name=”proxyAuthenticator” column=”AuthenticatorID” class=”com.plumtree.runner.persistence.resource. PersistentProxyAuthenticator” /> <!-- authentication-sources --> <property name=”defaultAuthenticationSourceID” /> <set name=”authenticationSourceIDs” table=”ExperienceDefinitionAuthSources” > <key column=”ExperienceDefinitionID” /> <element type=”integer” column=”AuthSourceID” /> </set> </class> </hibernate-mapping> - API/Classes
- Java Packages:
-
- com.plumtree.runner.experience (for the interface)
- com.plumtree.runner.persistence.experience (for Persistent* classes)
- IExperienceDefinition extends IPersistentObject
-
- Property: IRunnerResource loginResource
- Property: String interstitialPagePreLogin
- Property: String loginPage
- Property: String interstitialPagePostLogin
- Property: String errorPage
- Property: List<Integer> authenticationSourceIDs
- Property: Integer defaultAuthenticationSourceID
- Property: IProxyAuthenticator proxyAuthenticator
- Property: String postLogoutPage
- Property: int maxlnterstitialVisit
- PersistentExperienceDefinition extends PersistentObject implements IExperienceDefinition
- IExperienceDefinitionSearch extends IRunnerSearch:
-
- List<IExperienceDefinition>performSearch( )
- ExperienceDefinitionSearch extends PersistentSearch implements
- IExperienceDefinitionSearch
- Modify PersistenceService to add the following methods:
-
- IExperienceDefinition createExperienceDefinition( )
- IExperienceDefinition getExperienceDefinition(int expDefID)
- IExperienceDefinitionSearch createExperienceDefinitionSearch( )
- Runner-Experience Runtime Integration
- This section discusses the runtime integration points of the rule engine, experience rules, and experience definitions into the reverse proxy server's lifecycle of processing stages. Integration points include steps to discover the available condition types for the reverse proxy server experiences, to load experience rules from database, to initialize the rule engine, to populate the input environment map prior to executing rules for the current request, to execute the rule engine, and to integrate the resulted experience definition into the reverse proxy server's primary authentication module, and other places that need to get a handle of current definition (e.g., to redirect to an error page).
- Initialization
- The following activities can be performed during the initialization of ExperienceFactory/ExperienceService object, which is performed during PTApplication.init( ):
-
- Initialize ExperienceConditionTypeManager, which performs:
- Discovery of available condition types (from reading from a config XML file or from database)
- Instantiation of these condition type objects into a list that it maintains
- Initialize ExperienceRuleManager, which performs:
- Loading of experience rules from database
- The caching of the rules can rely on Hibernate's second-level cache.
- Instantiate a Native Rule Service instance, and set the condition type manager and rule manager to use the ExperienceConditionTypeManager and ExperienceRuleManager initialized in the previous steps.
- Initialize ExperienceConditionTypeManager, which performs:
- Rule Evaluation Time
- In processing of an incoming request, whenever we need an Experience Definition, we can call the runtime API IExperienceService.Evalute( . . . ). This API can run all the experience rules and return an IExperienceDefinition object. The following activities can be performed during the execution of this API:
-
- Populate the input environment (context) by iterating the available condition type objects and call PopulateContext( ) method on each, passing in the necessary runtime objects needed by the condition (e.g., HTTP request).
- Invoke the rule evaluator's Evaluate( ) method, passing in the input environment context generated in the previous step. The rule evaluator can internally check with the rule manager (ExperienceRuleManager in this case) for any new rules recently added (this should be transparent if we use Hibernate), evaluate the experience rules one by one until the first match, and return the object ID of the Experience Definition to be used.
- Retrieve and return the corresponding ExperienceDefinition object.
- Currently, the main downstream consumer of experience service is the SSOLoginModule (for the reverse proxy server's primary authentication). In SSOLoginModule.onAuthenticateUser( ) and its Login Manager classes, the experience rules can be evaluated to produce an ExperienceDefinition containing the needed data for authentication method (“proxy authenticator”), as well as login and interstitial pages if an interactive-login authentication method is selected.
- The list of authentication sources listed in the current ExperienceDefinition can be used to render the “authentication source” drop-down list, potentially through a the reverse proxy server tag.
- The default authentication source information in the current ExperienceDefinition can be used when no authentication source is specified by the user submitting the login form.
- It is up to the caller (downstream consumer) of experience service, whether to cache the result of evaluating the rules, or to invoke the rules every time an experience definition is needed. For better performance, the rule evaluation should typically not be invoked more than once per request handling cycle. For requests that do not need an experience definition, the rule evaluation should very well be skipped.
- Auditing
- Auditing is the examination of records or accounts in order to provide a clearer picture of what was going on at any given point in time. Towards that end, the reverse proxy server auditing module can be responsible for 3 main tasks:
-
- 1. Audit Recording—Gathering data from the following defined events and storing it in the reverse proxy server DB.
- a. Access Record—(Proxy) Information regarding the accessing of specified resources. (who, which, when, how)
- b. Authorization Configuration Record—(Admin UI) Information regarding any kinds of changes involving authorization policies, including the identity of the changer and the new policy definition.
- c. Resource Configuration Record—(Admin UI) Information regarding any changes made in resource configurations, such as authentication requirement levels.
- 2. Audit Retrieval—Retrieval of queried data, through the Admin UI, from the reverse proxy server DB. The data can be returned as a list of AuditRecord objects. The audit data can also be exported in CSV format to an OutputStream.
- a. The data retrieved can be provided in the following types of reports:
- i. Access Reports
- 1. Resource Access: Given a resource and time period, list all user access instances
- 2. User Activity: Give a user and time period, list all resources accessed
- ii. Authorization Change Report
- 1. Authorization: Given a resource, list all authorization changes over a time period.
- iii. Resource Change Report
- 1. Resource Changes: Given a resource name, list all resource changes over a time period.
- i. Access Reports
- b. The DB tables can be directly accessible to the user. Each audit type can have a table assigned to it. The Authorization Configuration Records and Resource Configuration Records each can also have a separate data table, to store the record-specific properties.
- i. Access Record—ACCESSAUDITRECORDS
- ii. Authorization Configuration Record—AUTHORIZATIONCONFIGAUDITRECORDS, AUTHORIZATIONCONFIGDATA
- iii. Resource Configuration Record—RESOURCECONFIGAUDITRECORDS, RESOURCECONFIGDATA
- a. The data retrieved can be provided in the following types of reports:
- 3. Current State of User Access Privileges (CSUAP)—Checking the Proxy server to determine the potential access privileges of any given user with their roles, or all the users who can potentially access a given resource with any of their roles. This can be done through the Admin UI. CSUAP data can not be exported.
- a. Accessibility Reports
- i. User Reach: Given a user, list all resources the user could potentially access, as well as the roles available.
- a. Accessibility Reports
- 1. Audit Recording—Gathering data from the following defined events and storing it in the reverse proxy server DB.
- Audit Events
- These are the 3 types of events to passed over:
- Generated when users access a specific resource that has been flagged for auditing.
-
- time—DB generated
- user name—unique, fully qualified, includes domain
- user type—the role used by the user to access the resource
- service name—machine name from where the record is generated
- access resource URL—external URL used to access the resource. Size cap of 256 characters.
- client IP address
- primary authentication method
- resource id
- Authorization Configuration Record
- Generated when any alterations are made regarding authorization policies.
-
- time—DB generated
- user name—unique, fully qualified, includes domain
- user type—the role used by the user to access the resource
- service name—machine name from where the record is generated
- action type—creation, change, or deletion
- resource id
- properties
- Generated when resource configurations are altered.
-
- time—DB generated
- user name—unique, fully qualified, includes domain
- user type—the role used by the user to access the resource
- service name—machine name from where the record is generated
- action type—creation, change, or deletion
- resource id
- properties
- Audit Recording Configurations
- Configuring audits can involve changes on specific resource objects. Both authorization configuration audit records and resource configuration audit records are active by default, and cannot be configured.
- Configurable on the resource object:
- Can be implemented using getAuditFlag( ) and setAuditFlag( ) methods in IRunnerResource
-
- Unique Resource Visit Access flags—record or ignore unique resource visits. Specific to each resource. All flags are off by default.
- These changes in audit configuration can be recorded as Resource Configuration Audit records.
- API
- The top-level class for the Auditing API is the RunnerAuditMgr, which implements IAuditMgr and can contain all the methods for writing and retrieving data to and from the reverse proxy server DB, using Hibernate. All auditing done through Hibernate can be implemented according to Transaction rules.
- AuditFactory implements IAuditFactory, and generates the RunnerAuditMgr to be used in the module.
- All persistent objects, except AuditRecord which is abstract, are created by the PersistenceService. The persistent objects are:
- AccessRecord, AuthorizationConfigRecord, ResourceConfigRecord, AuditRecord, and AuditData.
- AuditRecord objects are used by Hibernate to generate table rows. The AuditRecord class is abstract, and implements IAuditRecord, which contains methods that are shared across all audit records. There are three subclasses of AuditRecord, one for each specific type of audit record: Access, Authorization Configuration, and Resource Configuration. Each of the subclasses implements an interface.
-
- IAccessRecord for AccessRecords
- IAuthorizationConfigRecord for AuthorizationConfigRecords
- IResourceConfigRecord for ResourceConfigRecords.
- The 2 interfaces IAuthorizationConfigRecord and IResourceConfigRecord both extend the IConfigRecord interface.
- AuthorizationConfigRecords and ResourceConfigRecords can also contain a List of AuditData objects containing the properties data for the records. AuditData objects are not to be directly accessed by other modules; access to the data can be allowed through the enveloping AuthorizationConfigRecord and ResourceConfigRecord classes, through the getproperties( ) method.
- Instances of the class ResourceRolePair are returned in a list for CSUAP requests. This class can be in the common folder, and is to be treated as a primitive.
-
FIG. 12 illustrates an exemplary auditing API. -
Code Java Package: com.plumtree.runner.audit public class AuditFactory implements IAuditFactory { } public class RunnerAuditMgr implements IAuditMgr { public abstract class AuditRecord extends PersistentObject implements IAuditRecord { Property: long id - Hibernate-generated, unique sequence number Property: String serviceName Property: String resourceName Property: Date auditDate - Hibernate-generated Property: String userName Property: String userType Property: long resource_id } public class AccessRecord extends AuditRecord implements IAccessRecord { Property: String accessURL Property: String accessIPAddress Property: int accessPrimaryAuthenticationMethod Property: int accessResourceAuthenticationMethod } public class AuthorizationConfigRecord extends AuditRecord implements IAuthorizationConfigRecord { Property: List<AuditData> auditDataList Property: int actionType } public class ResourceConfigRecord extends AuditRecord implements IResourceConfigRecord { Property: List<AuditData> auditDataList Property: int actionType } public class AuditData extends PersistentObject { Property: long record_id Property: String properties Property: int pageNumber } public class ResourceRolePair { public void setResourceID(int _resourceID); public void setRole(String _role); public int getResourceID( ); public String getRole( ); } public interface IAuditFactory extends IRunnerModuleObjectFactory{ public IAuditMgr createAuditMgr( ); } public interface IAuditMgr { public void writeAudit(IAuditRecord_record); public List<IResourceRolePair> getCurrentUserAccessPrivileges(String _userName); public List<IAccessRecord> queryAccessReportByResourceID(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public List<IAccessRecord> queryAccessReportByUserName(String _userName, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public List<IConfigRecord> queryAuthorizationConfigReport(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public List<IConfigRecord> queryResourceConfigReport(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public int queryCountAccessReportByResourceID(long _resource_id, Date _startDate, Date _endDate); public int queryCountAccessReportByUserName(String _userName, Date _startDate, Date _endDate); public int queryCountAuthorizationConfigReport(long _resource_id, Date _startDate, Date _endDate); public int queryCountResourceConfigReport(long _resource_id, Date _startDate, Date _endDate); public void exportAccessReportByResourceID(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public void exportAccessReportByUserName(String _userName, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public void exportAuthorizationConfigReport(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); public void exportResourceConfigReport(long _resource_id, Date _startDate, Date _endDate, int _startIndex, int _maxResult); } public interface IAuditRecord { public Date getDate( ); public void setUserName(String _userName); public void setUserType(String _userType); public void setServiceName(String _serviceName); public void setResourceID(long _resourceID); public String getUserName( ); public String getUserType( ); public String getServiceName( ); public long getResourceID( ); public String getResourceName( ); } public interface IAccessRecord { public void setAccessURL(String _url); public void setAccessIPAddress(String _ipAddress); public void setAccessPrimaryAuthenticationMethod(int _primAuthentMethod); public void setAccessResourceAuthenticationMethod(int _resAuthentMethod); public String getAccessURL( ); public String getAccessIPAddress( ); public int getAccessPrimaryAuthenticationMethod( ); public int getAccessResourceAuthenticationMethod( ); } public interface IConfigRecord extends IAuditRecord { public void setActionType(int _actionType); public void setProperties(String _properties); public int getActionType( ); public String getProperties( ); } Public interface IAuthorizationConfigRecord extends IConfigRecord { } Public interface IResourceConfigRecord extends IConfigRecord { } - Implementation
- Audit Recording
- For all the writing of all audit records, the following sequence of steps can occur:
-
- 1. One of 3 methods in com.plumtree.runner.persistence.PersistenceService is called: createAccessRecord( ), createAuthorizationConfigRecord( ), and createResourceConfigRecord( ). An audit record object is returned, with its type depending on the method called.
- 2. The AuditRecord object is set with the proper data.
- 3. RunnerAuditMgr.writeAudit is called with the AuditRecord.
- 4. The generated AuditRecord can be persisted through Hibernate, and depending on its actual type (Access, Authorization Config, or Resource Config), can be recorded in the proper table or tables.
- Access Recording
- For AccessRecord objects, the method called in com.plumtree.runner.persistence.PersistenceService is createAccessRecord( ).
- AccessRecord objects can be persisted to the ACCESSAUDITRECORDS table.
- Authorization Configuration Recording
- For AuthorizationConfigRecord objects, the method called in com.plumtree.runner.persistence.PersistenceService is createAuthorizationConfigRecord( ).
- AuthorizationConfigRecords can be persisted to the AUTHORIZATIONCONFIGAUDITRECORDS table.
- In addition to the defined steps for all audit recording (See 8.4.1), the following can also occur:
-
- 1. When the AuthorizationConfigRecord is defined, member AuditData objects can also be defined.
- 2. When the AuthorizationConfigRecord is persisted through Hibernate, the AuditData data can be stored in the AUTHORIZATIONCONFIGDATA table.
- Resource Configuration Recording
- For ResourceConfigRecord objects, the method called in com.plumtree.runner.persistence.PersistenceService is createResourceConfigRecord( ).
- ResourceConfigRecords can be persisted to the RESOURCECONFIGAUDITRECORDS table.
- In addition to the defined steps for all audit recording (See 8.4.1), the following can also occur:
-
- 1. When the ResourceConfigRecord is defined, member AuditData objects can also be defined.
- 2. When the ResourceConfigRecord is persisted through Hibernate, the AuditData data can be stored in the RESOURCECONFIGDATA table.
- Audit Retrieval
- Retrieving the data can be implemented in 4 methods:
-
- queryAccessReportByResourceID
- queryAccessReportByUserName
- queryAuthorizationConfigReport
- queryResourceConfigReport
- Each method takes in a user name or resource ID, as well as a start date, an end date, a start index, and a maximum number of records to be returned. These define the necessary search parameters. A list of AuditRecords, with the actual class depending on the method called, can be generated, using Hibernate to access the DB tables. The records can be sorted by date, starting with the most recent. There are also 4 queryCount methods, which directly correspond to the query methods. They return the number of records retrieved from the given query.
- For the retrieving of all audit records, the following sequence of steps can occur:
-
- 1. Call to RunnerAuditMgr on the desired query method type, with the necessary parameters.
- a. queryAccessReportByResourceID
- b. queryAccessReportByUserName
- c. queryAuthorizationConfigReport
- d. queryResourceConfigReport
- 2. Use Hibernate with the parameters to generate a SQL statement which can retrieve a sorted list of AuditRecords.
- 3. Return list.
- 1. Call to RunnerAuditMgr on the desired query method type, with the necessary parameters.
- There are 4 methods which export reports, one for each query. Each performs a query on the corresponding tables, and creates a CSV-formatted string that is entered into a given output stream. The methods are:
-
- 1. exportAccessReportByResourceID
- 2. exportAccessReportsByUserName
- 3. exportAuthorizationConfigReports
- 4. exportResourceConfigReports.
- Current State of User Access Privileges (CSUAP)
- Given a user name, the current state of potential user access privileges can be determined by searching through all registered policies on the Proxy server, and checking each for accessibility to the user. The apps that the given user can potentially access in the current state, combined with the roles they can access those apps as, can then be returned as ResourceRolePair objects in a list. This can be implemented in the getCurrentUserAccessPrivilegesFromUser method.
- DB Tables
- DB Best Practices and Partitioning
- Since access audit records, when active, can cause the DB tables to increase significantly in size, and because only the reverse proxy server DB can be used for the audit records, DB partitioning can be recommended to prevent any adverse effects when accessing other tables in the reverse proxy server DB. In addition, best practices regarding the partitioning can be provided for customers.
- DB Table Structure
- Due to the nature of the queries supplied, indices are suggested for the following columns in each of the 3 types of AUDITRECORDS tables:
-
Time UserName ResourceID ResourceName - Also, regarding the Properties column in both AUTHORIZATIONCONFIGDATA and RESOURCECONFIGDATA, the information stored in Properties can not be handled in the same way as Property Bags in portal.
- The tables can not be kept in memory. HBM files can be used to implement this
- ACCESSAUDITRECORDS
- Primary Key: RecID
- RecID—NOT NULL, INT, DB/Hibernate-generated, unique sequence #
- Time—NOT NULL, DATETIME, DB/Hibernate-generated
- UserName—NOT NULL, VARCHAR(255)
- UserType—NOT NULL, VARCHAR(255)
- ServiceName—NOT NULL, VARCHAR(35)
- AccessIPAddress—NOT NULL, VARCHAR(39) (xxx.xxx.xxx.xxx OR xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx for IPv6)
- AccessPrimAuthenticationMethod—NULL, VARCHAR(20)
- AccessResAuthenticationMethod—NULL, VARCHAR(20)
- ResourceID—NOT NULL, INT
- ResourceName—NOT NULL, VARCHAR(255)
- AUTHORIZATIONCONFIGAUDITRECORDS
- Primary Key: RecID
- RecID—NOT NULL, INT, DB/Hibernate-generated, unique sequence #
- Time—NOT NULL, DATETIME, DB/Hibernate-generated
- UserName—NOT NULL, VARCHAR(255)
- UserType—NOT NULL, VARCHAR(255)
- ServiceName—NOT NULL, VARCHAR(35)
- ActionType—NOT NULL, TINYINT (1: creation, 2: change, 3: deletion)
- ResourceID—NOT NULL, INT
- ResourceName—NOT NULL, VARCHAR(255)
- AUTHORIZATIONCONFIGDATA
- Primary Key: RecID, PageNumber
- Foreign Key: RecID
- RecID—NOT NULL, INT, DB/Hibemate-generated, unique sequence #
- Properties—NOT NULL, NVARCHAR(2000)
- PageNumber—NOT NULL, INT
- RESOURCECONFIGAUDITRECORDS
- Primary Key: RecID
- RecID—NOT NULL, INT, DB/Hibernate-generated, unique sequence #
- Time—NOT NULL, DATETIME, DB/Hibernate-generated
- UserName—NOT NULL, VARCHAR(255)
- UserType—NOT NULL, VARCHAR(255)
- ServiceName—NOT NOT NULL, VARCHAR(35)
- ActionType—NOT NULL, TINYINT (1: creation, 2: change, 3: deletion)
- ResourceID—NOT NULL, INT
- ResourceName—NOT NULL, VARCHAR(255)
- RESOURCECONFIGDATA
- Primary Key: RecID, PageNumber
- Foreign Key: RecID
- RecID—NOT NULL, INT, DB/Hibernate-generated, unique sequence #
- Properties—NOT NULL, NVARCHAR(2000)
- PageNumber—NOT NULL, INT
- Analytics
- Tag Engine
- The 6.0 portal tag engine has been componentized so that it can be reused by RProxy and possibly other projects. This componentization includes removing any Portal dependencies, edits to the API to better serve both projects, and factory based creation of engine components. Converting the Tag Transformation Engine to use factories to retrieve internal components can allow RProxy or Portal to override common components if they have specific requirements that are not met by the componentized Engine. This can also aid in testing.
- Security Service
- Security Service—Current Design
-
- The current BID Security Service project can be used for:
- access the portal user and group directory
- access user profile elements
- access the capability and role store
- perform authentication
- access the user credential vault
- internal security (mainly for RAdmin) on the reverse proxy server objects.
- All these features can be needed by RProxy and RAdmin.
- The Security Service wrapper that is implemented for the reverse proxy server can provide us with role mapping and policy rule evaluation capabilities, which poses a strange problem. Why are security features split between two different services, the BID Security Service and the reverse proxy server Security Service Wrapper?
- The background behind this is that before the BEA acquisition, the BID Security Service was designed to be a one-stop-shop for all things directory related and security related. However, since Security Service already provides extensive functionality around security policies and role mapping, it is the clear choice for these features.
- Security Service provides these features as raw MBeans, which means there is no compile-time API. In addition, the reverse proxy server needs to feed the reverse proxy server objects and general constructs that have no equivalent in the Security Service API (for example, a Policy Rule Builder API). These reasons justify the construction of a wrapper API for Security Service that would be used internally for the reverse proxy server project.
- Directory Service and Security Service
- Since Security Service needs to be wrapped, and since BID Security Service is really more of a directory service with some miscellaneous security features tacked on, the logical solution is to:
-
- rename the current Security Service the more accurate title of “Directory Service” and have it provide exclusively directory related features
- consolidate the security features of Security Service and the current Security Service under a new, unified API that provides exclusively security related features
- The new API would be (appropriately) called the “Security Service”
-
FIGS. 13A and 13B show current and proposed security service architectures respectively. - Portal Experience Rule Engine
- The design and concepts of expressions and rule engine in Portal 6.0 can be reused for the reverse proxy server. However, the implementation of Portal's rule engine is tightly coupled with the portal code base, in a way that most of the rule engine implementation for the reverse proxy server would need a rewrite. In addition, there are additional re-factoring and restructuring of the API to make the rule engine generic and not tied to any persistence requirement.
- BEA Component Reuse
- Security Service Standalone Product
- Standalone Security Service can be used as the reverse proxy server's Rules Engine. To be specific, Security Service can provide the following functionality to the reverse proxy server:
-
- Resource Policy rule construction and evaluation, using the Security Service Xacml Authorization provider
- Resource Policy role mapping construction and evaluation, using the Security Service Xacml Role Mapping provider
- Experience Definition rule evaluation, using the Authorization provider
- CWAPI—The proxy Security API (Security Service Wrapper API)
- The said functionality of Security Service can be wrapped with an API for internal use by the reverse proxy server, which we can abbreviate as CWAPI. CWAPI speaks in the currency of the reverse proxy server constructs, but under the hood converts relevant objects into appropriate XACML strings in order to work with Security Service. For more information on CWAPI, refer to the section on Security Services.
- CWAPI Standalone
- As the reverse proxy server can be the first (and only) consumer of Security Service in the ALUI product line in the near future, the first version of the reverse proxy server can not expose CWAPI. However, depending on our findings during Springbok:
-
- the parts of this wrapper functionality that is relevant to Security Service might be absorbed back into Security Service itself
- alternatively, or in conjunction, the wrapper might be spun off and released internal to BID as a Security Service utility class for consumption by other ALUI products.
- Resource URL Mappings
- Resource registration requires entry of external and internal URLs. The user need not be concerned with whether these URLs represent a reverse proxy, transparent proxy, or combination; the user only needs to enter URLs.
- External URLs are what the user sees, are input into a browser, and are represented in requests to RProxy. When external URLs point to the RProxy hostname, no DNS changes are required. (This is the reverse proxy case.) External URLs that are not based on the name of the RProxy machine require DNS changes. (This is the transparent proxy case.)
- Internal URLs usually refer to machines on the intranet (though they could be out on the internet). These are the machines RProxy sends requests to and retrieves HTML content from.
- Requirements for a resource URL definition are as follows, with examples below.
- External URL(s) must either be a relative path like ”/a”, a hostname like “crm.bea.com” or “crm”, or a combination thereof “crm.bea.com/a”. Multiple URLs can be used as aliases for the same resource. It may contain either “http://”, “https://”, or omit the protocol. If the protocol is omitted, a request with either http or https protocols can match.
- Internal URL must specify a hostname “crm.internal.com” and may specify a path “crm.internal.com/a”. If no protocol is specified, http is assumed. Either http or https may be explicitly specified “https://crm.internal.com”. The external URL's protocol has no effect on the internal URL's protocol.
- Both external and internal URLs are stored in the database as normalized URLs. The request URL is normalized before determining the matching resource for the request URL. This is to avoid the problem if two different URL strings referring to the same physical URL location.
- The algorithm for matching a request URL involves three steps. First the protocol can be removed from the request URL. The resulting string then can be used to find a matching resource by from the most specific path to the more generic path. If no matching is found, the second step can use the request with protocol. If still no matching is found, the third step is to use on the path of the request URL.
- For example, the request URL is http://www.bea.com/path1/path2/resource, the first step can use www.bea.com/path1/path2/resource, www.bea.com/path1/path2, www.bea.com/path1, www.bea.com. The second step can use http://www.bea.com/path1/path2/resource, http://ww.bea.com/path1/path2, http://www.bea.com/path1, http://www.bea.com. The third step can use /path1/path2/resource, path1/path2, path1.
- Resource URL Mapping Examples
- In the following examples, proxy.runner.com refers to the reverse proxy server host. Each of the numbered entries below represents a distinct resource and below it, example http requests are provided.
- The format of the examples is:
- 1)
resource 1 external URL=>internal URL to map to - 2) resource2 external URL=>internal URL to map to
- http://request example=>internal rewritten request after mapping
- * Notes
- 1) /a=>crm.internal.com/a
- http://proxy.runner.com/a=>crm.internal.com/a
- * Base case for relative URL mapping.
- 1) proxy.runner.com/a=>crm.internal.com/a
- http://proxy.runner.com/a=>crm.internal.com/a
- When the reverse proxy server proxy's hostname is specified explicitly, the behavior is identical to a relative mapping.
- 1) /a=>crm.internal.com
- http://proxy.runner.com/a=>crm.internal.com
- http://proxy.runner.com/a/b=>crm.internal.com/b
- http://proxy.runner.com/a/b/c=>crm.internal.com/b/c
- * If a relative mapping strips the endpoint, as does 1) above when /a is excluded from the internal mapping crm.internal.com, it is stripped before being sent to the internal host.
- 1) /a=>crm.internal.com/a
- 2) /a/b=>crm.internal.com/a/b
- http://proxy.runner.com/a=>crm.internal.com/a
- http://proxy.runner.com/a/b=>crm.internal.com/a/b
- * Subpaths are supported; most exact match is used.
- 1) /a=>crm.internal.com/a
- 2) /a/b=>finance.internal.com/a/b
- http://proxy.runner.com/a=>crm.internal.com/a
- http://proxy.runner.com/a/b=>finance.internal.com/a/b
- * Subpaths even allow mappings to different internal hosts.
- * This case may require a warning to the admin user about unintended consequences if crm/a creates links to crm/a/b that are not meant to go to finance.
- 1) crm.bea.com=>crm.internal.com
- http://crm.bea.com/anything=>crm.internal.com/anything
- * Base case for transparent proxy mapping; requires a DNS update since the external URL differs from the reverse proxy server hostname.
- 1) crm.bea.com=>crm.internal.com
- crm [alias on the same resource]
- http://crm.bea.com/anything=>crm.internal.com/anything
- http://crm/anything=>crm.internal.com/anything
- * Multiple external URLs for a resource in a transparent proxy mapping; requests from the same domain need not be fully qualified.
- 1) finance.bea.com=>finance.internal.com
- drwho [alias on the same resource]
- finance.pt.com [alias on the same resource]
- http://finance.bea.com/anything=>finance.internal.com/anything
- http://finance.pt.com/anything=>finance.internal.com/anything
- http://drwho/anything=>finance.internal.com/anything
- * Multiple external URLs for a resource. Internal requests can use a DNS alias. Other hostnames can be mapped via DNS to the same resource.
- 1) /a=>finance.internal.com/a
- http://proxy.runner.com/a=>finance.internal.com/a
- http://proxy.runner.com/a/=>finance.internal.com/a/
- * Terminating/is ignored when matching request URLs against resources.
- * Terminating/is stripped from resources if they are entered in the admin console during resource definition.—It's unclear if this is acceptable.
- * The reverse proxy server itself does NOT distinguish between files and paths; the remote web server decides this.
- 1) proxy.runner.com/a=>crm.internal.com/a
- 2) http://proxy.runner.com/b=>https://crm.internal.com/b
- 3) https://proxy.runner.com/c=>http://crm.internal.com/c
- 4) https://proxy.runner.com/d=>crm.internal.com/d
- 5) proxy.runner.com/e=>https://crm.internal.com/e
- * If no http or https is specified as in 1) above, http is implied for the internal URL. For the external URL, either http or https can match.
- * The resource can specify http or https in the external URL and then ONLY the specified protocol can match. The internal URL can map to either https or http as shown in 2), 3), and 4) above.
- * An https connection can be forced internally but allow requests to an external URL via http or https, as in 5) above.
- 1) crm.bea.com=>crm.internal.com
- 2) /a=>finance.internal.com/a
- http://crm.bea.com/a=>crm.internal.com/a
- http://proxy.runner.com/a=>finance.internal.com/a
- * When an external URL seemingly conflicts with a relative resource as 1) does with 2) above, the most exact match is applied.
- * In this case, “most exact match” means hostname has a higher precedence than relative URLs.
- 1) /spaces are here=>crm.internal.com/spaces are here
- http://proxy.runner.com/spaces%20are%20here=>crm.internal.com/spaces%20are%20here
- * Special characters such as spaces are allowed in resource mappings. Internally, they are stored URL encoded. In the admin console UI, they are visible as spaces.
- 1) /a=>crm.internal.com/a
- 2) /a=>finance.internal.com/a
- 3) crm.bea.com=>crm.internal.com
- 4) crm.bea.com=>crm.internal.com
- 5) finance.bea.com=>finance.internal.com finance.pt.com
- 6) finance.pt.com=>finance.internal.com
- * Each of the above pairs are prohibited. Multiple resources cannot have the same external URL.
- 1) proxy.runner.com=>crm.internal.com/a
- 2) /=>crm.internal.com/b
- * Mapping the RProxy hostname without any path is prohibited.
- * Mapping a relative URL of/alone is prohibited.
- Allowed resource mappings from external to internal are “n to 1,” that is, “n” external request URLs can be mapped to only one internal URL, per resource. Resource mappings can allow configuration of authentication source options, login page, and something akin to experience definitions.
- Roles
- The Administration Console provides a means of managing users and groups in roles. This means that the Administration Console can most likely have a dependency on the security framework used in the reverse proxy server. This could mean that the Administration Console would also have to run in Web Logic Server.
- Pagelet Catalog UI
- The Pagelet Catalog UI can provide a left hand index and right side detail view, similar to our portal tagdocs. This UI can also display the tagdocs for the reverse proxy server tags. The left hand index can be split into 2 frames, an upper one containing the tag libraries and pagelet namespaces, and a lower one containing a full list of tags and pagelets. The right hand side can contain our standard tagdocs, or a single page showing all the details of a pagelet.
-
FIG. 14 shows an exemplary product UI catalog. - Persistent Object List
-
- IRunnerResource is the reverse proxy server resource object. There are two types of resources. A protected resource is a resource that represents a protected application. Each protected resource must have reference type association with an experience definition object. By default a protected resource can reference a default experience definition. The second type of resource is login resource, which must not have an association with an experience definition. A protected resource that is configured as HTML form based authentication can have value type association with multiple IPTResourceRemoteLoginInfo objects.
- IExperienceDefinition is an object that specifies login, interstitial, and error pages, as well as the default authentication source and authentication method for login. IExperienceRule is an object that defines the conditional clauses (expressions), which can be evaluated at runtime to select which IExperienceDefinition to use for the current request.
- IExperienceExpression is an object that defines the conditional clauses separated by operators (AND/OR) that evaluates to either TRUE or FALSE. IExperienceExpression is part of an IExperienceRule.
- IPTResourceRemoteLoginInfo is an object that contains all information for the reverse proxy server to be able to detect login page and authenticate for resources with HTML form based authentication. Its association with the IPersistentResource is of value type where the resource object is the containing objects, which means all persistence operation of this object should be done through the resource object.
- ILoginInputField is an object that contains HTML POST input field/value pair for HTML form based authentication. Its association with IPTResourceRemoteLoginInfo is of value type where the IPTResourceRemoteLoginInfo is the containing object.
- IPersistentPagelet is the pagelet object. Pagelets are contained within a the reverse proxy server resource object. It also references a list of consuming resources. In addition, pagelets contain a list of pagelet parameters.
- IPageletParameter describes a parameter in a pagelet tag. It is contained within a pagelet, and has no external references.
- IPersistentResourceMap maintains a mapping between external URL prefixes and resources. It is used to determine the requested resource when a request enters the reverse proxy server.
- IProxyAuthenticator is used to map an authentication level to an authenticator (i.e. basic auth).
- Non-persistent Object List
-
- IPagelet is an object that wraps an IPersistentPagelet and provides additional business logic, such as calculating the full pagelet URL.
- IPageletRequest is an object that holds all of the data necessary to process an individual pagelet, including a reference to the IPagelet object.
- Persistent Object Data
- Resource
- Interface: IRunnerResource
-
- String: Name, Description, Owner, Policy Owner, Pagelet Namespace
- List<String>: External URL Prefixes
- IOKURL: Internal URL Prefix, Internal URL Secure Prefix
- Boolean: Is Enabled, Audit Flag
- IResourceAuthenticationInfo: Authentication Info
- IResourceRetrievalInfo: Retrieval Info
- List<IResourceRemoteLoginInfo>: Remote Login Info
- List<IPersistentPagelet>: Pagelets
- IBasicAuthLoginInfo: Basic Auth Login Info
- List<IRunnerResource>: Linked Resources
- List<IResourcePart>: Resource Parts
- Int: Timeout
- IResourceCSPSettings: CSP Settings
- Interface IResourceAuthenticationInfo
-
- Boolean: Is Login Resource
- Int: Required Authentication Level
- List<String>: Internal Logout Patterns
- Interface IResourceRetrievalInfo
-
- Map<String, String>: Proxy to Remote Header Filter, Remote To Proxy Header Filter
- Interface IResourcePart
-
- String: Name, URL Pattern
- Interface IResourceCSPSettings
-
- boolean: Send Login Token
- List<String>: User Info Pref Names, Session Pref Names
- Remote Login Info
- Interface: IResourceRemoteLoginInfo
-
- String: Name, Form URL, Action URL
- boolean: Use Text Pattern For Page Detection, Use Text Pattern For Action URL, Submit Action As POST
- List<ILoginInputField>: Form Fields
- Interface: IBasicAuthLoginInfo
-
- ILoginInputField: Name, Password
- Interface: ILoginInputField
-
- String: Name, Value
- int: Type
- Pagelet
- Interface: IPersistentPagelet
-
- String: Name, Description, Code Sample, Pagelet URL, Pagelet Secure URL, Payload Schema URL
- IRunnerResource: Parent Resource
- boolean: Publish Docs, Allow All Consumers
- List<IPageletParameter>: Parameters
- Map<String, String>: Metadata
- List<IRunnerResource>: Consuming Resources
- Interface: IPageletParameter
-
- String: Name, Description, Type
- boolean: Is Mandatory
- Resource Map
- Interface: IPersistentResourceMap
-
- Map<String, Integer>: Resource Map
- Proxy Authenticator
- There can be several standard Proxy Authenticators that come with the product, and administrators can be able to create new Proxy Authenticators. The preexisting Authenticators can reference internal class names, but the administrators can only be able to configure Remote Proxy Authenticators (i.e. specify a URL, not a class name).
- Interface: IProxyAuthenticator
-
- String: Name, Description, Integrated Authenticator Class Name, Remote Integration URL
- boolean: Is Enabled, Is Interactive, Is Remote
- int: Authentication Level
- Non-persistent Objects
- Interface: IPagelet
-
- String: Pagelet Full URL
- Class: PageletRequest:
-
- IPagelet: GetPagelet
- Int: Pagelet Timeout, Error Code
- String: Content, Pagelet Name, Error Text, XML Payload
- Map<String, String>: Attributes
- IOKHttpRequest: HTTP Request
- Proxy Authenticator
- Interface: IProxyAuthenticator
-
- String: Name, Description, Integrated Authenticator Class Name
- boolean: Is Enabled, Is Interactive
- int: Authentication Level
- Non-persistent Objects
- Interface: IPagelet
-
- String: Pagelet Full URL
- Class: PageletRequest:
-
- IPagelet: GetPagelet
- Int: Pagelet Timeout, Error Code
- String: Content, Pagelet Name, Error Text, XML Payload
- Map<String, String>: Attributes
- IOKHttpRequest: HTTP Request
- Tag Libraries
- The reverse proxy server can provide both it's own unique tags, as well as extensions to the common tags provided by the Portal
- The reverse proxy server Tags
- These tags can all be included in the reverse proxy server tag library.
- Auth Source Tag
-
Tag authsourcedata Description This stores a list of available auth sources for the currently requested resource in memory. The data is stored as a collection, and each item in the collection is a data object containing information about the auth source (id, name, description) accessible through the data object dot notation ($curauth.name). Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. -
<pt:ensemble.authsourcedata pt:id=”authsources”/> <pt:logic.collectionlength pt:data=”authsources” pt:key=”numauths”/> <pt:logic.if pt:expr=”($numauths)>1”> <pt:logic.if-true> <!--display as HTML drop down --> </pt:logic. if-true> <pt:logic.if-false> <!--display as hidden input --> </pt:logic. if-false> </pt:logic.if> - Resource Link Tags
-
Tag resourcelink Description This stores the URL to a specific resource, if available, in memory. Attributes resourceid The resource ID. id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. -
Tag resourcedata Description This stores a list of resources in memory that are available to the current user. The data is stored as a collection, and each item in the collection is a data object containing information about the resource (id, name, description, url) accessible through the data object dot notation ($curresource.name). Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. - These tags behave similarly to the ptdata tags in the Portal.
- Pagelets
-
Tag pagelet Description This tag is replaced with the output of the specified pagelet. Attributes pageletid The pagelet ID. - The pagelet tag is simply the way to add a pagelet to an HTML page.
-
<pt:ensemble.inject pt:name=”al-collab:discussion” discussionid=”21”> <discussion> <expandedmessages> <messageid>27<messageid> <messageid>36<messageid> <messageid>144<messageid> </expandedmessages> <currentmessage> <messageid>27</messageid> </currentmessageid> </discussion> </pt:ensemble.inject> - Role Tag
-
Tag roledata Description This stores a list of the roles in memory that the current user has available. The data is stored as a collection, and each item in the collection is a variable containing the role name. This can be used with the foreach tag to iterate over role data. Attributes id The key used to store the data list in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data list in memory. - <pt:ensemble.roledata pt:id=“myroles”/>
-
Tag roleexpr Description This tag evaluates a role expression and stores the result in memory. It is designed to work with the logic.if tag. Attributes expr An expression consisting of the hasRole function which takes an application role as its argument. This function evaluates whether or not the current user has the requested role. key The key used to store the data in memory. Defaults to “if-result”. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - <pt: ensemble.roleexpr pt:expr=“hasRole(admin-role)”/>
- User Info Tag
-
Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info. -
<pt: ensemble.userinfo pt:info=”email”/> <pt: ensemble.userinfo pt:info=”email” pt:value=”test@test.com”/> - User/Group/Role Picker Tag
-
Tag picker Description This tag selects a user/group/role and passes the result to the specified JavaScript function. Attributes type The type of object to select (user, group, or role). multi A boolean specifying whether or not the user can select multiple items. Default to false. jscallback The JavaScript callback. This method can be passed a 2d javascript array containing the type (user, group, or role), name, and ID of each selected item. - <pt: ensemble.picker pt:type=“user” pt:jscallback=“myJSCallbackfunc”/>
- This tag can require serious thought to get right. UI pickers are extremely complicated.
- Analytics Tag
-
Tag analytics Description This sends an analytics event to the analytics server. Attributes id The event id. data The event data. - <pt:ensemble.analytics pt:id=“myeventid” pt: data=“myeventdata”/>
- The reverse proxy server Debug Tags
-
Tag debug Description These outputs debug information about the current roles or experience definitions Definitions (i.e. how did you get the current role and/or login page). Attributes type The type of debug info to display (role or experience definition). -
<pt:ensemble.debug pt:type=”role”/> <pt:ensemble.debug pt:type=”experience definition”/> - Common Tags
- These tags are shared between the reverse proxy server and portal. They include new tags (with the reverse proxy server specific implementations) and enhancements to the pre-existing general tag libraries for specific reverse proxy server needs.
- If Tag set
- Since the reverse proxy server does not include the Portal Standard tags, such as the choose/when/otherwise tag, we can take this opportunity to develop a more flexible way of doing conditionals using tags. This way we can have a variety of expr tags (such as the reverse proxy server roleexpr tag) that store boolean results for use by the if tag. This simplifies the tag, and avoids the problem of having to figure out if the expression is an integer expression, a role expression, or something else.
-
Tag if Description This tag evaluates an expression and then displays either the if-true or if-false tag contents. Attributes expr A Boolean value. This can be input as an tag variable using the $ attribute notation (i.e. pt:expr=“$myboolean”). - The corresponding if-true and if-false tags do not have any attributes. They are simply displayed or not displayed depending on the results of the if tag expr parameter.
-
Tag intexpr Description This tag evaluates an integer expression and stores the result in memory. Attributes expr An integer value or a tag variable, followed by an integer comparator, and then another integer value or tag variable. The tag variables must evaluate to an integer and be in $ attribute notation surrounded by parentheses. The following comparators are allowed: ‘==’, ‘!=’, ‘<’, ‘>’. key The key used to store the data in memory. Default to “if-result”. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. -
<pt:logic.intexpr pt:expr=”($numauths)>1”/> <pt:logic.if pt:expr=”$if-result”> <pt:logic.if-true> <!-- This is displayed if expr evaluates to true. --> </pt:logic.if-true> <pt:logic.if-false> <!-- This is displayed if expr evaluates to false. --> </pt:logic.if-false> </pt:logic.if> - An alternate way of handling the expression tags is to have the arguments be tag attributes, rather than having an expression string that the tag parses. For example:
- <pt:logic.intexpr pt:value1=“$numauths” pt:operator=“>” pt:value2=“1”/>
- CollectionLength Tag
- The collectionlength tag is necessary to enable conditional logic based on how many auth sources or resources are returned (i.e. empty, a single item, or a list).
-
Tag collectionlength Description This tag evaluates the length of a collection and stores the result in memory. Attributes data The key used to store the collection. key The key used to store the result in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - Variable Tag Enhancement
- This tag needs to be converted for use with the collection tag so that you can create collections of variables, in addition to collections of data objects. This is useful for the rolesdata tag. The collection tag also needs to be updated to mention the new related child tag, as well as a warning not to mix data types in a collection.
- Error Tags
- These tags can allow the reverse proxy server errors to be formatted as desired on a custom error page. There are two ways to implement this. The first can require either adding an API to the Tag Engine to allow the reverse proxy server to set error messages for a user. The reverse proxy server can then need to set the error information before displaying an error page to the user. The second involves implementing the reverse proxy server specific error tags that meet a common error tag API specified by the tag engine.
-
Tag error Description This tag displays errors on the page so that they can be placed and formatted as desired. If the errortext tag is included inside this tag, the contents of this tag can only be processed if there is an error. If the child tag is not present, then the error messages can be formatted and displayed from this tag in the standard style. -
Tag errortext Description This tag displays the current error text on the page so that it can be placed and formatted as desired. Attributes text This attribute allows you to override the error text with text of your own choosing. -
<pt:common.error/> or <pt:common.error> <p> <pt: common.errortext/> <p/> </pt:common.error> -
Tag errorcode Description This tag stores the error code in tag memory. Attributes id The key used to store the data in memory. scope Which scope (tag, request, application, etc . . . ) to use to store the data in memory. - <pt:common.errorcode id=“myerrorcode”/>
- User Info Tag
-
Tag userinfo Description This stores and retrieves user info data. Attributes info The name of the user info data. If this is used alone, the data can be retrieved. value The value to store in user info. - <pt:common.userinfo pt:info=“email”/>
- <pt:common.userinfo pt:info=“email” pt:value=“test@test.com”/>
- Head Includes Tag Set
-
Tag includeinhead Description This marks JavaScript & Security Service links to be included in the Head element of the HTML page by the headincludes tag. If a .js or .css file is marked for inclusion multiple times, it can only be included once. Attributes -
Tag headincludes Description This tag allows JavaScript and Style Sheet include information to be added to the Head element of an HTML page, as required by the XHTML specification. If a .js or .css file is included multiple times, it can actually only be included once in the Head element. Attributes - Main page HTML:
-
<head> <pt:common.headincludes/> </head> - Pagelet HTML:
-
<pt:common.includeinhead> <script type=“text/javascript”><!--JavaScript --></script> <script type=“text/javascript” src=“http://acme.com/test.js”/> <link rel=“stylesheet” href=“http://acme.com/test.css” type=“text/css”/> </pt:common.includeinhead> - Security Model and Threat Assessment
- The most important security issue in RProxy is the use of the Credential Vault. In order to manage authentication to back-end resources, the reverse proxy server stores a user's username and password for each resource in a Credential Vault. While this information can be encrypted, the reverse proxy server needs to be able to extract the non-encrypted data from the vault in order to pass the username and password to the resource. This is dangerous because if the reverse proxy server can decrypt the Credential Vault, someone else could figure out how to do it as well (i.e. steal the reverse proxy server's encryption key, which needs to be stored in the database or file system). This could provide someone with direct access to back-end resources using another user's credentials (i.e. accessing the finance app as the CEO). One way to avoid this problem is to encrypt the secondary passwords in the credential vault with the user's primary password, so that more than just the server's encryption key is needed for decryption.
- Because of this, at the very least customers need to be able to disable this feature. They can currently do this on a per-resource basis by leaving the authentication set to NONE (default). Since Analytics uses the PMB, the reverse proxy server documentation should include a security advisory that this multicast UDP traffic can be sniffed and therefore the network containing the reverse proxy server and Analytics servers should be isolated from the rest of the network.
- One embodiment may be implemented using a conventional general purpose of a specialized digital computer or microprocessor(s) programmed according to the teachings of the present disclosure, as can be apparent to those skilled in the computer art. Appropriate software coding can readily be prepared by skilled programmers based on the teachings of the present discloser, as can be apparent to those skilled in the software art. The invention may also be implemented by the preparation of integrated circuits or by interconnecting an appropriate network of conventional component circuits, as can be readily apparent to those skilled in the art.
- One embodiment includes a computer program product which is a storage medium (media) having instructions stored thereon/in which can be used to program a computer to perform any of the features present herein. The storage medium can include, but is not limited to, any type of disk including floppy disks, optical discs, DVD, CD-ROMs, micro drive, and magneto-optical disks, ROMs, RAMs, EPROMs, EEPROMs, DRAMs, flash memory of media or device suitable for storing instructions and/or data stored on any one of the computer readable medium (media), the present invention can include software for controlling both the hardware of the general purpose/specialized computer or microprocessor, and for enabling the computer or microprocessor to interact with a human user or other mechanism utilizing the results of the present invention. Such software may include, but is not limited to, device drivers, operating systems, execution environments/containers, and user applications.
- Embodiments of the present invention can include providing code for implementing processes of the present invention. The providing can include providing code to a user in any manner. For example, the providing can include transmitting digital signals containing the code to a user; providing the code on a physical media to a user; or any other method of making the code available.
- Embodiments of the present invention can include a computer implemented method for transmitting code which can be executed at a computer to perform any of the processes of embodiments of the present invention. The transmitting can include transfer through any portion of a network, such as the Internet; through wires, the atmosphere or space; or any other type of transmission. The transmitting can include initiating a transmission of code; or causing the code to pass into any region or country from another region or country. For example, transmitting includes causing the transfer of code through a portion of a network as a result of previously addressing and sending data including the code to a user. A transmission to a user can include any transmission received by the user in any region or country, regardless of the location from which the transmission is sent.
- Embodiments of the present invention can include a signal containing code which can be executed at a computer to perform any of the processes of embodiments of the present invention. The signal can be transmitted through a network, such as the Internet; through wires, the atmosphere or space; or any other type of transmission. The entire signal need not be in transit at the same time. The signal can extend in time over the period of its transfer. The signal is not to be considered as a snapshot of what is currently in transit.
- The forgoing description of preferred embodiments of the present invention has been provided for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations can be apparent to one of ordinary skill in the relevant arts. For example, steps preformed in the embodiments of the invention disclosed can be performed in alternate orders, certain steps can be omitted, and additional steps can be added. The embodiments where chosen and described in order to best explain the principles of the invention and its practical application, thereby enabling others skilled in the art to understand the invention for various embodiments and with various modifications that are suited to the particular used contemplated. It is intended that the scope of the invention be defined by the claims and their equivalents.
Claims (21)
1. A method comprising:
maintaining application role mappings at a reverse proxy server;
receiving a request for a web application at the reverse proxy server;
determining the proper user role for the web application at the reverse proxy server;
sending the proper user role as part of a HTTP header to the web application; wherein the web application uses the user role without doing an independent mapping of the user to a role.
2. The method of claim 1 , wherein the reverse proxy server interrogates the web application to determine the possible roles.
3. The method of claim 1 , wherein administrators can specify which roles the web application supports in the admin UI.
4. The method of claim 1 , wherein the reverse proxy server implements policies to determine the web application user roles.
5. The method of claim 1 , wherein code for the web application can include a tag to cause the reverse proxy system to insert a second web application into the displayed page.
6. The method of claim 4 , wherein the second web application uses independent user roles.
7. The method of claim 5 , wherein one of the independent user roles is sent in an HTTP header to the second web application.
8. A computer readable medium including code to:
maintaining application role mapping at a reverse proxy server;
receiving a request for a web application at the reverse proxy server; and
determining the proper user role for the web application at the reverse proxy server;
sending the proper user role as part of a HTTP header to the web application; wherein the web application uses the user role without doing an independent mapping of the user to a role.
9. The computer readable medium of claim 8 , wherein the reverse proxy server interrogates the web application to determine the possible roles.
10. The computer readable medium of claim 8 , wherein the reverse proxy server implements policies to determine the web application user roles.
11. The computer readable medium of claim 8 , wherein code for the web application can include a tag to cause the reverse proxy system to insert a second web application into the displayed page.
12. The computer readable medium of claim 11 , wherein the second web application uses independent user roles.
13. The method of claim 12 , wherein one of the independent user roles is sent in an HTTP header to the second web application.
14. A method comprising:
maintaining application role mapping at a reverse proxy server;
receiving a request for a web application at the reverse proxy server;
determining the proper user role for the web application at the reverse proxy server;
sending the proper user role as part of a HTTP header to the web application; wherein the web application uses the role in a presentation to the user without doing an independent mapping of the user to a role; wherein the request comes from another web application as a result of an active tag in the other web application.
15. The method of claim 14 , wherein the reverse proxy server interrogates the web application to determine the possible roles.
16. The method of claim 14 , wherein the reverse proxy server implements policies to determine the web application user roles.
17. The method of claim 15 , wherein the second web application uses independent user roles.
18. A method comprising:
maintaining of application role mapping at a reverse proxy server;
receiving a request for a web application at the reverse proxy server the reverse proxy server;
determining the proper user role for the web application; and
sending the proper user role as part of a HTTP header to the web application; wherein the web application uses the role in a presentation to the user without doing an independent mapping of the user to a role; wherein the reverse proxy server looks up roles for multiple web application that are combined into a single presentation to the user.
19. The method of claim 18 , wherein the reverse proxy server interprets the web application to determine the possible roles.
20. The method of claim 18 , wherein the reverse proxy server implements policies to determine the web application user roles.
21. The method of claim 18 , wherein the multiple web application have independent user roles.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/765,389 US20080077982A1 (en) | 2006-09-22 | 2007-06-19 | Credential vault encryption |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US82663306P | 2006-09-22 | 2006-09-22 | |
US88339807P | 2007-01-04 | 2007-01-04 | |
US11/765,389 US20080077982A1 (en) | 2006-09-22 | 2007-06-19 | Credential vault encryption |
Publications (1)
Publication Number | Publication Date |
---|---|
US20080077982A1 true US20080077982A1 (en) | 2008-03-27 |
Family
ID=39201342
Family Applications (9)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/765,303 Active 2029-08-14 US7865943B2 (en) | 2006-09-22 | 2007-06-19 | Credential vault encryption |
US11/765,394 Active 2029-09-06 US7861290B2 (en) | 2006-09-22 | 2007-06-19 | Non-invasive insertion of pagelets |
US11/765,392 Active 2029-09-13 US7886352B2 (en) | 2006-09-22 | 2007-06-19 | Interstitial pages |
US11/765,389 Abandoned US20080077982A1 (en) | 2006-09-22 | 2007-06-19 | Credential vault encryption |
US11/765,380 Active 2029-08-12 US7861289B2 (en) | 2006-09-22 | 2007-06-19 | Pagelets in adaptive tags in non-portal reverse proxy |
US11/765,379 Active 2029-11-02 US7904953B2 (en) | 2006-09-22 | 2007-06-19 | Pagelets |
US11/765,375 Abandoned US20080250388A1 (en) | 2006-09-22 | 2007-06-19 | Pagelets in adaptive tags |
US12/917,764 Active US8136150B2 (en) | 2006-09-22 | 2010-11-02 | User role mapping in web applications |
US13/364,251 Active US8397283B2 (en) | 2006-09-22 | 2012-02-01 | User role mapping in web applications |
Family Applications Before (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/765,303 Active 2029-08-14 US7865943B2 (en) | 2006-09-22 | 2007-06-19 | Credential vault encryption |
US11/765,394 Active 2029-09-06 US7861290B2 (en) | 2006-09-22 | 2007-06-19 | Non-invasive insertion of pagelets |
US11/765,392 Active 2029-09-13 US7886352B2 (en) | 2006-09-22 | 2007-06-19 | Interstitial pages |
Family Applications After (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/765,380 Active 2029-08-12 US7861289B2 (en) | 2006-09-22 | 2007-06-19 | Pagelets in adaptive tags in non-portal reverse proxy |
US11/765,379 Active 2029-11-02 US7904953B2 (en) | 2006-09-22 | 2007-06-19 | Pagelets |
US11/765,375 Abandoned US20080250388A1 (en) | 2006-09-22 | 2007-06-19 | Pagelets in adaptive tags |
US12/917,764 Active US8136150B2 (en) | 2006-09-22 | 2010-11-02 | User role mapping in web applications |
US13/364,251 Active US8397283B2 (en) | 2006-09-22 | 2012-02-01 | User role mapping in web applications |
Country Status (2)
Country | Link |
---|---|
US (9) | US7865943B2 (en) |
WO (1) | WO2008036947A2 (en) |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7490141B1 (en) | 2008-05-15 | 2009-02-10 | Ibm Corporation | Ajax proxy indirection for external domain requests |
US20090083538A1 (en) * | 2005-08-10 | 2009-03-26 | Riverbed Technology, Inc. | Reducing latency of split-terminated secure communication protocol sessions |
US20090119504A1 (en) * | 2005-08-10 | 2009-05-07 | Riverbed Technology, Inc. | Intercepting and split-terminating authenticated communication connections |
US20100082771A1 (en) * | 2008-09-29 | 2010-04-01 | Sun Microsystems, Inc. | Mechanism for inserting trustworthy parameters into ajax via server-side proxy |
US20100223322A1 (en) * | 2009-02-27 | 2010-09-02 | Sun Microsystems, Inc. | Server based framework for improving ajax performance |
US20100228968A1 (en) * | 2009-03-03 | 2010-09-09 | Riverbed Technology, Inc. | Split termination of secure communication sessions with mutual certificate-based authentication |
US20100299525A1 (en) * | 2005-08-10 | 2010-11-25 | Riverbed Technology, Inc. | Method and apparatus for split-terminating a secure network connection, with client authentication |
US20100318665A1 (en) * | 2003-04-14 | 2010-12-16 | Riverbed Technology, Inc. | Interception of a cloud-based communication connection |
US20110162046A1 (en) * | 2009-12-29 | 2011-06-30 | International Business Machines Corporation | Providing Secure Dynamic Role Selection and Managing Privileged User Access From a Client Device |
US20110231652A1 (en) * | 2010-03-19 | 2011-09-22 | F5 Networks, Inc. | Proxy ssl authentication in split ssl for client-side proxy agent resources with content insertion |
US20110283359A1 (en) * | 2010-04-01 | 2011-11-17 | Matthew Browning Prince | Validating Visitor Internet-Based Security Threats |
US8079066B1 (en) * | 2007-11-20 | 2011-12-13 | West Corporation | Multi-domain login and messaging |
US20120226911A1 (en) * | 2005-12-21 | 2012-09-06 | Stephan Feil | Control of access to a secondary system |
US20130179945A1 (en) * | 2012-01-06 | 2013-07-11 | Elastic Path Software, Inc. | Follow Location Handler and Selector Functionality in a Stateless Microkernel Web Server Architecture |
US8725767B1 (en) * | 2010-03-31 | 2014-05-13 | Emc Corporation | Multi-dimensional object model for storage management |
US8782393B1 (en) | 2006-03-23 | 2014-07-15 | F5 Networks, Inc. | Accessing SSL connection data by a third-party |
US8813174B1 (en) | 2011-05-03 | 2014-08-19 | Symantec Corporation | Embedded security blades for cloud service providers |
US9049247B2 (en) | 2010-04-01 | 2015-06-02 | Cloudfare, Inc. | Internet-based proxy service for responding to server offline errors |
US9342620B2 (en) | 2011-05-20 | 2016-05-17 | Cloudflare, Inc. | Loading of web resources |
US9374221B1 (en) * | 2013-12-20 | 2016-06-21 | Emc Corporation | Distributed protection of credential stores utilizing multiple keys derived from a master key |
EP3062295A1 (en) * | 2015-02-25 | 2016-08-31 | Assa Abloy AB | Systems and methods for updating a mobile device |
US9467456B2 (en) | 2014-08-29 | 2016-10-11 | Dell Software Inc. | Single login authentication for users with multiple IPv4/IPv6 addresses |
CN106559383A (en) * | 2015-09-25 | 2017-04-05 | 北京国双科技有限公司 | The login method and device of single-sign-on |
US20180198878A1 (en) * | 2017-01-09 | 2018-07-12 | Hewlett Packard Enterprise Development Lp | Shared sessions through reverse proxy |
US10333711B2 (en) | 2011-06-17 | 2019-06-25 | Microsoft Technology Licensing, Llc | Controlling access to protected objects |
US10623375B2 (en) | 2014-09-16 | 2020-04-14 | International Business Machines Corporation | Auto-detection of web-based application characteristics for reverse proxy enablement |
CN112738200A (en) * | 2020-12-25 | 2021-04-30 | 肯特智能技术(深圳)股份有限公司 | Convenient operation and maintenance tool and method based on closed public network system |
US11025614B2 (en) * | 2018-10-17 | 2021-06-01 | Synergex Group | Systems, methods, and media for managing user credentials |
US11088822B2 (en) | 2016-03-25 | 2021-08-10 | Synergex Group | Methods, systems, and media for using dynamic public key infrastructure to send and receive encrypted messages |
CN113553569A (en) * | 2021-07-06 | 2021-10-26 | 猪八戒股份有限公司 | Single sign-on method, system and terminal of Syngnathus system based on proxy server |
US20230085714A1 (en) * | 2010-09-23 | 2023-03-23 | Salesforce.Com, Inc. | Methods and apparatus for suppressing network feed activities using an information feed in an on-demand database service environment |
Families Citing this family (234)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7152450B2 (en) * | 2000-08-17 | 2006-12-26 | Industrial Origami, Llc | Method for forming sheet material with bend controlling displacements |
WO2005086802A2 (en) | 2004-03-08 | 2005-09-22 | Proxense, Llc | Linked account system using personal digital key (pdk-las) |
US20060036951A1 (en) * | 2004-08-12 | 2006-02-16 | International Business Machines Corporation | Method of switching internet personas based on URL |
US8352730B2 (en) | 2004-12-20 | 2013-01-08 | Proxense, Llc | Biometric personal data key (PDK) authentication |
US8290901B2 (en) * | 2005-03-07 | 2012-10-16 | Novell, Inc. | Techniques for remote resource mounting |
US8635094B2 (en) * | 2005-06-03 | 2014-01-21 | International Business Machines Corporation | System and method for dynamically configuring user interface components of a collaborative space based on mapping rules and user roles |
US8141138B2 (en) * | 2005-10-17 | 2012-03-20 | Oracle International Corporation | Auditing correlated events using a secure web single sign-on login |
US8219129B2 (en) | 2006-01-06 | 2012-07-10 | Proxense, Llc | Dynamic real-time tiered client access |
US11206664B2 (en) | 2006-01-06 | 2021-12-21 | Proxense, Llc | Wireless network synchronization of cells and client devices on a network |
US8412949B2 (en) | 2006-05-05 | 2013-04-02 | Proxense, Llc | Personal digital key initialization and registration for secure transactions |
US7865943B2 (en) | 2006-09-22 | 2011-01-04 | Oracle International Corporation | Credential vault encryption |
US11184224B2 (en) | 2006-09-25 | 2021-11-23 | Remot3.It, Inc. | System, method and compute program product for accessing a device on a network |
US8447843B2 (en) | 2006-09-25 | 2013-05-21 | Yoics, Inc. | System, method and computer program product for identifying, configuring and accessing a device on a network |
US9231904B2 (en) | 2006-09-25 | 2016-01-05 | Weaved, Inc. | Deploying and managing networked devices |
US20130339509A1 (en) * | 2012-06-15 | 2013-12-19 | Yoics, Inc. | Networking systems |
US10637724B2 (en) | 2006-09-25 | 2020-04-28 | Remot3.It, Inc. | Managing network connected devices |
US9712486B2 (en) | 2006-09-25 | 2017-07-18 | Weaved, Inc. | Techniques for the deployment and management of network connected devices |
US9269221B2 (en) | 2006-11-13 | 2016-02-23 | John J. Gobbi | Configuration of interfaces for a location detection system and application |
US8533821B2 (en) | 2007-05-25 | 2013-09-10 | International Business Machines Corporation | Detecting and defending against man-in-the-middle attacks |
US8196191B2 (en) * | 2007-08-17 | 2012-06-05 | Norman James M | Coordinating credentials across disparate credential stores |
US8863246B2 (en) * | 2007-08-31 | 2014-10-14 | Apple Inc. | Searching and replacing credentials in a disparate credential store environment |
US20090077638A1 (en) * | 2007-09-17 | 2009-03-19 | Novell, Inc. | Setting and synching preferred credentials in a disparate credential store environment |
US8504810B2 (en) * | 2007-09-26 | 2013-08-06 | Lenovo (Singapore) Pte. Ltd. | Remote PC bootup via a handheld communication device |
US8819815B1 (en) * | 2007-10-16 | 2014-08-26 | Jpmorgan Chase Bank, N.A. | Method and system for distributing and tracking information |
WO2009062194A1 (en) | 2007-11-09 | 2009-05-14 | Proxense, Llc | Proximity-sensor supporting multiple application services |
US20090144753A1 (en) * | 2007-11-30 | 2009-06-04 | Morris Robert P | Method And System For Providing Update Content In A Markup Language-Based Resource |
US8171528B1 (en) | 2007-12-06 | 2012-05-01 | Proxense, Llc | Hybrid device having a personal digital key and receiver-decoder circuit and methods of use |
US9251332B2 (en) | 2007-12-19 | 2016-02-02 | Proxense, Llc | Security system and method for controlling access to computing resources |
US7664862B2 (en) * | 2008-01-14 | 2010-02-16 | International Business Machines Corporation | Browser-based proxy server for customization and distribution of existing applications |
US20090199277A1 (en) * | 2008-01-31 | 2009-08-06 | Norman James M | Credential arrangement in single-sign-on environment |
US8508336B2 (en) | 2008-02-14 | 2013-08-13 | Proxense, Llc | Proximity-based healthcare management system with automatic access to private information |
US20090217367A1 (en) * | 2008-02-25 | 2009-08-27 | Norman James M | Sso in volatile session or shared environment |
US9047485B2 (en) * | 2008-03-12 | 2015-06-02 | International Business Machines Corporation | Integrated masking for viewing of data |
US20090240670A1 (en) * | 2008-03-20 | 2009-09-24 | Yahoo! Inc. | Uniform resource identifier alignment |
US11120449B2 (en) | 2008-04-08 | 2021-09-14 | Proxense, Llc | Automated service-based order processing |
US20090260066A1 (en) * | 2008-04-09 | 2009-10-15 | Aspect Software Inc. | Single Sign-On To Administer Target Systems with Disparate Security Models |
US8887249B1 (en) * | 2008-05-28 | 2014-11-11 | Zscaler, Inc. | Protecting against denial of service attacks using guard tables |
US9356805B2 (en) * | 2008-06-06 | 2016-05-31 | International Business Machines Corporation | Implementing a plurality of interface definitions |
US8522135B2 (en) * | 2008-06-06 | 2013-08-27 | International Business Machines Corporation | Generating a transformation description document for transforming messages |
KR100909232B1 (en) * | 2008-07-10 | 2009-07-23 | 주식회사 로직플랜트 | Method for system for interface of wep page |
US8438382B2 (en) * | 2008-08-06 | 2013-05-07 | Symantec Corporation | Credential management system and method |
US8706878B1 (en) | 2008-08-21 | 2014-04-22 | United Services Automobile Association | Preferential loading in data centers |
US8001174B2 (en) * | 2008-09-17 | 2011-08-16 | Calamp Corp. | Application process in communication system using central processor for forwarding request to destination processor based on connection status |
US8135689B2 (en) * | 2008-11-14 | 2012-03-13 | Sap Ag | Performance optimized retrieve transformation nodes |
US20100138910A1 (en) * | 2008-12-03 | 2010-06-03 | Check Point Software Technologies, Ltd. | Methods for encrypted-traffic url filtering using address-mapping interception |
US9473419B2 (en) | 2008-12-22 | 2016-10-18 | Ctera Networks, Ltd. | Multi-tenant cloud storage system |
US8886714B2 (en) * | 2011-08-08 | 2014-11-11 | Ctera Networks Ltd. | Remote access service for cloud-enabled network devices |
JP4748819B2 (en) * | 2009-01-28 | 2011-08-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | Client program, terminal, method, server system, and server program |
GB0904559D0 (en) * | 2009-03-17 | 2009-04-29 | British Telecomm | Web application access |
GB0905270D0 (en) | 2009-03-27 | 2009-05-13 | British Telecomm | Call barring |
US20100269162A1 (en) * | 2009-04-15 | 2010-10-21 | Jose Bravo | Website authentication |
US8296200B2 (en) * | 2009-05-21 | 2012-10-23 | Oracle International Corporation | Collaborative financial close portal |
US9497248B2 (en) | 2009-06-02 | 2016-11-15 | International Business Machines Corporation | System for enabling rich network applications |
US8438544B2 (en) * | 2009-06-18 | 2013-05-07 | International Business Machines Corporation | Open systems developer portal and managing software development projects |
CN101588390B (en) * | 2009-06-24 | 2012-06-27 | 杭州华三通信技术有限公司 | Method for improving centralized authentication service system service viscosity and load equilibrium apparatus |
US8489685B2 (en) | 2009-07-17 | 2013-07-16 | Aryaka Networks, Inc. | Application acceleration as a service system and method |
US9582394B2 (en) * | 2009-07-30 | 2017-02-28 | Oracle International Corporation | Encapsulating and managing diagnostic information |
US8707158B2 (en) * | 2009-08-05 | 2014-04-22 | Microsoft Corporation | Customizing a form in a model-based system |
US9465786B2 (en) * | 2009-08-25 | 2016-10-11 | Keeper Security, Inc. | Method for facilitating quick logins from a mobile device |
US9836466B1 (en) | 2009-10-29 | 2017-12-05 | Amazon Technologies, Inc. | Managing objects using tags |
US9514466B2 (en) * | 2009-11-16 | 2016-12-06 | Yahoo! Inc. | Collecting and presenting data including links from communications sent to or from a user |
US8683609B2 (en) | 2009-12-04 | 2014-03-25 | International Business Machines Corporation | Mobile phone and IP address correlation service |
US8453225B2 (en) | 2009-12-23 | 2013-05-28 | Citrix Systems, Inc. | Systems and methods for intercepting and automatically filling in forms by the appliance for single-sign on |
US9418205B2 (en) * | 2010-03-15 | 2016-08-16 | Proxense, Llc | Proximity-based system for automatic application or data access and item tracking |
US20120036569A1 (en) * | 2010-04-05 | 2012-02-09 | Andrew Cottrell | Securing portable executable modules |
US10250589B2 (en) | 2010-05-20 | 2019-04-02 | Cyberark Software Ltd. | System and method for protecting access to authentication systems |
US8918854B1 (en) | 2010-07-15 | 2014-12-23 | Proxense, Llc | Proximity-based system for automatic application initialization |
US9021093B2 (en) * | 2010-08-17 | 2015-04-28 | International Business Machines Corporation | Managing and securing manageable resources in stateless web server architecture using servlet filters |
EP2616969A2 (en) * | 2010-09-18 | 2013-07-24 | Oracle International Corporation | Enterprise application workcenter |
US20120102383A1 (en) * | 2010-10-20 | 2012-04-26 | Jerald Liu | Creating, Sharing and Modifying Documents That Include Content and an Integrated Software Application |
JP2014502384A (en) * | 2010-10-21 | 2014-01-30 | モノタイプ.イメージング.インコーポレイテッド | Style sheet identifier |
WO2012058602A2 (en) * | 2010-10-28 | 2012-05-03 | Marshall Monroe | Method and apparatus for organizing and delivering digital media content and inteactive elements |
US8756611B2 (en) * | 2010-12-07 | 2014-06-17 | International Business Machines Corporation | Delayed expansion of values in context |
US8806041B1 (en) | 2010-12-15 | 2014-08-12 | Amazon Technologies, Inc. | Client device connectivity with integrated business rules and multiple network types |
US9197617B1 (en) * | 2010-12-15 | 2015-11-24 | Amazon Technologies, Inc. | Client device connectivity with integrated business rules |
US9264435B2 (en) * | 2011-02-15 | 2016-02-16 | Boingo Wireless, Inc. | Apparatus and methods for access solutions to wireless and wired networks |
US9265450B1 (en) | 2011-02-21 | 2016-02-23 | Proxense, Llc | Proximity-based system for object tracking and automatic application initialization |
US8949951B2 (en) | 2011-03-04 | 2015-02-03 | Red Hat, Inc. | Generating modular security delegates for applications |
US9112682B2 (en) | 2011-03-15 | 2015-08-18 | Red Hat, Inc. | Generating modular security delegates for applications |
US8789177B1 (en) * | 2011-04-11 | 2014-07-22 | Symantec Corporation | Method and system for automatically obtaining web page content in the presence of redirects |
US8819819B1 (en) | 2011-04-11 | 2014-08-26 | Symantec Corporation | Method and system for automatically obtaining webpage content in the presence of javascript |
WO2012151132A1 (en) * | 2011-04-30 | 2012-11-08 | Vmware, Inc. | Dynamic management of groups for entitlement and provisioning of computer resources |
US8635671B2 (en) * | 2011-05-31 | 2014-01-21 | Red Hat, Inc. | Systems and methods for a security delegate module to select appropriate security services for web applications |
US10834167B1 (en) * | 2011-06-02 | 2020-11-10 | Amazon Technologies, Inc. | Client side navigation compositor |
JP2013008284A (en) * | 2011-06-27 | 2013-01-10 | Canon Inc | Image processing system, control method for the same, and program |
US8719568B1 (en) * | 2011-06-30 | 2014-05-06 | Cellco Partnership | Secure delivery of sensitive information from a non-communicative actor |
US20130014236A1 (en) * | 2011-07-05 | 2013-01-10 | International Business Machines Corporation | Method for managing identities across multiple sites |
US9240010B2 (en) * | 2011-07-28 | 2016-01-19 | Iii Holdings 1, Llc | Systems and methods for generating and using a digital pass |
US8543836B2 (en) * | 2011-08-23 | 2013-09-24 | International Business Machines Corporation | Lightweight document access control using access control lists in the cloud storage or on the local file system |
US10083247B2 (en) | 2011-10-01 | 2018-09-25 | Oracle International Corporation | Generating state-driven role-based landing pages |
CN102377788B (en) * | 2011-12-13 | 2014-06-25 | 方正国际软件有限公司 | Single sign-on (SSO) system and single sign-on (SSO) method |
WO2013089728A1 (en) * | 2011-12-15 | 2013-06-20 | Intel Corporation | Method, device, and system for securely sharing media content from a source device |
WO2013089725A1 (en) | 2011-12-15 | 2013-06-20 | Intel Corporation | Method and device for secure communications over a network using a hardware security engine |
CN103179089A (en) * | 2011-12-21 | 2013-06-26 | 富泰华工业(深圳)有限公司 | System and method for identity authentication for accessing of different software development platforms |
JP5862282B2 (en) * | 2011-12-26 | 2016-02-16 | 富士ゼロックス株式会社 | Image forming apparatus and program |
CN104040996B (en) * | 2012-01-09 | 2017-07-07 | 高通股份有限公司 | For the gateway controlled by cloud computing of communication network |
EP2626820A3 (en) * | 2012-02-10 | 2016-10-19 | Tata Consultancy Services Limited | Role-based content rendering |
CN102624737B (en) * | 2012-03-27 | 2015-05-06 | 武汉理工大学 | Single sign-on integrated method for Form identity authentication in single login system |
US20130282859A1 (en) * | 2012-04-20 | 2013-10-24 | Benefitfocus.Com, Inc. | System and method for enabling the styling and adornment of multiple, disparate web pages through remote method calls |
US9460222B2 (en) * | 2012-05-17 | 2016-10-04 | Oracle International Corporation | System for rewriting dynamically generated uniform resource locators in proxied hyper text markup language content in accordance with proxy server rules |
US8849904B2 (en) | 2012-05-17 | 2014-09-30 | Cloudflare, Inc. | Incorporating web applications into web pages at the network level |
US20140013247A1 (en) * | 2012-07-03 | 2014-01-09 | salesforce.com,inc. | Systems and methods for providing a customized user interface for publishing into a feed |
US9268870B2 (en) * | 2012-07-17 | 2016-02-23 | Xerox Business Services, Llc | Portal modularization tool |
US8917826B2 (en) | 2012-07-31 | 2014-12-23 | International Business Machines Corporation | Detecting man-in-the-middle attacks in electronic transactions using prompts |
CN103634265B (en) * | 2012-08-20 | 2019-01-11 | 腾讯科技(深圳)有限公司 | Method, equipment and the system of safety certification |
US8931081B2 (en) * | 2012-08-21 | 2015-01-06 | International Business Machines Corporation | Device identification for externalizing password from device coupled with user control of external password service |
US8769651B2 (en) * | 2012-09-19 | 2014-07-01 | Secureauth Corporation | Mobile multifactor single-sign-on authentication |
EP3119059B1 (en) * | 2012-10-24 | 2019-05-01 | CyberArk Software Ltd. | A system and method for secure proxy-based authentication |
US10051019B1 (en) | 2012-11-09 | 2018-08-14 | Wells Fargo Bank, N.A. | System and method for session management |
US8813206B2 (en) | 2012-11-27 | 2014-08-19 | Hong Kong Applied Science and Technology Research Institute Company Limited | Anonymous personal content access with content bridge |
US9223950B2 (en) * | 2013-03-05 | 2015-12-29 | Intel Corporation | Security challenge assisted password proxy |
US9027004B1 (en) * | 2013-03-12 | 2015-05-05 | Amazon Technologies, Inc. | Injection of supplemental computer instructions |
US9305172B2 (en) * | 2013-03-15 | 2016-04-05 | Mcafee, Inc. | Multi-ring encryption approach to securing a payload using hardware modules |
US20140283002A1 (en) * | 2013-03-15 | 2014-09-18 | Stephen Frechette | Method and system for anonymous circumvention of internet filter firewalls without detection or identification |
US9405898B2 (en) | 2013-05-10 | 2016-08-02 | Proxense, Llc | Secure element as a digital pocket |
US10467207B2 (en) | 2013-05-24 | 2019-11-05 | Sap Se | Handling changes in automatic sort |
US9305161B1 (en) * | 2013-06-24 | 2016-04-05 | Emc Corporation | Password hardening system using password shares distributed across multiple servers |
US10122714B2 (en) * | 2013-08-01 | 2018-11-06 | Bitglass, Inc. | Secure user credential access system |
US9553867B2 (en) | 2013-08-01 | 2017-01-24 | Bitglass, Inc. | Secure application access system |
US10984175B2 (en) | 2013-08-09 | 2021-04-20 | Yottaa Inc. | Systems and methods for dynamically modifying a requested web page from a server for presentation at a client |
US9870349B2 (en) * | 2013-09-20 | 2018-01-16 | Yottaa Inc. | Systems and methods for managing loading priority or sequencing of fragments of a web object |
CN105493439A (en) * | 2013-09-25 | 2016-04-13 | 迈克菲股份有限公司 | Proxy authentication for single sign-on |
KR20150046852A (en) * | 2013-10-23 | 2015-05-04 | 삼성전자주식회사 | Electronic Device And Authentication Method Using Password thereof |
US9275219B2 (en) * | 2014-02-25 | 2016-03-01 | International Business Machines Corporation | Unauthorized account access lockout reduction |
US10033724B2 (en) * | 2014-03-28 | 2018-07-24 | Ben Damian DONOHUE | System of composite passwords incorporating hints |
US9489532B2 (en) * | 2014-05-28 | 2016-11-08 | Siemens Product Lifecycle Management Software Inc. | Fast access rights checking of configured structure data |
US10187483B2 (en) * | 2014-08-12 | 2019-01-22 | Facebook, Inc. | Managing access to user information by applications operating in an online system environment |
US10171548B2 (en) * | 2014-08-26 | 2019-01-01 | Mavenir Systems, Inc. | Method and system for efficient enrichment of upper layer protocol content in transmission control program (TCP) based sessions |
US10348692B2 (en) * | 2014-09-16 | 2019-07-09 | Nokia Technologies Oy | Method and apparatus for anonymous access and control of a service node |
US10454921B1 (en) * | 2014-09-18 | 2019-10-22 | Trend Micro Inc. | Protection of authentication credentials of cloud services |
US10362059B2 (en) | 2014-09-24 | 2019-07-23 | Oracle International Corporation | Proxy servers within computer subnetworks |
JP6593008B2 (en) * | 2014-10-07 | 2019-10-23 | 株式会社リコー | Information processing apparatus, communication method, program, and system |
US9641504B2 (en) * | 2014-12-15 | 2017-05-02 | Sap Se | HTTP header-based adaptable authentication mechanism |
US9626525B2 (en) * | 2014-12-31 | 2017-04-18 | Citrix Systems, Inc. | Shared secret vault for applications with single sign on |
US9401933B1 (en) | 2015-01-20 | 2016-07-26 | Cisco Technology, Inc. | Classification of security policies across multiple security products |
US9531757B2 (en) * | 2015-01-20 | 2016-12-27 | Cisco Technology, Inc. | Management of security policies across multiple security products |
CN115018578A (en) * | 2015-02-09 | 2022-09-06 | 创新先进技术有限公司 | Service implementation method and device |
US10146931B1 (en) * | 2015-03-13 | 2018-12-04 | EMC IP Holding Company LLC | Organization-level password management employing user-device password vault |
US10454938B2 (en) * | 2015-05-28 | 2019-10-22 | International Business Machines Corporation | Dynamic permission roles for cloud based applications |
US9842221B2 (en) * | 2015-06-26 | 2017-12-12 | Sap Se | Role analyzer and optimizer in database systems |
CN105072108B (en) * | 2015-08-04 | 2018-10-19 | 小米科技有限责任公司 | Transmission method, the apparatus and system of user information |
WO2017046713A2 (en) * | 2015-09-14 | 2017-03-23 | Colorado Code Craft Patent Holdco Llc | Secure, anonymous browsing with a remote browsing server |
US9917823B2 (en) | 2015-10-01 | 2018-03-13 | International Business Machines Corporation | Auditable retrieval of privileged credentials |
US9509684B1 (en) * | 2015-10-14 | 2016-11-29 | FullArmor Corporation | System and method for resource access with identity impersonation |
US9762563B2 (en) | 2015-10-14 | 2017-09-12 | FullArmor Corporation | Resource access system and method |
US9450944B1 (en) | 2015-10-14 | 2016-09-20 | FullArmor Corporation | System and method for pass-through authentication |
US9992187B2 (en) * | 2015-12-21 | 2018-06-05 | Cisco Technology, Inc. | Single sign-on authentication via browser for client application |
US10659466B2 (en) * | 2016-03-22 | 2020-05-19 | Microsoft Technology Licensing, Llc | Secure resource-based policy |
US20170289269A1 (en) * | 2016-03-29 | 2017-10-05 | Ca, Inc. | Delegating a reverse proxy session to its instantiating portlet session |
US9838377B1 (en) | 2016-05-11 | 2017-12-05 | Oracle International Corporation | Task segregation in a multi-tenant identity and data security management cloud service |
US10581820B2 (en) | 2016-05-11 | 2020-03-03 | Oracle International Corporation | Key generation and rollover |
US10341410B2 (en) | 2016-05-11 | 2019-07-02 | Oracle International Corporation | Security tokens for a multi-tenant identity and data security management cloud service |
US10425386B2 (en) | 2016-05-11 | 2019-09-24 | Oracle International Corporation | Policy enforcement point for a multi-tenant identity and data security management cloud service |
US10878079B2 (en) | 2016-05-11 | 2020-12-29 | Oracle International Corporation | Identity cloud service authorization model with dynamic roles and scopes |
US10454940B2 (en) | 2016-05-11 | 2019-10-22 | Oracle International Corporation | Identity cloud service authorization model |
US10530578B2 (en) * | 2016-08-05 | 2020-01-07 | Oracle International Corporation | Key store service |
US10505941B2 (en) | 2016-08-05 | 2019-12-10 | Oracle International Corporation | Virtual directory system for LDAP to SCIM proxy service |
US10255061B2 (en) | 2016-08-05 | 2019-04-09 | Oracle International Corporation | Zero down time upgrade for a multi-tenant identity and data security management cloud service |
US10735394B2 (en) | 2016-08-05 | 2020-08-04 | Oracle International Corporation | Caching framework for a multi-tenant identity and data security management cloud service |
US10516672B2 (en) | 2016-08-05 | 2019-12-24 | Oracle International Corporation | Service discovery for a multi-tenant identity and data security management cloud service |
US10585682B2 (en) | 2016-08-05 | 2020-03-10 | Oracle International Corporation | Tenant self-service troubleshooting for a multi-tenant identity and data security management cloud service |
US10484382B2 (en) | 2016-08-31 | 2019-11-19 | Oracle International Corporation | Data management for a multi-tenant identity cloud service |
US10594684B2 (en) | 2016-09-14 | 2020-03-17 | Oracle International Corporation | Generating derived credentials for a multi-tenant identity cloud service |
US10511589B2 (en) | 2016-09-14 | 2019-12-17 | Oracle International Corporation | Single logout functionality for a multi-tenant identity and data security management cloud service |
US10846390B2 (en) | 2016-09-14 | 2020-11-24 | Oracle International Corporation | Single sign-on functionality for a multi-tenant identity and data security management cloud service |
US10791087B2 (en) | 2016-09-16 | 2020-09-29 | Oracle International Corporation | SCIM to LDAP mapping using subtype attributes |
US10341354B2 (en) | 2016-09-16 | 2019-07-02 | Oracle International Corporation | Distributed high availability agent architecture |
US10567364B2 (en) | 2016-09-16 | 2020-02-18 | Oracle International Corporation | Preserving LDAP hierarchy in a SCIM directory using special marker groups |
US10445395B2 (en) | 2016-09-16 | 2019-10-15 | Oracle International Corporation | Cookie based state propagation for a multi-tenant identity cloud service |
CN109565511B (en) | 2016-09-16 | 2021-06-29 | 甲骨文国际公司 | Tenant and service management for multi-tenant identity and data security management cloud services |
US10484243B2 (en) | 2016-09-16 | 2019-11-19 | Oracle International Corporation | Application management for a multi-tenant identity cloud service |
US10904074B2 (en) | 2016-09-17 | 2021-01-26 | Oracle International Corporation | Composite event handler for a multi-tenant identity cloud service |
US10171465B2 (en) | 2016-09-29 | 2019-01-01 | Helene E. Schmidt | Network authorization system and method using rapidly changing network keys |
CN106506521B (en) * | 2016-11-28 | 2020-08-07 | 腾讯科技(深圳)有限公司 | Resource access control method and device |
US10824655B2 (en) * | 2016-12-29 | 2020-11-03 | Sap Se | Data models for geo-enriched data |
US10803190B2 (en) | 2017-02-10 | 2020-10-13 | BlueTalon, Inc. | Authentication based on client access limitation |
US10261836B2 (en) | 2017-03-21 | 2019-04-16 | Oracle International Corporation | Dynamic dispatching of workloads spanning heterogeneous services |
US10291602B1 (en) * | 2017-04-12 | 2019-05-14 | BlueTalon, Inc. | Yarn rest API protection |
US10454915B2 (en) | 2017-05-18 | 2019-10-22 | Oracle International Corporation | User authentication using kerberos with identity cloud service |
DE102017005366A1 (en) * | 2017-06-01 | 2018-12-06 | Manfred Meissner | Procedure for an interactive authorization system for the protection of data |
US11068567B2 (en) * | 2017-06-04 | 2021-07-20 | Harsha Ramalingam | Self-owned authentication and identity framework |
US10348735B2 (en) * | 2017-09-01 | 2019-07-09 | Atlassian Pty Ltd | Systems and methods for accessing cloud resources from a local development environment |
US11614952B2 (en) * | 2017-09-13 | 2023-03-28 | Imageteq Technologies, Inc. | Systems and methods for providing modular applications with dynamically generated user experience and automatic authentication |
US10348858B2 (en) | 2017-09-15 | 2019-07-09 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
US10831789B2 (en) | 2017-09-27 | 2020-11-10 | Oracle International Corporation | Reference attribute query processing for a multi-tenant cloud service |
US11271969B2 (en) | 2017-09-28 | 2022-03-08 | Oracle International Corporation | Rest-based declarative policy management |
US10834137B2 (en) | 2017-09-28 | 2020-11-10 | Oracle International Corporation | Rest-based declarative policy management |
US10705823B2 (en) | 2017-09-29 | 2020-07-07 | Oracle International Corporation | Application templates and upgrade framework for a multi-tenant identity cloud service |
US10574676B2 (en) | 2017-10-06 | 2020-02-25 | Fyde, Inc. | Network traffic inspection |
US11134058B1 (en) | 2017-10-06 | 2021-09-28 | Barracuda Networks, Inc. | Network traffic inspection |
US11416563B1 (en) | 2017-10-20 | 2022-08-16 | Amazon Technologies, Inc. | Query language for selecting and addressing resources |
US10715564B2 (en) | 2018-01-29 | 2020-07-14 | Oracle International Corporation | Dynamic client registration for an identity cloud service |
US11196733B2 (en) * | 2018-02-08 | 2021-12-07 | Dell Products L.P. | System and method for group of groups single sign-on demarcation based on first user login |
CN108536487A (en) * | 2018-04-12 | 2018-09-14 | 珠海横琴盛达兆业科技投资有限公司 | A kind of Get request method of load server data succinct based on Android platform, efficient |
GB2563497B (en) * | 2018-05-18 | 2019-10-09 | Qip Solutions Ltd | Data filtering |
US10992759B2 (en) | 2018-06-07 | 2021-04-27 | Sap Se | Web application session security with protected session identifiers |
US10972481B2 (en) * | 2018-06-07 | 2021-04-06 | Sap Se | Web application session security |
US11012444B2 (en) | 2018-06-25 | 2021-05-18 | Oracle International Corporation | Declarative third party identity provider integration for a multi-tenant identity cloud service |
GB2575664B (en) * | 2018-07-18 | 2022-08-24 | Airbus Defence & Space Ltd | Secure remote computer system |
CN109286620B (en) * | 2018-09-25 | 2022-07-08 | 平安科技(深圳)有限公司 | User right management method, system, device and computer readable storage medium |
AU2019356522A1 (en) * | 2018-10-08 | 2021-05-27 | Alkira Software Holdings Pty Ltd | Secure service interaction |
US11693835B2 (en) | 2018-10-17 | 2023-07-04 | Oracle International Corporation | Dynamic database schema allocation on tenant onboarding for a multi-tenant identity cloud service |
US11321187B2 (en) | 2018-10-19 | 2022-05-03 | Oracle International Corporation | Assured lazy rollback for a multi-tenant identity cloud service |
CN109492375B (en) * | 2018-11-01 | 2021-07-16 | 北京京航计算通讯研究所 | SAP ERP single sign-on system based on JAVA middleware integration mode |
DE102018127949A1 (en) | 2018-11-08 | 2020-05-14 | Samson Aktiengesellschaft | Control of access rights in a networked system with data processing |
US10824770B2 (en) * | 2018-12-13 | 2020-11-03 | Sap Se | Web application execution with secure elements |
US10958662B1 (en) * | 2019-01-24 | 2021-03-23 | Fyde, Inc. | Access proxy platform |
US11651357B2 (en) | 2019-02-01 | 2023-05-16 | Oracle International Corporation | Multifactor authentication without a user footprint |
US11061929B2 (en) | 2019-02-08 | 2021-07-13 | Oracle International Corporation | Replication of resource type and schema metadata for a multi-tenant identity cloud service |
US11457040B1 (en) | 2019-02-12 | 2022-09-27 | Barracuda Networks, Inc. | Reverse TCP/IP stack |
US11321343B2 (en) | 2019-02-19 | 2022-05-03 | Oracle International Corporation | Tenant replication bootstrap for a multi-tenant identity cloud service |
US11669321B2 (en) | 2019-02-20 | 2023-06-06 | Oracle International Corporation | Automated database upgrade for a multi-tenant identity cloud service |
US11792226B2 (en) | 2019-02-25 | 2023-10-17 | Oracle International Corporation | Automatic api document generation from scim metadata |
US11423111B2 (en) | 2019-02-25 | 2022-08-23 | Oracle International Corporation | Client API for rest based endpoints for a multi-tenant identify cloud service |
US11303649B2 (en) | 2019-05-30 | 2022-04-12 | International Business Machines Corporation | Maintaining electronic communications session continuity during session inactivity |
US11277373B2 (en) | 2019-07-24 | 2022-03-15 | Lookout, Inc. | Security during domain name resolution and browsing |
US11870770B2 (en) | 2019-09-13 | 2024-01-09 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration |
US11687378B2 (en) | 2019-09-13 | 2023-06-27 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration and bridge high availability |
US11611548B2 (en) | 2019-11-22 | 2023-03-21 | Oracle International Corporation | Bulk multifactor authentication enrollment |
US11424914B2 (en) | 2019-12-03 | 2022-08-23 | Microsoft Technology Licensing, Llc | Enhanced security of secret data for dynamic user groups |
US11455412B2 (en) | 2019-12-03 | 2022-09-27 | Microsoft Technology Licensing, Llc | Enhanced management of access rights for dynamic user groups sharing secret data |
CN111064794B (en) * | 2019-12-19 | 2022-04-15 | 浙江诺诺网络科技有限公司 | Fault detection method, device, equipment and storage medium of terminal equipment |
CN111131436B (en) * | 2019-12-20 | 2022-08-30 | 广州品唯软件有限公司 | Method and device for quickly searching proxy and readable storage medium |
FR3105849B1 (en) * | 2019-12-27 | 2022-01-07 | Bull Sas | AUTHORIZATION MANAGEMENT METHOD AND SYSTEM FOR A UNIFIED GOVERNANCE PLATFORM FOR A MULTIPLE HEAVY COMPUTING SOLUTIONS |
US11968214B2 (en) * | 2020-03-16 | 2024-04-23 | Microsoft Technology Licensing, Llc | Efficient retrieval and rendering of access-controlled computer resources |
US11483312B2 (en) * | 2020-03-31 | 2022-10-25 | LendingClub Bank, National Association | Conditionally-deferred authentication steps for tiered authentication |
US11470090B2 (en) | 2020-03-31 | 2022-10-11 | LendingClub Bank, National Association | Dynamically-tiered authentication |
US11522867B2 (en) | 2020-03-31 | 2022-12-06 | LendingClub Bank, National Association | Secure content management through authentication |
US11303695B2 (en) | 2020-04-27 | 2022-04-12 | Imperva, Inc. | Forced identification with automated POST resubmission |
US11468525B2 (en) | 2020-06-16 | 2022-10-11 | Bank Of America Corporation | Coordination platform for generating and managing authority tokens |
US20220261761A1 (en) * | 2021-02-17 | 2022-08-18 | Atlassian Pty Ltd. | Displaying content in a collaborative work environment |
US11281730B1 (en) * | 2021-07-08 | 2022-03-22 | metacluster lt, UAB | Direct leg access for proxy web scraping |
US20230297664A1 (en) * | 2022-03-16 | 2023-09-21 | At&T Intellectual Property I, L.P. | Access to cloud-distributed applications via access credential locker service |
US12047469B1 (en) * | 2023-05-31 | 2024-07-23 | Microsoft Technology Licensing, Llc | Inserting and replacing placeholders in resource code |
Citations (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US587928A (en) * | 1897-08-10 | Paper-bag fastener | ||
US5335345A (en) * | 1990-04-11 | 1994-08-02 | Bell Communications Research, Inc. | Dynamic query optimization using partial information |
US5594793A (en) * | 1993-10-28 | 1997-01-14 | Sgs-Thomson Microelectronics, S.A. | Integrated circuit containing a protected memory and secured system using said integrated circuit |
US5797128A (en) * | 1995-07-03 | 1998-08-18 | Sun Microsystems, Inc. | System and method for implementing a hierarchical policy for computer system administration |
US5872928A (en) * | 1995-02-24 | 1999-02-16 | Cabletron Systems, Inc. | Method and apparatus for defining and enforcing policies for configuration management in communications networks |
US5941947A (en) * | 1995-08-18 | 1999-08-24 | Microsoft Corporation | System and method for controlling access to data entities in a computer network |
US6029196A (en) * | 1997-06-18 | 2000-02-22 | Netscape Communications Corporation | Automatic client configuration system |
US6055637A (en) * | 1996-09-27 | 2000-04-25 | Electronic Data Systems Corporation | System and method for accessing enterprise-wide resources by presenting to the resource a temporary credential |
US6073242A (en) * | 1998-03-19 | 2000-06-06 | Agorics, Inc. | Electronic authority server |
US6088679A (en) * | 1997-12-01 | 2000-07-11 | The United States Of America As Represented By The Secretary Of Commerce | Workflow management employing role-based access control |
US6158010A (en) * | 1998-10-28 | 2000-12-05 | Crosslogix, Inc. | System and method for maintaining security in a distributed computer network |
US6202066B1 (en) * | 1997-11-19 | 2001-03-13 | The United States Of America As Represented By The Secretary Of Commerce | Implementation of role/group permission association using object access type |
US6256741B1 (en) * | 1996-04-30 | 2001-07-03 | At&T Corp. | Specifying security protocols and policy constraints in distributed systems |
US6256711B1 (en) * | 1996-05-01 | 2001-07-03 | Sun Microsystems, Inc. | Method for purging unused data from a cache memory |
US6285366B1 (en) * | 1998-06-30 | 2001-09-04 | Sun Microsystems, Inc. | Hierarchy navigation system |
US6304881B1 (en) * | 1998-03-03 | 2001-10-16 | Pumatech, Inc. | Remote data access and synchronization |
US20010039586A1 (en) * | 1999-12-06 | 2001-11-08 | Leonard Primak | System and method for dynamic content routing |
US6321336B1 (en) * | 1998-03-13 | 2001-11-20 | Secure Computing Corporation | System and method for redirecting network traffic to provide secure communication |
US20010044893A1 (en) * | 2000-01-07 | 2001-11-22 | Tropic Networks Onc. | Distributed subscriber management system |
US20010047485A1 (en) * | 2000-03-06 | 2001-11-29 | Daniel Brown | Computer security system |
US6327628B1 (en) * | 2000-05-19 | 2001-12-04 | Epicentric, Inc. | Portal server that provides a customizable user Interface for access to computer networks |
US6327594B1 (en) * | 1999-01-29 | 2001-12-04 | International Business Machines Corporation | Methods for shared data management in a pervasive computing environment |
US6339826B2 (en) * | 1998-05-05 | 2002-01-15 | International Business Machines Corp. | Client-server system for maintaining a user desktop consistent with server application user access permissions |
US6360363B1 (en) * | 1997-12-31 | 2002-03-19 | Eternal Systems, Inc. | Live upgrade process for object-oriented programs |
US6385627B1 (en) * | 1997-11-24 | 2002-05-07 | International Business Machines Corporation | Method, apparatus and computer program product for providing document user role indication |
US6397222B1 (en) * | 1998-08-07 | 2002-05-28 | Paul Zellweger | Method and apparatus for end-user management of a content menu on a network |
US20020107920A1 (en) * | 2001-02-08 | 2002-08-08 | Timo Hotti | Method and system for data management |
US6460141B1 (en) * | 1998-10-28 | 2002-10-01 | Rsa Security Inc. | Security and access management system for web-enabled and non-web-enabled applications and content on a computer network |
US6477543B1 (en) * | 1998-10-23 | 2002-11-05 | International Business Machines Corporation | Method, apparatus and program storage device for a client and adaptive synchronization and transformation server |
US20020169893A1 (en) * | 2001-05-09 | 2002-11-14 | Li-Han Chen | System and method for computer data synchronization |
US6484261B1 (en) * | 1998-02-17 | 2002-11-19 | Cisco Technology, Inc. | Graphical network security policy management |
US20020178119A1 (en) * | 2001-05-24 | 2002-11-28 | International Business Machines Corporation | Method and system for a role-based access control model with active roles |
US20020188869A1 (en) * | 2001-06-11 | 2002-12-12 | Paul Patrick | System and method for server security and entitlement processing |
US20030046576A1 (en) * | 2001-08-30 | 2003-03-06 | International Business Machines Corporation | Role-permission model for security policy administration and enforcement |
US6542993B1 (en) * | 1999-03-12 | 2003-04-01 | Lucent Technologies Inc. | Security management system and method |
US20030069874A1 (en) * | 1999-05-05 | 2003-04-10 | Eyal Hertzog | Method and system to automate the updating of personal information within a personal information management application and to synchronize such updated personal information management applications |
US20030078959A1 (en) * | 2001-10-18 | 2003-04-24 | Wilson Yeung | Deployment of business logic software and data content onto network servers |
US6574736B1 (en) * | 1998-11-30 | 2003-06-03 | Microsoft Corporation | Composable roles |
US20030110448A1 (en) * | 2001-10-24 | 2003-06-12 | John Haut | System and method for portal page layout |
US6581054B1 (en) * | 1999-07-30 | 2003-06-17 | Computer Associates Think, Inc. | Dynamic query model and method |
US20030126464A1 (en) * | 2001-12-04 | 2003-07-03 | Mcdaniel Patrick D. | Method and system for determining and enforcing security policy in a communication session |
US20030146937A1 (en) * | 2001-09-11 | 2003-08-07 | Lee Seung Woo | Multi-level data management system |
US20030167455A1 (en) * | 2000-04-04 | 2003-09-04 | Jose Iborra | Automatic software production system |
US20030200350A1 (en) * | 2002-04-19 | 2003-10-23 | Ajay Kumar | Class dependency graph-based class loading and reloading |
US20040024812A1 (en) * | 2000-11-08 | 2004-02-05 | Park Chong Mok | Content publication system for supporting real-time integration and processing of multimedia content including dynamic data, and method thereof |
US6697805B1 (en) * | 2000-04-14 | 2004-02-24 | Microsoft Corporation | XML methods and systems for synchronizing multiple computing devices |
US6738789B2 (en) * | 2000-01-25 | 2004-05-18 | Fusionone, Inc. | Data package including synchronization data |
US20040117493A1 (en) * | 2002-11-28 | 2004-06-17 | International Business Machines Corporation | Method and system for accessing internet resources through a proxy using the form-based authentication |
US6757822B1 (en) * | 2000-05-31 | 2004-06-29 | Networks Associates Technology, Inc. | System, method and computer program product for secure communications using a security service provider manager |
US6769095B1 (en) * | 1999-07-23 | 2004-07-27 | Codagen Technologies Corp. | Hierarchically structured control information editor |
US6772332B1 (en) * | 1994-10-12 | 2004-08-03 | Secure Computing Corporation | System and method for providing secure internetwork services via an assured pipeline |
US20040162905A1 (en) * | 2003-02-14 | 2004-08-19 | Griffin Philip B. | Method for role and resource policy management optimization |
US20040215650A1 (en) * | 2003-04-09 | 2004-10-28 | Ullattil Shaji | Interfaces and methods for group policy management |
US6832313B1 (en) * | 1999-07-21 | 2004-12-14 | Fujitsu Services Limited | Migration from in-clear to encrypted working over a communications link |
US20050021656A1 (en) * | 2003-07-21 | 2005-01-27 | Callegari Andres C. | System and method for network transmission of graphical data through a distributed application |
US6854035B2 (en) * | 2001-10-05 | 2005-02-08 | International Business Machines Corporation | Storage area network methods and apparatus for display and management of a hierarchical file system extension policy |
US6857012B2 (en) * | 2000-10-26 | 2005-02-15 | Intel Corporation | Method and apparatus for initializing a new node in a network |
US6873988B2 (en) * | 2001-07-06 | 2005-03-29 | Check Point Software Technologies, Inc. | System and methods providing anti-virus cooperative enforcement |
US6931549B1 (en) * | 2000-05-25 | 2005-08-16 | Stamps.Com | Method and apparatus for secure data storage and retrieval |
US6934934B1 (en) * | 1999-08-30 | 2005-08-23 | Empirix Inc. | Method and system for software object testing |
US20050256894A1 (en) * | 2002-08-19 | 2005-11-17 | Thomas Talanis | Device, especially an automation apparatus, with a file index structure stored in files |
US20050257267A1 (en) * | 2003-02-14 | 2005-11-17 | Williams John L | Network audit and policy assurance system |
US6978379B1 (en) * | 1999-05-28 | 2005-12-20 | Hewlett-Packard Development Company, L.P. | Configuring computer systems |
US7003578B2 (en) * | 2001-04-26 | 2006-02-21 | Hewlett-Packard Development Company, L.P. | Method and system for controlling a policy-based network |
US7047522B1 (en) * | 2001-04-30 | 2006-05-16 | General Electric Capital Corporation | Method and system for verifying a computer program |
US20060167858A1 (en) * | 1998-08-14 | 2006-07-27 | Microsoft Corporation | System and method for implementing group policy |
US7093283B1 (en) * | 2002-02-15 | 2006-08-15 | Cisco Technology, Inc. | Method and apparatus for deploying configuration instructions to security devices in order to implement a security policy on a network |
US7093261B1 (en) * | 2000-07-28 | 2006-08-15 | Fair Isaac Corporation | Message integration framework for multi-application systems |
US7124413B1 (en) * | 1999-11-03 | 2006-10-17 | Accenture Llp | Framework for integrating existing and new information technology applications and systems |
US20060280191A1 (en) * | 2004-02-19 | 2006-12-14 | Kai Nishida (90%) | Method for verifying and creating highly secure anonymous communication path in peer-to-peer anonymous proxy |
US7185192B1 (en) * | 2000-07-07 | 2007-02-27 | Emc Corporation | Methods and apparatus for controlling access to a resource |
US7219140B2 (en) * | 2001-12-05 | 2007-05-15 | Dennis Craig Marl | Configuration and management systems for mobile and embedded devices |
US7272625B1 (en) * | 1997-03-10 | 2007-09-18 | Sonicwall, Inc. | Generalized policy server |
US20070240063A1 (en) * | 2006-04-11 | 2007-10-11 | International Business Machines Corporation | Portlets having different portlet specific enablement states |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6178511B1 (en) * | 1998-04-30 | 2001-01-23 | International Business Machines Corporation | Coordinating user target logons in a single sign-on (SSO) environment |
US6240512B1 (en) * | 1998-04-30 | 2001-05-29 | International Business Machines Corporation | Single sign-on (SSO) mechanism having master key synchronization |
GB2349960A (en) * | 1999-05-08 | 2000-11-15 | Ibm | Secure password provision |
US6892307B1 (en) * | 1999-08-05 | 2005-05-10 | Sun Microsystems, Inc. | Single sign-on framework with trust-level mapping to authentication requirements |
US6609198B1 (en) * | 1999-08-05 | 2003-08-19 | Sun Microsystems, Inc. | Log-on service providing credential level change without loss of session continuity |
US6859878B1 (en) * | 1999-10-28 | 2005-02-22 | International Business Machines Corporation | Universal userid and password management for internet connected devices |
US7093282B2 (en) * | 2001-08-09 | 2006-08-15 | Hillhouse Robert D | Method for supporting dynamic password |
WO2004006132A1 (en) * | 2002-07-09 | 2004-01-15 | Solutions Lab Pte Ltd | Web page graphical user interface |
US7496953B2 (en) * | 2003-04-29 | 2009-02-24 | International Business Machines Corporation | Single sign-on method for web-based applications |
US7958150B2 (en) * | 2004-04-30 | 2011-06-07 | International Business Machines Corporation | Method for implementing fine-grained access control using access restrictions |
KR20070106999A (en) * | 2004-12-17 | 2007-11-06 | 가부시키가이샤 마쯔이세이사쿠쇼 | Method and device for filling powder and granular material in compression molding |
US7676831B2 (en) * | 2005-09-08 | 2010-03-09 | International Business Machines Corporation | Role-based access control management for multiple heterogeneous application components |
US7865943B2 (en) | 2006-09-22 | 2011-01-04 | Oracle International Corporation | Credential vault encryption |
-
2007
- 2007-06-19 US US11/765,303 patent/US7865943B2/en active Active
- 2007-06-19 US US11/765,394 patent/US7861290B2/en active Active
- 2007-06-19 US US11/765,392 patent/US7886352B2/en active Active
- 2007-06-19 US US11/765,389 patent/US20080077982A1/en not_active Abandoned
- 2007-06-19 US US11/765,380 patent/US7861289B2/en active Active
- 2007-06-19 US US11/765,379 patent/US7904953B2/en active Active
- 2007-06-19 US US11/765,375 patent/US20080250388A1/en not_active Abandoned
- 2007-09-21 WO PCT/US2007/079236 patent/WO2008036947A2/en active Application Filing
-
2010
- 2010-11-02 US US12/917,764 patent/US8136150B2/en active Active
-
2012
- 2012-02-01 US US13/364,251 patent/US8397283B2/en active Active
Patent Citations (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US587928A (en) * | 1897-08-10 | Paper-bag fastener | ||
US5335345A (en) * | 1990-04-11 | 1994-08-02 | Bell Communications Research, Inc. | Dynamic query optimization using partial information |
US5594793A (en) * | 1993-10-28 | 1997-01-14 | Sgs-Thomson Microelectronics, S.A. | Integrated circuit containing a protected memory and secured system using said integrated circuit |
US6772332B1 (en) * | 1994-10-12 | 2004-08-03 | Secure Computing Corporation | System and method for providing secure internetwork services via an assured pipeline |
US5872928A (en) * | 1995-02-24 | 1999-02-16 | Cabletron Systems, Inc. | Method and apparatus for defining and enforcing policies for configuration management in communications networks |
US6243747B1 (en) * | 1995-02-24 | 2001-06-05 | Cabletron Systems, Inc. | Method and apparatus for defining and enforcing policies for configuration management in communications networks |
US5797128A (en) * | 1995-07-03 | 1998-08-18 | Sun Microsystems, Inc. | System and method for implementing a hierarchical policy for computer system administration |
US5941947A (en) * | 1995-08-18 | 1999-08-24 | Microsoft Corporation | System and method for controlling access to data entities in a computer network |
US6256741B1 (en) * | 1996-04-30 | 2001-07-03 | At&T Corp. | Specifying security protocols and policy constraints in distributed systems |
US6256711B1 (en) * | 1996-05-01 | 2001-07-03 | Sun Microsystems, Inc. | Method for purging unused data from a cache memory |
US6055637A (en) * | 1996-09-27 | 2000-04-25 | Electronic Data Systems Corporation | System and method for accessing enterprise-wide resources by presenting to the resource a temporary credential |
US7272625B1 (en) * | 1997-03-10 | 2007-09-18 | Sonicwall, Inc. | Generalized policy server |
US6029196A (en) * | 1997-06-18 | 2000-02-22 | Netscape Communications Corporation | Automatic client configuration system |
US6202066B1 (en) * | 1997-11-19 | 2001-03-13 | The United States Of America As Represented By The Secretary Of Commerce | Implementation of role/group permission association using object access type |
US6385627B1 (en) * | 1997-11-24 | 2002-05-07 | International Business Machines Corporation | Method, apparatus and computer program product for providing document user role indication |
US6088679A (en) * | 1997-12-01 | 2000-07-11 | The United States Of America As Represented By The Secretary Of Commerce | Workflow management employing role-based access control |
US6360363B1 (en) * | 1997-12-31 | 2002-03-19 | Eternal Systems, Inc. | Live upgrade process for object-oriented programs |
US6484261B1 (en) * | 1998-02-17 | 2002-11-19 | Cisco Technology, Inc. | Graphical network security policy management |
US6304881B1 (en) * | 1998-03-03 | 2001-10-16 | Pumatech, Inc. | Remote data access and synchronization |
US6321336B1 (en) * | 1998-03-13 | 2001-11-20 | Secure Computing Corporation | System and method for redirecting network traffic to provide secure communication |
US6073242A (en) * | 1998-03-19 | 2000-06-06 | Agorics, Inc. | Electronic authority server |
US6339826B2 (en) * | 1998-05-05 | 2002-01-15 | International Business Machines Corp. | Client-server system for maintaining a user desktop consistent with server application user access permissions |
US6285366B1 (en) * | 1998-06-30 | 2001-09-04 | Sun Microsystems, Inc. | Hierarchy navigation system |
US6397222B1 (en) * | 1998-08-07 | 2002-05-28 | Paul Zellweger | Method and apparatus for end-user management of a content menu on a network |
US20060167858A1 (en) * | 1998-08-14 | 2006-07-27 | Microsoft Corporation | System and method for implementing group policy |
US6477543B1 (en) * | 1998-10-23 | 2002-11-05 | International Business Machines Corporation | Method, apparatus and program storage device for a client and adaptive synchronization and transformation server |
US6460141B1 (en) * | 1998-10-28 | 2002-10-01 | Rsa Security Inc. | Security and access management system for web-enabled and non-web-enabled applications and content on a computer network |
US6158010A (en) * | 1998-10-28 | 2000-12-05 | Crosslogix, Inc. | System and method for maintaining security in a distributed computer network |
US6574736B1 (en) * | 1998-11-30 | 2003-06-03 | Microsoft Corporation | Composable roles |
US6327594B1 (en) * | 1999-01-29 | 2001-12-04 | International Business Machines Corporation | Methods for shared data management in a pervasive computing environment |
US6542993B1 (en) * | 1999-03-12 | 2003-04-01 | Lucent Technologies Inc. | Security management system and method |
US20030069874A1 (en) * | 1999-05-05 | 2003-04-10 | Eyal Hertzog | Method and system to automate the updating of personal information within a personal information management application and to synchronize such updated personal information management applications |
US6978379B1 (en) * | 1999-05-28 | 2005-12-20 | Hewlett-Packard Development Company, L.P. | Configuring computer systems |
US6832313B1 (en) * | 1999-07-21 | 2004-12-14 | Fujitsu Services Limited | Migration from in-clear to encrypted working over a communications link |
US6769095B1 (en) * | 1999-07-23 | 2004-07-27 | Codagen Technologies Corp. | Hierarchically structured control information editor |
US6581054B1 (en) * | 1999-07-30 | 2003-06-17 | Computer Associates Think, Inc. | Dynamic query model and method |
US6934934B1 (en) * | 1999-08-30 | 2005-08-23 | Empirix Inc. | Method and system for software object testing |
US7124413B1 (en) * | 1999-11-03 | 2006-10-17 | Accenture Llp | Framework for integrating existing and new information technology applications and systems |
US20010039586A1 (en) * | 1999-12-06 | 2001-11-08 | Leonard Primak | System and method for dynamic content routing |
US20010044893A1 (en) * | 2000-01-07 | 2001-11-22 | Tropic Networks Onc. | Distributed subscriber management system |
US6738789B2 (en) * | 2000-01-25 | 2004-05-18 | Fusionone, Inc. | Data package including synchronization data |
US20010047485A1 (en) * | 2000-03-06 | 2001-11-29 | Daniel Brown | Computer security system |
US20030167455A1 (en) * | 2000-04-04 | 2003-09-04 | Jose Iborra | Automatic software production system |
US6697805B1 (en) * | 2000-04-14 | 2004-02-24 | Microsoft Corporation | XML methods and systems for synchronizing multiple computing devices |
US6327628B1 (en) * | 2000-05-19 | 2001-12-04 | Epicentric, Inc. | Portal server that provides a customizable user Interface for access to computer networks |
US6931549B1 (en) * | 2000-05-25 | 2005-08-16 | Stamps.Com | Method and apparatus for secure data storage and retrieval |
US6757822B1 (en) * | 2000-05-31 | 2004-06-29 | Networks Associates Technology, Inc. | System, method and computer program product for secure communications using a security service provider manager |
US7185192B1 (en) * | 2000-07-07 | 2007-02-27 | Emc Corporation | Methods and apparatus for controlling access to a resource |
US7093261B1 (en) * | 2000-07-28 | 2006-08-15 | Fair Isaac Corporation | Message integration framework for multi-application systems |
US6857012B2 (en) * | 2000-10-26 | 2005-02-15 | Intel Corporation | Method and apparatus for initializing a new node in a network |
US20040024812A1 (en) * | 2000-11-08 | 2004-02-05 | Park Chong Mok | Content publication system for supporting real-time integration and processing of multimedia content including dynamic data, and method thereof |
US20020107920A1 (en) * | 2001-02-08 | 2002-08-08 | Timo Hotti | Method and system for data management |
US7003578B2 (en) * | 2001-04-26 | 2006-02-21 | Hewlett-Packard Development Company, L.P. | Method and system for controlling a policy-based network |
US7047522B1 (en) * | 2001-04-30 | 2006-05-16 | General Electric Capital Corporation | Method and system for verifying a computer program |
US20020169893A1 (en) * | 2001-05-09 | 2002-11-14 | Li-Han Chen | System and method for computer data synchronization |
US20020178119A1 (en) * | 2001-05-24 | 2002-11-28 | International Business Machines Corporation | Method and system for a role-based access control model with active roles |
US20020188869A1 (en) * | 2001-06-11 | 2002-12-12 | Paul Patrick | System and method for server security and entitlement processing |
US6873988B2 (en) * | 2001-07-06 | 2005-03-29 | Check Point Software Technologies, Inc. | System and methods providing anti-virus cooperative enforcement |
US20030046576A1 (en) * | 2001-08-30 | 2003-03-06 | International Business Machines Corporation | Role-permission model for security policy administration and enforcement |
US20030146937A1 (en) * | 2001-09-11 | 2003-08-07 | Lee Seung Woo | Multi-level data management system |
US6854035B2 (en) * | 2001-10-05 | 2005-02-08 | International Business Machines Corporation | Storage area network methods and apparatus for display and management of a hierarchical file system extension policy |
US20030078959A1 (en) * | 2001-10-18 | 2003-04-24 | Wilson Yeung | Deployment of business logic software and data content onto network servers |
US20030110448A1 (en) * | 2001-10-24 | 2003-06-12 | John Haut | System and method for portal page layout |
US20030126464A1 (en) * | 2001-12-04 | 2003-07-03 | Mcdaniel Patrick D. | Method and system for determining and enforcing security policy in a communication session |
US7219140B2 (en) * | 2001-12-05 | 2007-05-15 | Dennis Craig Marl | Configuration and management systems for mobile and embedded devices |
US7093283B1 (en) * | 2002-02-15 | 2006-08-15 | Cisco Technology, Inc. | Method and apparatus for deploying configuration instructions to security devices in order to implement a security policy on a network |
US20030200350A1 (en) * | 2002-04-19 | 2003-10-23 | Ajay Kumar | Class dependency graph-based class loading and reloading |
US20050256894A1 (en) * | 2002-08-19 | 2005-11-17 | Thomas Talanis | Device, especially an automation apparatus, with a file index structure stored in files |
US20040117493A1 (en) * | 2002-11-28 | 2004-06-17 | International Business Machines Corporation | Method and system for accessing internet resources through a proxy using the form-based authentication |
US20050257267A1 (en) * | 2003-02-14 | 2005-11-17 | Williams John L | Network audit and policy assurance system |
US20040162905A1 (en) * | 2003-02-14 | 2004-08-19 | Griffin Philip B. | Method for role and resource policy management optimization |
US20040215650A1 (en) * | 2003-04-09 | 2004-10-28 | Ullattil Shaji | Interfaces and methods for group policy management |
US20050021656A1 (en) * | 2003-07-21 | 2005-01-27 | Callegari Andres C. | System and method for network transmission of graphical data through a distributed application |
US20060280191A1 (en) * | 2004-02-19 | 2006-12-14 | Kai Nishida (90%) | Method for verifying and creating highly secure anonymous communication path in peer-to-peer anonymous proxy |
US20070240063A1 (en) * | 2006-04-11 | 2007-10-11 | International Business Machines Corporation | Portlets having different portlet specific enablement states |
Cited By (97)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8473620B2 (en) | 2003-04-14 | 2013-06-25 | Riverbed Technology, Inc. | Interception of a cloud-based communication connection |
US20100318665A1 (en) * | 2003-04-14 | 2010-12-16 | Riverbed Technology, Inc. | Interception of a cloud-based communication connection |
US20100299525A1 (en) * | 2005-08-10 | 2010-11-25 | Riverbed Technology, Inc. | Method and apparatus for split-terminating a secure network connection, with client authentication |
US20090083538A1 (en) * | 2005-08-10 | 2009-03-26 | Riverbed Technology, Inc. | Reducing latency of split-terminated secure communication protocol sessions |
US20090119504A1 (en) * | 2005-08-10 | 2009-05-07 | Riverbed Technology, Inc. | Intercepting and split-terminating authenticated communication connections |
US8478986B2 (en) | 2005-08-10 | 2013-07-02 | Riverbed Technology, Inc. | Reducing latency of split-terminated secure communication protocol sessions |
US8438628B2 (en) | 2005-08-10 | 2013-05-07 | Riverbed Technology, Inc. | Method and apparatus for split-terminating a secure network connection, with client authentication |
US9577990B2 (en) | 2005-12-21 | 2017-02-21 | International Business Machines Corporation | Control of access to a secondary system |
US20120226911A1 (en) * | 2005-12-21 | 2012-09-06 | Stephan Feil | Control of access to a secondary system |
US9087180B2 (en) * | 2005-12-21 | 2015-07-21 | International Business Machines Corporation | Control of access to a secondary system |
US20130275764A1 (en) * | 2005-12-21 | 2013-10-17 | International Business Machines Corporation | Control of access to a secondary system |
US8522324B2 (en) * | 2005-12-21 | 2013-08-27 | International Business Machines Corporation | Control of access to a secondary system |
US8782393B1 (en) | 2006-03-23 | 2014-07-15 | F5 Networks, Inc. | Accessing SSL connection data by a third-party |
US9742806B1 (en) | 2006-03-23 | 2017-08-22 | F5 Networks, Inc. | Accessing SSL connection data by a third-party |
US8615791B1 (en) * | 2007-11-20 | 2013-12-24 | West Corporation | Multi-domain login and messaging |
US8079066B1 (en) * | 2007-11-20 | 2011-12-13 | West Corporation | Multi-domain login and messaging |
US8990908B1 (en) * | 2007-11-20 | 2015-03-24 | West Corporation | Multi-domain login and messaging |
US7490141B1 (en) | 2008-05-15 | 2009-02-10 | Ibm Corporation | Ajax proxy indirection for external domain requests |
US8041826B2 (en) | 2008-05-15 | 2011-10-18 | International Business Machines Corporation | Ajax proxy indirection for external domain requests |
US20090287836A1 (en) * | 2008-05-15 | 2009-11-19 | Ibm Corporation | Ajax proxy indirection for external domain requests |
US9684628B2 (en) * | 2008-09-29 | 2017-06-20 | Oracle America, Inc. | Mechanism for inserting trustworthy parameters into AJAX via server-side proxy |
US20100082771A1 (en) * | 2008-09-29 | 2010-04-01 | Sun Microsystems, Inc. | Mechanism for inserting trustworthy parameters into ajax via server-side proxy |
US20100223322A1 (en) * | 2009-02-27 | 2010-09-02 | Sun Microsystems, Inc. | Server based framework for improving ajax performance |
US8990289B2 (en) | 2009-02-27 | 2015-03-24 | Oracle America, Inc. | Server based framework for improving Ajax performance |
US20100228968A1 (en) * | 2009-03-03 | 2010-09-09 | Riverbed Technology, Inc. | Split termination of secure communication sessions with mutual certificate-based authentication |
US8707043B2 (en) | 2009-03-03 | 2014-04-22 | Riverbed Technology, Inc. | Split termination of secure communication sessions with mutual certificate-based authentication |
US8332917B2 (en) | 2009-12-29 | 2012-12-11 | International Business Machines Corporation | Providing secure dynamic role selection and managing privileged user access from a client device |
US8869250B2 (en) | 2009-12-29 | 2014-10-21 | International Business Machines Corporation | Providing secure dynamic role selection and managing privileged user access from a client device |
US20110162046A1 (en) * | 2009-12-29 | 2011-06-30 | International Business Machines Corporation | Providing Secure Dynamic Role Selection and Managing Privileged User Access From a Client Device |
US9667601B2 (en) | 2010-03-19 | 2017-05-30 | F5 Networks, Inc. | Proxy SSL handoff via mid-stream renegotiation |
US9172682B2 (en) | 2010-03-19 | 2015-10-27 | F5 Networks, Inc. | Local authentication in proxy SSL tunnels using a client-side proxy agent |
US9705852B2 (en) | 2010-03-19 | 2017-07-11 | F5 Networks, Inc. | Proxy SSL authentication in split SSL for client-side proxy agent resources with content insertion |
US8700892B2 (en) | 2010-03-19 | 2014-04-15 | F5 Networks, Inc. | Proxy SSL authentication in split SSL for client-side proxy agent resources with content insertion |
US20110231652A1 (en) * | 2010-03-19 | 2011-09-22 | F5 Networks, Inc. | Proxy ssl authentication in split ssl for client-side proxy agent resources with content insertion |
US20110231923A1 (en) * | 2010-03-19 | 2011-09-22 | F5 Networks, Inc. | Local authentication in proxy ssl tunnels using a client-side proxy agent |
US9509663B2 (en) | 2010-03-19 | 2016-11-29 | F5 Networks, Inc. | Secure distribution of session credentials from client-side to server-side traffic management devices |
US9210131B2 (en) | 2010-03-19 | 2015-12-08 | F5 Networks, Inc. | Aggressive rehandshakes on unknown session identifiers for split SSL |
US9178706B1 (en) | 2010-03-19 | 2015-11-03 | F5 Networks, Inc. | Proxy SSL authentication in split SSL for client-side proxy agent resources with content insertion |
US20110231651A1 (en) * | 2010-03-19 | 2011-09-22 | F5 Networks, Inc. | Strong ssl proxy authentication with forced ssl renegotiation against a target server |
US9100370B2 (en) | 2010-03-19 | 2015-08-04 | F5 Networks, Inc. | Strong SSL proxy authentication with forced SSL renegotiation against a target server |
US9166955B2 (en) | 2010-03-19 | 2015-10-20 | F5 Networks, Inc. | Proxy SSL handoff via mid-stream renegotiation |
US8725767B1 (en) * | 2010-03-31 | 2014-05-13 | Emc Corporation | Multi-dimensional object model for storage management |
US9049247B2 (en) | 2010-04-01 | 2015-06-02 | Cloudfare, Inc. | Internet-based proxy service for responding to server offline errors |
US10313475B2 (en) | 2010-04-01 | 2019-06-04 | Cloudflare, Inc. | Internet-based proxy service for responding to server offline errors |
US10853443B2 (en) | 2010-04-01 | 2020-12-01 | Cloudflare, Inc. | Internet-based proxy security services |
US10855798B2 (en) | 2010-04-01 | 2020-12-01 | Cloudfare, Inc. | Internet-based proxy service for responding to server offline errors |
US9369437B2 (en) | 2010-04-01 | 2016-06-14 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US11675872B2 (en) | 2010-04-01 | 2023-06-13 | Cloudflare, Inc. | Methods and apparatuses for providing internet-based proxy services |
US10671694B2 (en) | 2010-04-01 | 2020-06-02 | Cloudflare, Inc. | Methods and apparatuses for providing internet-based proxy services |
US10621263B2 (en) | 2010-04-01 | 2020-04-14 | Cloudflare, Inc. | Internet-based proxy service to limit internet visitor connection speed |
US11494460B2 (en) | 2010-04-01 | 2022-11-08 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US9009330B2 (en) | 2010-04-01 | 2015-04-14 | Cloudflare, Inc. | Internet-based proxy service to limit internet visitor connection speed |
US9548966B2 (en) | 2010-04-01 | 2017-01-17 | Cloudflare, Inc. | Validating visitor internet-based security threats |
US9565166B2 (en) | 2010-04-01 | 2017-02-07 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US12001504B2 (en) | 2010-04-01 | 2024-06-04 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US11321419B2 (en) | 2010-04-01 | 2022-05-03 | Cloudflare, Inc. | Internet-based proxy service to limit internet visitor connection speed |
US9628581B2 (en) | 2010-04-01 | 2017-04-18 | Cloudflare, Inc. | Internet-based proxy service for responding to server offline errors |
US9634993B2 (en) | 2010-04-01 | 2017-04-25 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US9634994B2 (en) | 2010-04-01 | 2017-04-25 | Cloudflare, Inc. | Custom responses for resource unavailable errors |
US8850580B2 (en) * | 2010-04-01 | 2014-09-30 | Cloudflare, Inc. | Validating visitor internet-based security threats |
US10872128B2 (en) | 2010-04-01 | 2020-12-22 | Cloudflare, Inc. | Custom responses for resource unavailable errors |
US10585967B2 (en) | 2010-04-01 | 2020-03-10 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US10922377B2 (en) | 2010-04-01 | 2021-02-16 | Cloudflare, Inc. | Internet-based proxy service to limit internet visitor connection speed |
US10452741B2 (en) | 2010-04-01 | 2019-10-22 | Cloudflare, Inc. | Custom responses for resource unavailable errors |
US20110283359A1 (en) * | 2010-04-01 | 2011-11-17 | Matthew Browning Prince | Validating Visitor Internet-Based Security Threats |
US11244024B2 (en) | 2010-04-01 | 2022-02-08 | Cloudflare, Inc. | Methods and apparatuses for providing internet-based proxy services |
US10984068B2 (en) | 2010-04-01 | 2021-04-20 | Cloudflare, Inc. | Internet-based proxy service to modify internet responses |
US10102301B2 (en) | 2010-04-01 | 2018-10-16 | Cloudflare, Inc. | Internet-based proxy security services |
US10169479B2 (en) | 2010-04-01 | 2019-01-01 | Cloudflare, Inc. | Internet-based proxy service to limit internet visitor connection speed |
US10243927B2 (en) | 2010-04-01 | 2019-03-26 | Cloudflare, Inc | Methods and apparatuses for providing Internet-based proxy services |
US12066986B2 (en) * | 2010-09-23 | 2024-08-20 | Salesforce, Inc. | Methods and apparatus for suppressing network feed activities using an information feed in an on-demand database service environment |
US20230085714A1 (en) * | 2010-09-23 | 2023-03-23 | Salesforce.Com, Inc. | Methods and apparatus for suppressing network feed activities using an information feed in an on-demand database service environment |
US9087189B1 (en) | 2011-05-03 | 2015-07-21 | Symantec Corporation | Network access control for cloud services |
US9749331B1 (en) | 2011-05-03 | 2017-08-29 | Symantec Corporation | Context based conditional access for cloud services |
US8813174B1 (en) | 2011-05-03 | 2014-08-19 | Symantec Corporation | Embedded security blades for cloud service providers |
US8819768B1 (en) * | 2011-05-03 | 2014-08-26 | Robert Koeten | Split password vault |
US9450945B1 (en) | 2011-05-03 | 2016-09-20 | Symantec Corporation | Unified access controls for cloud services |
US9769240B2 (en) | 2011-05-20 | 2017-09-19 | Cloudflare, Inc. | Loading of web resources |
US9342620B2 (en) | 2011-05-20 | 2016-05-17 | Cloudflare, Inc. | Loading of web resources |
US10333711B2 (en) | 2011-06-17 | 2019-06-25 | Microsoft Technology Licensing, Llc | Controlling access to protected objects |
US8959591B2 (en) * | 2012-01-06 | 2015-02-17 | Elastic Path Software, Inc. | Follow location handler and selector functionality in a stateless microkernel web server architecture |
US20130179945A1 (en) * | 2012-01-06 | 2013-07-11 | Elastic Path Software, Inc. | Follow Location Handler and Selector Functionality in a Stateless Microkernel Web Server Architecture |
US9374221B1 (en) * | 2013-12-20 | 2016-06-21 | Emc Corporation | Distributed protection of credential stores utilizing multiple keys derived from a master key |
US9467456B2 (en) | 2014-08-29 | 2016-10-11 | Dell Software Inc. | Single login authentication for users with multiple IPv4/IPv6 addresses |
US9973490B2 (en) | 2014-08-29 | 2018-05-15 | Sonicwall Inc. | Single login authentication for users with multiple IPV4/IPV6 addresses |
US10623375B2 (en) | 2014-09-16 | 2020-04-14 | International Business Machines Corporation | Auto-detection of web-based application characteristics for reverse proxy enablement |
US10477369B2 (en) | 2015-02-25 | 2019-11-12 | Assa Abloy Ab | Systems and methods for updating a mobile device |
US10945112B2 (en) | 2015-02-25 | 2021-03-09 | Assa Abloy Ab | Systems and methods for updating a mobile device |
EP3062295A1 (en) * | 2015-02-25 | 2016-08-31 | Assa Abloy AB | Systems and methods for updating a mobile device |
US11317266B2 (en) | 2015-02-25 | 2022-04-26 | Assa Abloy Ab | Systems and methods for updating a mobile device |
CN106559383A (en) * | 2015-09-25 | 2017-04-05 | 北京国双科技有限公司 | The login method and device of single-sign-on |
US11088822B2 (en) | 2016-03-25 | 2021-08-10 | Synergex Group | Methods, systems, and media for using dynamic public key infrastructure to send and receive encrypted messages |
US20180198878A1 (en) * | 2017-01-09 | 2018-07-12 | Hewlett Packard Enterprise Development Lp | Shared sessions through reverse proxy |
US20210273935A1 (en) * | 2018-10-17 | 2021-09-02 | Wayne Taylor | Systems, methods, and media for managing user credentials |
US11025614B2 (en) * | 2018-10-17 | 2021-06-01 | Synergex Group | Systems, methods, and media for managing user credentials |
CN112738200A (en) * | 2020-12-25 | 2021-04-30 | 肯特智能技术(深圳)股份有限公司 | Convenient operation and maintenance tool and method based on closed public network system |
CN113553569A (en) * | 2021-07-06 | 2021-10-26 | 猪八戒股份有限公司 | Single sign-on method, system and terminal of Syngnathus system based on proxy server |
Also Published As
Publication number | Publication date |
---|---|
US20110047611A1 (en) | 2011-02-24 |
US7861289B2 (en) | 2010-12-28 |
US8397283B2 (en) | 2013-03-12 |
US20080077980A1 (en) | 2008-03-27 |
US7861290B2 (en) | 2010-12-28 |
US20080077981A1 (en) | 2008-03-27 |
US20080250388A1 (en) | 2008-10-09 |
WO2008036947A2 (en) | 2008-03-27 |
US20080077983A1 (en) | 2008-03-27 |
US20120137213A1 (en) | 2012-05-31 |
US20080077809A1 (en) | 2008-03-27 |
US7865943B2 (en) | 2011-01-04 |
US7886352B2 (en) | 2011-02-08 |
WO2008036947A3 (en) | 2008-10-02 |
US20080313728A1 (en) | 2008-12-18 |
US7904953B2 (en) | 2011-03-08 |
US8136150B2 (en) | 2012-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7904953B2 (en) | Pagelets | |
US11520799B2 (en) | Systems and methods for data visualization, dashboard creation and management | |
US10484385B2 (en) | Accessing an application through application clients and web browsers | |
EP2976709B1 (en) | Systems and methods for intercepting, processing, and protecting user data through web application pattern detection | |
US11526530B2 (en) | Systems and methods for data visualization, dashboard creation and management | |
KR101720160B1 (en) | Authenticated database connectivity for unattended applications | |
US8082294B2 (en) | Methods and systems for providing web applications | |
US11714693B2 (en) | Data driven API conversion | |
Scarioni | Pro Spring Security | |
WO2023077999A1 (en) | Application access control method and apparatus, and computer device and storage medium | |
CN116484338A (en) | Database access method and device | |
Scarioni et al. | Pro spring security: securing spring framework 5 and boot 2-based Java applications | |
Alex et al. | Spring security reference | |
Del Vecchio et al. | Evaluating Grid portal security | |
Carpenter | Microsoft Windows server administration essentials | |
Alex et al. | Spring Security | |
Vecchio et al. | Evaluating grid portal security | |
Salecha | Security and Secrets Management | |
Linares Zapater | Multilevel multifactor single sign-on | |
Keil | Security Frameworks | |
Barabonkov | Guarda: A web application firewall for WebAuthn transaction authentication | |
Nardone et al. | Configuring Alternative Authentication Providers | |
Masini | Securing WebLogic Server 12c | |
Mayank et al. | User-Based Authentication for Web Apps | |
Scarioni et al. | Pro Spring Security |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: BEA SYSTEMS, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:HAYLER, DON L.;VU, DANIEL;REEL/FRAME:019747/0324;SIGNING DATES FROM 20070807 TO 20070816 |
|
AS | Assignment |
Owner name: ORACLE INTERNATIONAL CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BEA SYSTEMS, INC.;REEL/FRAME:025986/0548 Effective date: 20110202 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |