[Openid-specs-ab] Session - session change notification through postMessage

Nat Sakimura sakimura at gmail.com
Thu Jun 7 16:08:57 UTC 2012


Now that I am trying to write down the session management spec, I am
looking at the whiteboards photo of the session management f2f back in May.

Here is what I understand right now for session change notification.
Correct me if I am wrong:

*Step 0. RP constructs session_state via any authn response from IdP *

session_state = sha256(client_id + origin + idp_session_state + salt) + "."
+ salt.

idp_session_state is either "no_user", "not_authenticated", "
authenticated_user".

*Step 1. RP loads RP frame  *

After the frame loads, following function is available

boolean hasChanged(client_id, session_state)

This function postMessage to the IdP frame
  win = window.parent.document.getElementById("idp").contentWindow.

Thus, win.postMessage(string, targetOrigin);

  where string = client_id + "." + session_state;
      targetOrigin = scheme + "://" + domain name of the IdP + (":" + port
number)

Also, it needs to add Event Listener to receive message from the IdP frame
for the type "message".

window.addEventListner("message", receiveMessage, false);

Function receiveMessage(event) checks if event.origin === targetOrigin.
If not, it MUST return error.

event.data contains either "unchanged" or "changed".
If "unchanged", return false.
Else, return true.

*Step 2. RP loads IdP frame*

The IdP frame receives postMessage from the RP frame.
The event listener function MUST check if event.origin === RP URL.
event.data contains client_id and session_state.
Cookie has idp_session_state. Origin is event.origin.
Thus session_state can be re-calculated.
If received session_state and the calculated session_state is equal,
it should do:
   event.source.postMessage('unchanged', event.origin);
Otherwise:
   event.source.postMessage('changed', event.origin);

*Step 3. RP polls the IdP Frame.*

window.settimeout(checkState, 30000);

function checkState
{
   if(hasChanged(client_id, session_state) ) {
   onStateChange();
}

function onStateChange
  --> first attempt to revalidate current session via propt:none authn
request including id_token or a user hint for the session.


-- 
Nat Sakimura (=nat)
Chairman, OpenID Foundation
http://nat.sakimura.org/
@_nat_en
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-specs-ab/attachments/20120608/f39ea63e/attachment.html>


More information about the Openid-specs-ab mailing list