3

我是 Azure 的新手,我正在开发一个使用新网站模型而不是云服务的项目。我想建立一个像这样的持续交付流程:http: //www.windowsazure.com/en-us/develop/net/common-tasks/publishing-with-tfs/

但是,我不希望我的网站在每次持续部署后都可以公开访问。相反,我希望我的持续部署只能由我的团队访问以进行测试。怎样才能最好地做到这一点?

思念至今:

  • 将整个站点包装在表单身份验证中 - 但我不喜欢这样的事实,即这意味着我将部署不同版本的站点到生产环境,而不是部署到测试的站点。
  • IP 地址限制 - 但我不知道这是否可以通过 Azure 网站完成,以及这是否是一个好的解决方案?
4

3 回答 3

2

You can add IP restrictions using the URL Rewrite Module, which Azure web sites seem to have enabled by default.

Your web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="SayNoToZombies" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{REMOTE_ADDR}" pattern="::1" negate="true" />
                    </conditions>
                    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Sorry, you're not allowed" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

You can replace pattern="::1" (localhost in IPv6) with a suitable regex to match your permitted IP, e.g., pattern="87.236.134.47" or if more than one:

pattern="(62\.231\.142\.233)|(87\.236\.134\.47)|(::1)|(127\.0\.0\.1)"
于 2013-04-09T12:16:52.773 回答
2

Azure 网站身份验证/授权功能旨在支持这种确切的方案。基本上,您创建一个站点槽,单击几下将 AAD 身份验证添加到其中,从那时起,您的登台槽将始终需要有效登录,即使在您执行交换操作之后也是如此。

博客文章:http ://azure.microsoft.com/blog/2014/11/13/azure-websites-authentication-authorization/

演示视频:http ://azure.microsoft.com/en-us/documentation/videos/azure-websites-easy-authentication-and-authorization-with-chris-gillum/

于 2015-01-24T01:39:22.463 回答
1

我必须为客户做类似的事情,但找不到限制从 Azure 门户本身访问该站点的方法。我选择了 IP 地址限制选项,但通过应用程序本身的代码来实现。我的应用程序已经在使用表单身份验证,因此我可以在登录操作中执行 IP 地址检查。

在您的情况下,我建议使用自定义操作过滤器。在过滤器中执行检查,如果 IP 地址不允许,则返回 http 401(未经授权)状态码。

创建一个名为AllowedIpAddresses或类似的应用程序设置,您可以在其中添加一个逗号分隔的允许 IP 地址列表。执行检查时,您可以将站点设置为允许所有流量(如果AllowedIpAddresses为空或不存在)。这样,您可以在生产中忽略此设置,默认情况下将允许所有流量。你可以为 Azure 门户中的每个站点设置自定义应用设置。

这是自定义过滤器的外观。我没有测试过这个!

public class AccessRestrictionFilterAttribute : ActionFilterAttribute
{
    // simple wrapper around ConfigurationManager.AppSettings for testability
    private readonly IAppSettingsHandler appSettingsHandler;

    public AccessRestrictionFilterAttribute(IAppSettingsHandler appSettingsHandler)
    {
        this.appSettingsHandler = appSettingsHandler;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var isAllowed = false;
        var userIpAddress = filterContext.HttpContext.Request.UserHostAddress;
        if (appSettingsHandler.AllowedIpAddresses.Split(new[] { ',' }).Any(x => x == userIpAddress))
        {
            isAllowed = true;
        }

        if (!isAllowed)
        {
            filterContext.Result = new HttpUnauthorizedResult();
        }

        base.OnActionExecuting(filterContext);
    }
}
于 2013-03-02T13:16:38.337 回答