views:

69

answers:

1

This is our setup - our customers will have a database server with our database on and multiple clients running our frontend. We have some WCF services to allow the clients to request info from the database and each WCF session is authenticated with a username/password stored (encrypted) in the database. This all works fine and has been in use for a couple of years.

We're now adding the ability to sign in using a USB fingerprint reader attached to client PCs. For this we store each users' fingerprint template in the database and then upload them all to the device. The device can then tell us which user has presented their finger.

What is the best way to securely allow our fingerprint client to authenticate over the WCF service without using the user's password and without opening up the system to attack from unauthorised users?

My first thought is to define a secret key that both client and server know, encrypt it on the client with a timestamp and the logged in user id and send it to the server which can then confirm that the request came from our client.

Is this a good idea? Can an attacker just relay the same message to start an unauthorised session?

I'm not a security expert so I'd prefer an existing solution over rolling my own for obvious reasons.

We're using C# and only targetting Windows.

+1  A: 

You could use an x509 certificate stored on the Client to provide the client credentials required for the WCF service. This would work in the same way that server security is provided via SSL certificates.

Some info on working with certificates:

A word of caution would be that you would obviously have to manage the distribution and validity of certificates.

Th other alternative is to use the clients windows account for authentication purposes if the client machine is on the same domain:

Some info on working with Windows Account:

Tanner