>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]

Reply via email to