ASP.NET MVC 3限制API访问

时间:2012-05-10 11:26:17

标签: asp.net-mvc-3 security api servicestack

我有一个ASP.NET MVC 3应用程序,它带有一个提供数据的自托管ServiceStack API。在Web.Config中添加API位置路径之后,API可以通过我的代码调用并且运行良好:

<location path="api">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

我遇到的问题是,当应用程序运行时,可以通过浏览器访问API - 我只需在浏览器中键入http:\ localhost:xxxx \ api即可。限制访问我的自托管API的好方法是什么,以便我可以继续在MVC 3应用程序中调用它,但阻止用户通过浏览器访问API?

请注意,在将来的某个时候,我会希望公开API的某些区域,以使其可公开访问。

2 个答案:

答案 0 :(得分:2)

一种可能性是使用特定用户访问API:

<location path="api">
    <system.web>
        <authorization>
            <allow users="api_user" />
        </authorization>
    </system.web>
</location>

然后将您的API配置为只能由api_user访问。这样,浏览器中的任何其他经过身份验证的用户都将无法访问此API。在ASP.NET MVC 3应用程序中,您可以在向API发送HTTP请求之前为给定用户创建身份验证票证。

另请注意,使用web.config中的<location>标记来控制ASP.NET MVC应用程序中的授权是一个非常糟糕的主意。原因是你依赖一些网址(api)。但ASP.NET MVC适用于路由。因此,您应该使用[Authorize]或自定义授权属性来装饰要保护的相应控制器/操作。这样,您的授权就不再依赖于您的路由配置。

另一种可能性是使用自定义authoriza属性和implement an access token

答案 1 :(得分:2)

注意:内置Authorization and AuthenticationServiceStack支持是独立的,并且与ASP.NET的身份验证分离。

您可以通过从包含以下一个或多个基类的基类继承来限制对所有服务的访问:

  • [验证] - 仅允许访问经过身份验证的用户
  • [RequiredRole] - 仅允许访问指定角色的用户
  • [RequiredPermission] - 仅允许访问具有指定权限的用户

注意:这些属性也适用于继承自ServiceStackController的MVC控制器或标有[ExecuteServiceStackFilters]属性的控制器。

您可以在Social Bootstrap Api示例项目中检查使用这些属性的MVC + ServiceStack演示。

您可以通常限制访问的另一种方法是注册一个全局Request filter,它会在每次请求时执行。