限制Azure中的Web服务调用

时间:2015-02-25 00:51:51

标签: asp.net web-services azure

我有一个网站,可以调用Web服务。 Web服务目前限制仅使用IP限制从网站进行的呼叫。

现在我正在尝试将这两个站点移动到Azure网站,但我不能再依赖静态IP地址来接收来自网站的呼叫,因为Azure网站不支持用于出站呼叫的静态IP。

Azure网站也不接受客户端证书。

如何限制对我的网络服务的调用只能来自我的网站?

1 个答案:

答案 0 :(得分:0)

由于Azure网站不接受客户端证书,我决定采用另一种方法。此解决方案使用ASP.NET的表单身份验证,并在服务之间授权系统用户。

为此,每个服务器必须启用Forms身份验证并分配相同的计算机密钥。我发现它只适用于设置为Framework45的兼容模式。

    
<system.web>
    <machineKey compatibilityMode="Framework45" 
                validation="SHA1" 
                validationKey="14E2DFC..." 
                decryption="AES" 
                decryptionKey="93923..."/>
    <authentication mode="Forms">
      <forms loginUrl="/SecurityService.asmx?op=authenticate" />
    </authentication>
    <authorization>
      <deny users="?" />
      <allow users="System" />
    </authorization>
</system.web>

然后生成并向您的Web服务(或任何其他HTTP调用)添加Forms身份验证cookie。请注意,Forms Cookie必须转换为System.Net.Cookie

var websiteService = new WebsiteService.WebsiteService();
websiteService.CookieContainer = new System.Net.CookieContainer();
var websiteServiceUrl = new Uri(websiteService.Url);
var authCookie = FormsAuthentication.GetAuthCookie("System", 
                                                    false, 
                                                    FormsAuthentication.FormsCookiePath);
var authenticationCookie = new System.Net.Cookie(FormsAuthentication.FormsCookieName, 
                                                authCookie.Value, 
                                                FormsAuthentication.FormsCookiePath, 
                                                websiteServiceUrl.Host);
websiteService.CookieContainer.Add(authenticationCookie);

现在,您可以在web.config文件的authorization元素中配置所有授权,如上所示。