protected override void OnStartProcessingRequest(ProcessRequestArgs Args)
{
// allow the metadata to be retrieved without specifying an API key by appending $metadata on the end
if (Args.RequestUri.Segments.Last().Replace("/", String.Empty) != "$metadata")
{
// check if a valid API key has been passed in (see Configuration.xml)
if (!IsValidAPIKey(Args.OperationContext.RequestHeaders["APIKey"])) throw new DataServiceException("Invalid API key");
}
base.OnStartProcessingRequest(Args);
}
private bool IsValidAPIKey(string PassedAPIKey)
{
if (!String.IsNullOrEmpty(PassedAPIKey))
{
Guid APIKey;
// Configuration.APIKeys is just a simple list that reads from an XML file
if (Guid.TryParse(PassedAPIKey, out APIKey) && Configuration.APIKeys.Exists(x => x.Key == APIKey)) return true;
}
return false;
}
2条答案
按热度按时间sd2nnvve1#
我使用API密钥通过HTTPS“保护”我的服务,并且只允许使用IIS访问特定的IP地址。就像这样重写
OnStartProcessingRequest()
:我的XML文件:
我的客户端:
6rvt4ljy2#
WCF数据服务使用普通WCF堆栈的普通authN/authZ组件。如何托管服务(通常在IIS中)以及使用哪种身份验证方案?
更新:Astoria/WCF数据服务团队有一个关于WCF数据服务和身份验证的优秀博客文章系列:Link