Our architecture is a straightforward N-Tier model, which consists of a ASP.Net Application sitting in IIS7 (hosted in DiscountASP), that exposes methods on a WCF Service. Those methods talk to the DB using EF4. The clients are in Silverlight 4.0.
Three important points:
Authentication and Authurazation are not a concern - calls to the service are anonymous and we don't care about the identity of the caller.
The data transferred in the methods calls in not sensitive.
We just want to make sure that calls can't be made by anyone.
Correct me if In wrong:
Message security is not an option because it's not supported in Silverlight.
Transport security (HTTPS and x.509/SSL certificates) also can't be done in Silverlight
So the steps we take to enforce some level of security are:
A secret key is hard-coded into on of the dll's in the XAP.
This dll is scrambled so it can't be re-engineered.
The secret key is sent as a parameter to all the service method calls.
At the start of each method, check the secret key against the original sitting in the DB.
Remove the MetaDataExchange endpoint from the service.
Considering this minimal setup and it's many flaws, the biggest flaw is probably the fact that the transfer is not secured(HTTP), and the secret key is exposed. So the questions are:
If a malicious user want to harm our system, how much effort does he need to put in order to extract the secret key, find what methods are exposed and start calling them ?
Is there some other WCFcombiantion that can provide the basic protection of credentials on each call (No HTTPS or Certificates )?