I’m currently working on some projects involving a bit more complicated “flows”, than I’m used to.
We’re used to work with Identity Providers communicating with Service Providers, and that’s more or less it. What we will see, is service providers communicating with each others, and consumers retrieving information from multiple sources.
OAuth will play a significant role in this new game.
I believe our challenges and headaches are moved from complex protocols and simple flows, to maintaining a simple and intuitive user experience with simple protocols, but much more complex architectures and flows.
Here is an example that I’m currently struggling with;
We will create a Foodle OpenSocial Gadget that runs inside the SurfConext OpenSocial Container, to present an aggregated free/busy information with availability information for when members of the current group context is available for a meeting.
Here is how it will work (by default). Worth mentioning, this is the worth case scenario, much of the consent and choices are remembered for subsequent flows.
Foodle offers a Gadget, installed in a space in the SurfConext portal.
- The user heads to the portal.
- The user do Identity Provider Discovery at SurfConext.
- The user logs in to the IdP.
- The user performs consent to accept user data is sent from IdP to SurfConext.
- The user can now access the portal, and moves on to a space where the Foodle gadget is installed.
- The user will need to consent that the Foodle Gadget is accessing the OpenSocial context.
- The Foodle Gadget would need to establish a trusted connection with the Foodle Backend using the Foodle third-party REST API, starting the three-legged OAuth dance. This will involve a popup window.
- Part of the three-legged OAuth dance, first goes IdP Discovery.
- Next the user logs in, most likely this bullet is skipped due to Single Sign-On.
- User needs to consent that attributes are released from the IdP to Foodle.
- Then, the user needs to consent that the Foodle Gadget instance is allowed to access Foodle content on behalf of the current user.
- Part of the three-legged OAuth dance, the user has to consent that the Foodle Backend can access the OpenSocial conext (including group info) at the SurfConext portal OpenSocial REST API.
- The Foodle Backend performs a protected Oauth call to the OpenSocial REST API to get the group members of the current group, and verifies that the current user is member of the group.
- The Foodle backend uses a yet to be detirmined protocol to explore the CALdav/iCalendar Free/busy endpoints for each of the group members.
- The Foodle backend retrieves free/busy data using CALDav or similar.
- The Foodle backend responds with free/busy data to the Foodle Gadget.
- The Foodle gadget displays the data to the end user.
This will result in an unacceptable user experience. Involving popups, and no less than 5 consent screens and two IdP discoveries.
There are tons of approaches to optimize this particular use case, but I’m more interested in the more generic solutions to the flow of this and similar integrations. So that’s one of the many things I’m thinking about these days.
One thought; I’ve earlier thought of the main motivation to replace SAML with OpenID Connect, would be the simpler protocol, but I’m tending to say that a simpler flow of future use cases would be the best selling point of OpenID Connect.