In your suggested steps, the "client website" is effectively just a proxy script sitting on the website that forwards requests but also allows some level of data manipulation. I can see the value of this, but also perhaps the option of direct communication with the warehouse when manipulation is not required. This would save a hop and make things a bit more performant.
As you know I had written some thoughts on adopting OpenId in Indicia recently though they don't encompass a thorough thinking through of how this fits with secure submissions, digest vs https etc. To open this up for discussion I am pasting them here:
Common authentication in Indicia
When Indicia is running with multiple websites on a single warehouse, there are many potential benefits to cross site reporting and analysis which come from the data being held on a single database. For example, if websites are set up with a regional focus, verifiers can log in to the database with a species group focus and view the relevant data no matter which website the data was sourced from. Users could also view reports on all their own data, but only if there is a mechanism for recognising a single user across all the websites. In fact having the ability to uniquely identify a person across other Warehouses, the NBN Gateway and other biodiversity information systems such as Recorder could bring benefits in communication across the wider network. Obviously a name or username is not sufficient for unique identification and a user may have several emails, so that is also not sufficient without further guidance.
User Registration on Drupal
Website owners would need to enable the Open ID module in Drupal. In addition it is suggested that they install the Libraries & OpenId Selector modules since the default OpenID implementation in Drupal is quite clunky. The OpenID autoregistration module is an alternative that makes OpenID registration simpler. Note that OpenID Selector is the same library that is used on ISpot so this would give some consistency.
If OpenID is enabled on a Drupal installation with an existing user base, those users need to assign one or more OpenIDs to their account before they can log in using an OpenID. This is accomplished by each user editing their OpenID identity under their user profile. Attempting to login with an OpenID that is not yet linked can easily lead to the creation of a new user if error messages aren't read or understood - and can be confusing to exiting users.
User Registration on the Warehouse
When logging into the Warehouse for the first time, the OpenID Selector JavaScript library can be used to allow the user to enter their OpenID URL. This would let them create a User record though the user would initially have no access to the Warehouse until explicitly granted by an administrator.
There would be a new table for storing Open ID authentications, user_auths. This would contain the User’s Warehouse ID and the associated Open ID.
As for Drupal, if the existing user base wants to start using OpenID then they would need to add their OpenID authentication(s) to their own user profile.
Saving Data
1) The authmap table can be used to get the current user’s OpenID URLs in Drupal. These can be sent in the submission (perhaps using metafields).
2) When a submission is received containing Open ID authentication, the authentication is used to lookup the Warehouse user. If the Warehouse user exists, then their user ID is stored in the created_by_id and other metadata fields for the submitted records. If the Warehouse user does not exist then a stub user record is created in the Warehouse and the OpenID authentication is saved in the user_auths table. The response from the Warehouse includes a token requesting that the user’s login is updated. This would cause the iform module to send the user’s Drupal profile to the Warehouse to be stored in the Warehouse user record. The user would not be aware of this.
John van Breda
Biodiverse IT