[Authorize]属性如何增强Azure App Service(Web应用程序)的身份验证/授权

时间:2018-08-22 17:20:01

标签: azure azure-web-app-service

我向Azures App Services发布了一个Web应用程序。我使用了应用服务的身份验证/授权功能来提供安全性。我已将Active Directory功能成功添加到我的Web服务(和桌面客户端)中。看起来效果很好。如果未登录AD,就无法从浏览器或桌面客户端访问数据。

这就是我在[API]中将[Authorize]属性添加到任何控制器之前的全部内容!

因此,[授权]将对我的Web API进行(或添加)安全性方面的措施。通过在Azure中配置Web应用程序的身份验证/授权功能,它似乎已经被锁定。

2 个答案:

答案 0 :(得分:1)

  

因此,[授权]将对我的Web API进行(或添加)安全性方面的措施。

使用ILSpy,可以检查System.Web.Mvc.dll下有关AuthorizeAttribute的源代码。授权检查的核心代码如下:

protected virtual bool AuthorizeCore(HttpContextBase httpContext)
{
    if (httpContext == null)
    {
        throw new ArgumentNullException("httpContext");
    }
    IPrincipal user = httpContext.User;
    if (!user.Identity.IsAuthenticated)
    {
        return false;
    }
    if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase))
    {
        return false;
    }
    if (_rolesSplit.Length > 0)
    {
        string[] rolesSplit = _rolesSplit;
        IPrincipal principal = user;
        if (!rolesSplit.Any(principal.IsInRole))
        {
            return false;
        }
    }
    return true;
}

主流程将检查httpContext.User.Identity.IsAuthenticated,然后在指定允许的Users,Roles时检查当前用户名,用户角色是否得到授权。

对于Authentication and authorization in Azure App Service(简易身份验证),它已实现为本机IIS模块。您可以关注的 Architecture of Azure App Service Authentication / Authorization详细信息。

  

它似乎工作得很好。如果未登录AD,就无法从浏览器或桌面客户端访问数据。

     

这就是我在[API]中将[Authorize]属性添加到任何控制器之前的全部内容!

根据您的描述,我假设您将未验证请求时采取的操作设置为使用Azure Active Directory登录,而不是允许匿名请求(无操作)

据我了解,您可以利用App Service身份验证/授权功能为您提供内置的身份验证和授权支持,而无需在代码中手动添加中间件进行身份验证。应用服务身份验证将在代码可以处理请求之前验证请求。因此,为了在代码中进行其他自定义授权检查,您可以定义自AuthorizeAttribute继承的自定义授权类,以实现自定义处理。

public class CustomAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        //TODO:
    }

    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        //TODO:
    }
}

然后,如下装饰特定的动作或控制器:

[CustomAuthorize]
public class UsersController : Controller
{
   //TODO:
}

答案 1 :(得分:0)

App Service的身份验证/授权功能基于IIS级别。 [Authorize]属性基于我们的代码级别。两者都可以进行身份​​验证,如果您同时使用它们,则意味着您的Web应用程序中有两个身份验证级别。

这是一张可帮助您了解它们的图片:

enter image description here