2013-09-25 2 views
1

Lorsque vous utilisez WCF Data Services, plus particulièrement au service WCF OData de DevExtreme en C#, est-il possible de chiffrer les requêtes d'URL? Je ne veux pas que le client puisse voir/modifier l'URL afin d'avoir accès aux données. Je veux savoir si ce niveau d'obscurité est disponible, même si j'ai une authentification pour le client et que le client a seulement des droits sur une identification.URL pour Encrypting service WCF

Par exemple:

/AcountsByIntroducerID?entityID=1234 

Cette URL expose l'ID et permet également à un client de changer le numéro d'identification. Y aurait-il un moyen dans WCF qui permettrait l'utilisation de transformer l'URL ci-dessus en chaîne cryptée?

Tels que: /JDudfj8ddJFDJSLAFDLJuaeouru0

donc cela peut être déchiffré sur le côté serveur. Merci!

+1

Ne pouvez-vous pas vérifier côté serveur si le client (qui a été authentifié pour accéder à ce système) a les droits sur l'élément 'entityID' et n'affiche les données que s'il le fait? La sécurité à travers l'obscurité n'est pas un moyen pour une fin. –

+0

Oui, vous faites un bon point. Je garderai cela à l'esprit, mais je voudrais quand même savoir si cette obscurité est possible même dans un scénario dans lequel le client doit être authentifié et n'a que les droits que son/son côté serveur id. –

+0

@Jaiesh_bhai: Mais, ce qui explique sur le codage, mais pas le cryptage. Ils sont tous les deux différents, correct? L'OP a demandé à crypter. Mais, la réponse ci-dessus parle de sens de codage encore la transmission de données est-elle en sécurité? –

Répondre

2

J'ai eu un problème similaire à résoudre. Pour le résoudre, j'ai utilisé le modèle suivant je codé paramètres d'URL dans une chaîne de base 64.

Déclarez votre WCF avec un paramètre

[ServiceContract] 
public interface VCIWCFService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/{encodedParameters}")] 
    string GetSomething(); 
} 

Dans le code back-end, vous pouvez décoder encodedParameters avec le code suivant

string Url = HttpUtility.UrlDecode(encodedParameters); 
    Url = Convert.FromBase64String(Url); 

et vous pouvez obtenir un paramètre particulier HttpUtility classe:

Uri myUri = new Uri(string.format("http://www.nothing.com?{0}",Url)); 
string param1 = HttpUtility.ParseQueryString(myUri.Query).Get("param1"); 

Je travaille avec application Objective-C Ipad, et j'encode les paramètres avec le système inverse

+0

Bonjour @tdelepine merci pour la réponse. Si cela ne vous dérange pas, pourriez-vous en dire un peu plus sur comment et où implémenter UriTemplate du côté client? Merci –

+1

Je modifie ma réponse UriTemplate est dans la déclaration WCF Backend-side – tdelepine

+0

@tdelepine Mais, cela explique à propos de 'encoding' mais pas' encrypting'. Ils sont tous les deux différents, correct? Le 'OP' a demandé de' crypter '. Mais, la réponse ci-dessus parle de «codage» signifiant encore que la transmission de données est en sécurité? –