2013-09-25 87 views
1

當使用WCF數據服務時,更具體地說,在C#中的DevExtreme的WCF Odata服務中,有沒有加密URL查詢的方法?我不希望客戶端能夠查看/修改URL以訪問數據。我想知道是否可以使用這種默認級別,即使對客戶端進行了身份驗證,並且客戶端只擁有一個ID的權限。加密WCF服務的URL

例如:

/AcountsByIntroducerID?entityID=1234 

此URL公開ID,並且還允許客戶機更改的ID號。 WCF中有沒有什麼方法可以將上面的URL變成加密的字符串?

如:/JDudfj8ddJFDJSLAFDLJuaeouru0

因此,這可以在服務器端進行解密。謝謝!

+1

如果客戶端(希望獲得此係統進行身份驗證)對'entityID'處的項目擁有權限,並且僅在顯示數據時才能檢查服務器端?通過默默無聞的安全並不是達到目的的手段。 –

+0

是的,你說得很好。我會牢記這一點,但是我仍然想知道,即使在客戶端必須經過身份驗證並且僅僅具有對他/她的服務器端id的權限的情況下,這種默默無聞也是可能的。 –

+0

@Jaiesh_bhai:但是,這解釋了編碼而不是加密。他們都不一樣,對嗎? OP已要求加密。但是,以上答案談到編碼意義仍然是數據傳輸不安全嗎? –

回答

2

我有一個類似的問題要解決。爲了解決它,我使用了以下模式 我已經編碼了一個基本64字符串的url參數。

聲明你的WCF有一個參數

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

在後端代碼,你可以用下面的代碼

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

解碼encodedParameters,你可以得到HttpUtility特定參數類:

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

我使用Objective-C Ipad應用程序,我編碼參數逆系統

+0

嗨@tdelepine感謝您的回覆。如果你不介意的話,你能詳細說一下我在客戶端如何以及在哪裏實現UriTemplate?謝謝 –

+1

我編輯我的答案UriTemplate在WCF的聲明後端 – tdelepine

+0

@tdelepine但是,這解釋了有關'encoding'而不是'encrypting'。他們都不一樣,對嗎? 「OP」已要求「加密」。但是,上面的答案談到了「編碼」,意味着數據傳輸仍然是安全的嗎? –