Skip to main content

Using multiple Authentication Schemes for your APEX application

Recently someone asked me how he could implement multiple authentication schemes for his APEX application. He would like to use (some kind of) Single Sign-on authentication and - as an alternative - an Application Express Authentication. The problem is ... you can only define one Authentication Scheme being "Current" for an application! So how can we solve this issue?

First, we need te be aware that multiple applications can share their authentication by using the same cookie. Thus if you specify "MYCOOKIE" as the Cookie Name in Application A as well as in Application B, you can switch from A to B and back without the need of logging in again. It doesn't matter what Authentication Scheme Type you are using!

Knowing this, we are halfway our solution. We need two Applications. One - the "real" application - using the Application Express Authentication, let's name this one "LAUNCHPAD". And another one using the Single Sign-on Authentication, named "SSO", with just one page named "HOME". Both using the same Cookie Name as described above.
On the login page of LAUNCHPAD we also define a button "Connect using SSO". This will issue a redirect to the page "SSO:HOME". Because we're not logged in yet, this will try to authenticate using the Single Sign-on Authentication. On the "SSO:HOME" page we just define one before header process that does a redirect to the "LAUNCHPAD:HOME" page. When the "SSO:HOME" page is being rendered, we are logged in, the cookie is set and we can safely redirect to the other application sharing the same cookie. Mission completed!
Using an After Authentication Application Process in the SSO app, we can even do some additional checks based on the username returned by the SSO function (e.g. 'Proxy-Remote-User') - eventually redirecting to "LAUNCHPAD:LOGIN_DESKTOP" is something is wrong (thus showing the option to log in using a username and password).

Comments

Popular posts from this blog

Using Static Files in APEX has never been easier !

Almost every APEX Developer knows that JavaScript and CSS belongs in separate files and (in 99% of the use cases) not somewhere in your Page properties. If you have this code in separate files it is easier to use them in a Version Control System (SVN or Git) - if the files are outside of APEX. And the code you store in these files can be reused, in contrast to the stuff you store on Page level. In a lot of environments it is harder to use external files, because deployment of these files to the appropriate location on a webserver requires special privileges that not everybody has. In those cases storing these files as Static Application Files or Static Workspace Files might be a better solution. It makes deployment easier, because these files will be exported and imported as part of the application. You can't accidentally forget about them. But working with these files is quite a pain. When you need to edit something you have to download that file, make the changes, upload it again

Filtering in the APEX Interactive Grid

Remember Oracle Forms? One of the nice features of Forms was the use of GLOBAL items. More or less comparable to Application Items in APEX. These GLOBALS where often used to pre-query data. For example you queried Employee 200 in Form A, then opened Form B and on opening that Form the Employee field is filled with that (GLOBAL) value of 200 and the query was executed. So without additional keys strokes or entering data, when switching to another Form a user would immediately see the data in the same context. And they loved that. In APEX you can create a similar experience using Application Items (or an Item on the Global Page) for Classic Reports (by setting a Default Value to a Search Item) and Interactive Reports (using the  APEX_IR.ADD_FILTER  procedure). But what about the Interactive Grid? There is no APEX_IG package ... so the first thing we have to figure out is how can we set a filter programmatically? Start with creating an Interactive Grid based upon the good old Employ

Adding items to your Interactive Grid Toolbar

The APEX Interactive Grid uses the Toolbar widget to create the default Toolbar showing the Search box, Actions menu, Save button etc. And since quite a while there is a nice Plugin " Extend IG Toolbar " by Marko Goricki that makes it very easy to add additional buttons to the Toolbar. But what if you need more than a button?  Inspecting the contents of widget.toolbar.js, you can easily spot there can be added more to the Toolbar than just a button: The type of control, available values: "STATIC", "TEXT", "SELECT", "BUTTON", "MENU", "RADIO_GROUP", "TOGGLE". The first example will show a way to easily switch from one filter to another. Of course we could use the standard functionality and create two different Report views, but using a Radio Group on the Toolbar gives a more "Tab" like user experience. So how can we create a Radio Group that looks like a switch in the Toolbar? In