WebAPI [Authorize]属性。这里发生了什么?

3
我正在构建一个带有基本账户功能(如登录、注销、注册等)的WebAPI AccountController。
我的控制器顶部使用了 [System.Web.Http.Authorize] 属性进行修饰。
在下面的方法中,除非我使用 "AllowAnonymous" 进行修饰,否则被认证的用户将是我的本地系统用户。
    // GET/api/isAuthenticated
    // [System.Web.Http.AllowAnonymous]
    [System.Web.Http.HttpGet]
    public HttpResponseMessage IsAuthenticated()
    {
        if (User.Identity.IsAuthenticated)
        {
            var userProfile = _service.GetUserProfile(WebSecurity.CurrentUserId);
            return Request.CreateResponse(HttpStatusCode.OK, userProfile);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.OK, false);
        }
    }

据我所知,AllowAnonymous告诉控制器不要对给定的方法应用Authorize属性。由于我正在构建一个Web应用程序,因此我从不想根据本地凭据进行授权。
我从MVC SPA模板中提取了这段代码,所以我想知道 - 当[AllowAnonymous]未使用时,如何更改以根据本地存储的用户凭据而不是系统用户进行授权?

请查看您的 web.config 文件,其中“authorization”配置部分描述了身份验证方案。您当前似乎设置为匿名访问。 - asawyer
请注意,Web API 中没有“会话”概念。这是按设计来的,因为 Web API 遵循 REST。HTTP 是一种无状态协议,因此必须在每个授权视图的标头中包含某种身份验证或授权(例如令牌)才能进行请求。 - Chris Pratt
@asawyer - 我刚刚查看了一下,我的身份验证设置为Forms,但是如果我将鼠标悬停在“User.Identity”上,认证类型列出的是“Negotiate”,而不是“Forms”-这样它就会拉取我的系统凭据。你有任何想法这可能在哪里配置? - RobVious
@ChrisPratt - 谢谢你提醒我,Chris。 - RobVious
1个回答

1
使用WebAPI时,您应通过HTTP Basic Authorization对用户进行身份验证,这是一种HTTP授权标准。如果您通过aspx页面进行登录,则应在配置部分中设置授权为表单认证;如果没有,则应在webapi调用中添加HTTP授权标头。
WebAPI控制器与普通控制器不同,其身份验证机制也不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接