views:

26

answers:

1

I have a client app that makes calls to a WCF service. This app is on a public computer that's easily accessible and anyone can easily copy the .EXE and .CONFIG of my app into another machine and start using it.

Is there a pattern where I can check if the request is coming only from an app on a computer I installed it on and not on one it has been copied to?

Thanks in advance.

EDIT: I have thought of using the MAC address of the computer but not sure how reliable/easily hacked that would be. This is a financial product so the authentication needs to be very very tight.

+2  A: 

You could e.g. define a list of valid IP addresses where you installed your stuff on, and then apply a IP filter to only allow calls from those authorized IP's.

See:

marc_s
For my case the IPs won't be fixed as the computers they are installed on will be offices using broadband. Any other suggestions?
fung
@Fung: not really - besides the IP, there's really not much you can check for. The other option would be to have a digital certificate installed on those PC's that should be authorized, and check for that certificate when making the call.
marc_s
+1, the machine certificate is the best option. @fung can generate these, and they can be made part of any install process, so if someone just grabs the binaries they won't have the cert. Best of all you can use the cert to encrypt the WCF messages.
slugster
Machine certs sound like a good way to go. I'll check them out. Thanks.
fung