基于路由授权API控制器方法

时间:2015-02-03 12:18:16

标签: asp.net asp.net-mvc authorization

我正在寻找一种方法,根据API Controller方法的访问路线有条件地强制执行[Authorize]属性。

在我的软件中,我有两种方式可以访问的页面,具有完全访问权限的授权用户或“查看器模式”中的匿名用户,功能有限。

这两者都需要访问相同的API方法。我希望尽可能安全地保持这些调用的“完整”版本,而匿名版本应该畅通无阻。在“查看器模式”存在之前给你一个这样的方法的例子:

    [Route("{outerId:int}/{innerId:int}/Action")]
    public virtual HttpResponseMessage PutAction(int outerId, int innerId)
    {
        ...
    }

outerIdinnerId实际上是包含相关数据的子目录的指标。我还应该指出控制器具有[Authorize]属性。

查看者通过一个只需要一个参数的不同路径访问此数据的深层副本,因此我当前的解决方案是匿名方法,并有两条路由来区分两种不同的访问类型,在适当的方法中进行身份验证:

    [AllowAnonymous]
    [Route("{id:int}/{innerId:int}/Action", Order = 1)]
    [Route("{id:int}/Viewer/Action", Order = 2)]
    public virtual HttpResponseMessage PutAction(int id, int? innerId = null)
    {
        if (innerId != null) // check userId using User.Identity.GetUserId()
        ...
    }

这在大多数情况下运行良好,但遗憾的是,这些方法在完整用户访问时偶尔会失败,如User == nullAuthorize属性是我所知道的唯一可以防止这种情况发生的属性,但有没有办法只为不同的路由强制执行此属性?

0 个答案:

没有答案