>Ok. >So the client authenticates on the external server. The client then >clicks on a link to go to the restricted section on our webserver in >such a way that they will be pre-authenticated on our server. When >the user clicks that link, a script on their end is executed to open a >socket to our end so the user's data can be passed to us. I assume >that once all of that has transpired and the external server has >recieved the go ahead from us, the external server then redirects >the user to our server? And would the external server have to pass >something with the URL so we can associate that particular client >with the data that was just passed? If not, how do we make that >association? Chris, I don't know how helpful I will end up being to your project. I offer you my help only as someone who is in the process of exploring something similar myself -- so what I'm dealing with here is a public brainstorm, and certainly nothing near a finished solution. I wish I were at the pseudo code stage, as I would love to be that far along, and be able to help you out. However, I'll try to clarify the mechanics of my thinking, in case anyone on this list cares to point out any obvious flaws in logic (and therefore can help us both out). The basic idea is to get the servers to agree on allowing a user to access them both, for a limited time, and ONLY if they both agree on allowing the user in. If we can get the servers to shake hands on letting user X be authenticated, then, when user X requests a resource, the servers can check their recent agreements lists for whether user X should be allowed that resource. By having the servers talk directly to each other (and not via the user's browser) on this "pre-verification" stage, it would seem to me that no third party would have access to the mechanism of the transaction, and, since the communications are encrypted with PGP with keys that physically reside on those two servers, even if this hidden communications stream were snooped, it would be awfully difficult to replicate the mechanism of the authorization. On top of this basic architecture, we then lay a few added complications: time-sensitivity (that the authorization expires strictly after a very brief time unless used immediately), and continued verification that all communication between parties is actually coming from the same IP addresses from which they originated. Here's my poorly written schematic: Server A Server B User logs in and is authenticated, preferably over SSL, and using some kind of time stamp and IP address verification. Server A gives a key to the user Server A also encrypts the key, using Server B's public PGP key (just 'cause it's called public doesn't mean it has to actually be public). Server A opens a socket to server B and sends this key to server B (not sure if this can be done over SSL. thinking that perhaps it can be done with an SSH session?). Also, all of these server side sockets should be made to verify the IP address of the server opening the socket. There should also be a relatively strict timeout on all these transactions, such that an OK or auth key will expire if not used or validated within five minutes. Server B receives key, decrypts it with it's private key, and returns an "OK" response to Server A. This OK would be encrypted with server A's public key, and would be mathematically related to, or contain the user's request for authen- tication, so that when server A receives the OK, it knows to which user it pertains. Server B makes a note (in a database or whatever) of the OK. This note would also contain the users session key, so it knows which user should event- ually be given access. Server A redirects user to Server B, sending the original authorization key along with the user (in a cookie, or session ID) Server B sees user with auth key, checks to see if there is an OK registered in it's database corres- ponding to that auth key. Here we can also add time- sensitive verification, as well as a check to see whether the original auth- orized user's request is still coming from the same IP (subject to proxy server restrictions if user comes from large ISP). I.E. if( auth OK && record of auth && same IP && within last 10 minutes) then give user a page which verifies that the user has the key, that server B has a key, that it corresponds to a recent record of authorization in it's database, that's it's coming from the same IP as the request for auth came from from server A, and then gives the user the data. -- ______________________________________ Kristofer Widholm Web Pharmacy [EMAIL PROTECTED] 191 Grand Street, Brooklyn NY 11211 718.599.4893 ______________________________________ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]