限制访问dotnet core mvc项目中的web api 2控制器

时间:2017-12-06 21:56:50

标签: c# asp.net-mvc azure asp.net-web-api asp.net-core

将MVC项目中的webapi 2控制器访问限制为仅托管的App Service的最佳方法是什么?

我创建了一个我的MVC客户端正在访问的端点。整个应用程序通过应用程序服务发布到azure。我现在如何保护端点不被应用于应用程序上下文之外?

2 个答案:

答案 0 :(得分:1)

根据您的意见,您应该考虑重组您的解决方案。

  • 考虑将您的Web API移动到一个独立的项目。这样,您的API就可以与MVC应用程序分离,如果需要,您可以独立部署和扩展它。
  • 将MVC客户端应用程序移入其自己的独立项目
  • 对于身份验证,我会考虑实现一个授权服务器(再次在一个独立的项目中),向客户端发送令牌(在您的情况下是MVC应用程序),然后客户端将使用此令牌访问API。要实现auth服务器,您有几个选项

    拥有专用的授权服务器可以清楚地区分身份责任,允许您控制其他未来客户端的访问权限,并可能限制只访问某些端点(也称范围)。

答案 1 :(得分:0)

您可以在请求的标头中使用API​​密钥来过滤掉不需要的请求。 1.实现客户授权属性(AuthorizationFilter)类。

    [HttpPost, AuthorizationFilter]
    public CustomerInfo GetCustomerInfo(CustomerInfoRequest request)
    {
        return Business.GetCustomerInfo(request);
    }

2。在您的控制器类

    public override void OnAuthorization(HttpActionContext ctx)
    {            
        if (!VerifyHeaders(ctx))
        {
            ctx.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
            return;
        }

        base.OnAuthorization(ctx);
    }

    private bool VerifyHeaders(HttpActionContext ctx)
    {
        IEnumerable<string> values = new List<string>();

        //Read the API key from the request header
        ctx.Request.Headers.TryGetValues("ApiKey", out values);
        var apiKey = values?.FirstOrDefault();        

        return CheckApiKey(apiKey);
    }

    private bool CheckApiKey(string apiKey)
    {
        //Verification is done here
        return true;
    }
  1. 请求应包含API密钥,该密钥将通过“OnAuthorization”方法进行验证。
  2. enter image description here