I had to set this up at my last job. The way it was handled was through some hand-waving and semi-secure hash passing.
Basically, each site, site A and site B, has an identical gateway setup on each domain. The gateway accepts a user ID
, a timestamp
, a redirect URL
, and a hash
. The hash
is comprised of a shared key
, the timestamp
, the user ID
.
Site A generates the hash and sends all of the information listed above to the gateway at site B. Site B then hashes the received passed user ID
and timestamp
with the shared key
.
If the generated hash matches the received hash, then the gateway logs the user in and loads their session from a shared memory table or memcached pool and redirects the user to the received redirect url
.
Lastly, the timestamp
is used to be able to determine an expiration time for the provided passed hash
(e.g.: the hash was only valid for x
time). Something around 2.5 minutes is what we used for our TTL (to account for network lag and perhaps a refresh or two).
The key points here are:
- Having a shared resource where sessions can be serialized
- Using a shared key to create and confirm hashes (if you're going to use md5, do multiple passes)
- Only allow the hash to be valid for a small, but reasonable amount of time.
- This requires control of both domains.
Hope that was helpful.