【问题标题】:Authorize user on the basis of username in webapi基于 web api 中用户名的授权用户
【发布时间】:2014-09-05 07:14:21
【问题描述】:

我想根据登录的用户名,在 Web Api 中使用 [Authorize] 为某些方法申请权限。

[Authorize(Users = "Alice")]
public ServiceResult<List<DefaultCities>> GetCitiesByZipCode(String zipcode)
{
}

代替 "Älice" 我想给出 CurrentLoggedInUserId 基础的用户名。 我怎样才能做到这一点?

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api authorization httpcontext


    【解决方案1】:

    创建一个自定义的授权属性怎么样?

    public class MyAuthorizationAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            //Authorization logic
            if(httpContext.User.Identity.Name.Equals("Alice"))
            {
                return true;
            }
        }
    
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
             //Handle unauthorized logic
        }
    }
    

    然后将该自定义属性附加到控制器

    [MyAuthorization]
    public class HomeController : Controller
    {
        public ActionResult About() {}
        public ActionResult Contact() {}
    }
    

    AuthorizeCore-方法将在您每次调用 HomeController 中的操作时运行。

    但是,如果您不希望针对特定操作运行授权,则可以使用 [AllowAnonymus] 对其进行注释

    [AllowAnonymus]
    public ActionResult Home()
    {
        //Everyone can run this action
        return View();
    }
    

    【讨论】:

    • 不工作....这个自定义属性没有被调用。我可能做错了什么?
    • 我更新了一些代码并添加了更多信息
    • 仍然无法调用 AuthorizeCore。
    • 您是否尝试在控制器定义上方设置授权属性并在AuthorizeCore 开头设置断点?
    • 是的,但调试器没有命中。
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2016-04-07
    • 2011-09-28
    • 2015-04-21
    相关资源
    最近更新 更多