我正在使用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