我正在使用C#編寫一個安全的WCF REST Web服務。安全的WCF REST Web服務和頭文件
我的代碼是這樣的:
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
base.CheckAccessCore(operationContext);
var ctx = WebOperationContext.Current;
var apikey = ctx.IncomingRequest.Headers[HttpRequestHeader.Authorization];
var hash = ctx.IncomingRequest.Headers["Hash"];
var datetime = ctx.IncomingRequest.Headers["DateTime"];
...
我用頭(授權,哈希,日期時間)來存儲有關apikey,當前日期時間和散列請求的URL信息,同時請求主體只包含URL和web服務參數。
例子:
http://127.0.0.1:8081/helloto/daniele
這是正確的方式或者我已經從URL像這樣通過和retieve這些參數:
http://127.0.0.1:8081/helloto/daniele&apikey=123&datetime=20120101&hash=ddjhgf764653ydhgdhgfjiutu56
是有這兩個之間的差異方法?
我在問我的實現是否正確,或者如果最佳實踐是使用請求體vs頭來傳遞參數並在這種情況下返回參數。對不起,我可憐的解釋。 – danyolgiax 2012-02-01 18:48:07
@danyolgiax您絕對*從不*希望任何敏感數據(例如訪問令牌)包含在URL中。如果可能的話,您可以在標題中找到它,或者如果不可能,則可以是POST主體的一部分。在你的情況下,我會建議所有三個HTTP標頭。 – Randolpho 2012-02-01 21:50:56
@Randolpho雖然你是正確的,你不應該把敏感數據放在一個URL中,把它放在標題或身體幾乎沒有更安全。通過網絡觀看流量的用戶將在url後面的下一行看到這些標題。如果您使用的是HTTPS,則URL和標頭都會被加密。 – 2012-02-01 22:00:30