jQuery webAPI 调用 WebSecurity.IsAuthenticated 总是假的

本文关键字:IsAuthenticated webAPI 调用 WebSecurity jQuery | 更新日期: 2023-09-27 18:36:25

我正在我的Web应用程序中使用WebAPI服务。在此服务中用于所有帐户功能(/api/account/login,/api/account/logout,...)。在同一个 webroot 中,我有一个使用此 webAPI 服务与后端系统通信的网站。因此,从我的 C# 代码中,我在我的 WebAPI 中调用了 IsLoggedIn 函数,当我登录时返回 true。这工作得很好。

[HttpGet]
public bool IsLoggedIn()
{
    return (WebSecurity.IsAuthenticated);
}

在我的区域注册中,我添加了以下代码:

context.Routes.MapHttpRoute("Account", "api/account/{action}/{id}", new { Controller = "Account", id = RouteParameter.Optional });

以及下面的全局配置:

GlobalConfiguration.Configuration.Filters.Add(new ExceptionHandlingAttribute());
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

自定义 ExceptionHandlingAttribute 检查引发的异常是否属于特定类型,并返回自定义 ReasonPhrase,因此没有什么特别之处。

当我登录并从javascript(jQuery)或Fiddler中调用该函数时,IsLoggedIn函数返回false。我应该在我的jQuery调用中添加什么,以确保在WebAPI中仍然找到正确的用户?这发生在开机自检和 GET 调用上。

请帮忙:)

jQuery webAPI 调用 WebSecurity.IsAuthenticated 总是假的

它总是错误的,因为 REST 是无状态的,每个请求都不知道以前的请求。

您可以通过执行以下操作来启用会话状态http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/

更好的方法是让 Login 调用返回一个令牌,然后在后续调用中传递该令牌以标识用户。 下面是一个示例:如何使用 OAuth 2 - OAuth 2 C# 示例