One option is the use clientcertificates.
This solution might be an option if you are not able to change the current implementation (what is needed if you are going the 'Forms authentication' route). Remember that dealing with certificates requires the IT Operation to generate and install certificates on both server and clients. If this is feasible in your situation is unclear from your question.
First create certificates (if you're not buying but generating them your self make sure the IT guys are prepaired to add your Root certificate in the Trusted Store, this is also true for the users of your service!)
Add this endpoint behavior clientside
<behaviors>
<endpointBehaviors>
<behavior name="ClientCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="client.com"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
add/modify this serverside:
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
<endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding"
name="wsHttpEndpoint" contract="IService" />
configure your webserver to use SSL and require Client Certificates.
This answer is a shortend version of this guide