在WebApi 2.0自定义身份验证过滤器

时间:2015-07-30 06:20:56

标签: asp.net-mvc asp.net-mvc-4 session asp.net-web-api asp.net-web-api2

在我的Web服务(WebApi 2.0)中,我实现了IAuthenticationFilter来检查HttpContext.Current.Session中的一些值(例如HttpContext.Current.Session [“TokenId”])并确定用户是否被授权继续或不。我已在FilterConfig类中注册了此过滤器,如下所示,以便每当有人调用Web Api时都会执行此过滤器。

config.Filters.Add(new WebApiAuthenticationFilter());

我的MVC 4应用程序有自定义AuthorizeAttribute。为每个控制器操作执行此属性。此属性在内部调用我的Web Api。调用Web Api时,将自动执行身份验证过滤器,告知用户是否已获得授权。这就是我在MVC应用程序中了解用户授权状态的方法。

我发现HttpContext.Current.Session["TokenId"]仅在第一次Web Api调用时返回null。然后,我在HttpContext.Current.Session["TokenId"]中得到正确的值。

问题:

  1. 为什么 Session 中<{> 1}}中的值仅在第一次网络Api呼叫期间无法使用?
  2. 注意:

    • 我的Web Api和MVC代码在同一个Web应用程序中运行。
    • AuthenticationFilter不为空。只有Session中存储的数据(如TokenId)不可用。
    • 如果我从MVC自定义授权属性访问HttpContext.Current.Session,或者如果我让呼叫继续进行Web Api控制器,则可以使用相同的TokenId。 Session中的Session仅显示该值。
    • 我知道不建议使用Session,但目前我必须忍受它。
    • 对于使用AuthenticationFilter文件中的以下事件的Web Api,
    • SessionStateBehavior已设置为Required

      protected void Application_PostAuthorizeRequest() {         if(IsWebApiRequest())         {HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);         } }

0 个答案:

没有答案