WPF和WCF数据服务在查询级进行身份验证?

p1tboqfb  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(92)

所以,我发誓我完全困惑于如何保护WCF数据服务。在这方面,是否有一种简单的检查方法来确保向WCF服务发送数据的客户端经过身份验证,确保客户端本身是我编写的客户端,而不是一些模拟客户端?
任何网址,可以帮助我解码这个问题?

sd2nnvve

sd2nnvve1#

我使用API密钥通过HTTPS“保护”我的服务,并且只允许使用IIS访问特定的IP地址。就像这样重写OnStartProcessingRequest()

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;
    }

我的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfAPIKey xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <APIKey Key="ee5346fa-bca5-4236-ae6c-f35ae2f69e0b" ApplicationName="blah" />
</ArrayOfAPIKey>

我的客户端:

base.SendingRequest += (s, e) => { e.Request.Headers.Add("APIkey", "your-api-key-here");  };
6rvt4ljy

6rvt4ljy2#

WCF数据服务使用普通WCF堆栈的普通authN/authZ组件。如何托管服务(通常在IIS中)以及使用哪种身份验证方案?
更新:Astoria/WCF数据服务团队有一个关于WCF数据服务和身份验证的优秀博客文章系列:Link

相关问题