[Openid-specs-ab] Reducing server state
Frank Cornelis
info at e-contract.be
Wed Mar 6 06:06:08 UTC 2013
Hi,
Identity Providers in general keep two types of state. One is about the
different relying parties (Clients), the other is about the ongoing
authentication sessions.
Older authentication protocols like SAML Browser POST and WS-Federation
(web passive) not really use the later one.
However, more modern authentication protocols like OpenID and OpenID
Connect keep some authentication session state.
OpenID for example uses associations, whereas OpenID Connect uses a
bunch of different tokens.
Lately I've been investigating how to reduce this type of server state.
For OpenID one can easily encode all required authentication session
state within the handle itself.
An implementation of this mechanism is given at:
http://code.google.com/p/openid4java/issues/detail?id=193
http://code.google.com/p/eid-idp/source/browse/trunk/eid-idp-protocol-openid/src/main/java/be/fedict/eid/idp/protocol/openid/StatelessServerAssociationStore.java
Such a mechanism is interesting for large scale deployments where you
want to minimize the require state that the different (load-balanced)
identity provider instances need to share with each other.
Basically we're using AES for confidentiality and an HMAC for integrity
verification.
I also had a look at OpenID Connect to see if something similar would be
possible.
As a first step (when using Dynamic Client Registration) you can easily
encode client_secret, expires_at and registration_access_token (the bare
minimum I guess) within the client_id in a similar way as proposed for
OpenID.
Next comes the Browser POST towards the Authorization Endpoint. The
result of this operation is that the end-user gets authenticated. Thus
at this point the identity provider _somehow_ gets hold of all required
attributes of the end-user.
Here you would want to encode all these results within the returned code
parameter. However the Authorization Endpoint responses with a web
browser redirect. This limits the size of the code parameter. If a
browser POST would be allowed here, you could encode all attributes/data
within the code parameter. However, AFAIK, the OAuth spec does not
foresee such type of response. Can someone confirm this?
Furthermore the usage of the 'code' token has some semantics (use only
once by the Client) that is impossible to represent via the proposed
mechanism.
Is there any work ongoing related to the 'reduction of server state' for
large scale OpenID Connect deployments?
I want to minimize the amount of such server-side state to prevent
bottlenecks (database for sharing all the different tokens among the IdP
instances).
Kind Regards,
Frank.
More information about the Openid-specs-ab
mailing list