混合MVC/Web Api控制器站点中的AspNet Identity

khe*_*eit 11 asp.net-mvc asp.net-web-api asp.net-identity

我有一个网站利用mvc和web api控制器和aspnet身份.我使用VS2013 SPA模板将mvc和web api控制器作为起点.

这是我的场景:

用户使用mvc控制器登录并获取auth cookie.

使用经过身份验证的mvc控制器提供下一页.该页面使用knockout并对一个web api控制器进行ajax调用,该控制器通过单击按钮进行身份验证(保存).web api控制器需要带有Bearer --token--的Authentication头.

我的问题是其他人如何处理这种"两种"认证方法.我在经过身份验证的mvc控制器上创建了一个端点,并根据当前主体返回一个承载令牌.我可以使用该令牌成功发布到Web api端点.

我正在创建的javascript逻辑有点令人困惑.它检查访问令牌是否在会话存储中,如果是,则进行ajax调用.如果没有,请调用get token端点,然后调用web api端点(使用一堆回调来处理Ajax承诺,失败,等等).

其他人如何处理您需要auth cookie和bearer token的场景,以便对每个"mvc"页面进行身份验证,并对页面调用的web api端点进行身份验证.如果持票人令牌在cookie到期之前到期,您该怎么办?

如果我不清楚或者您是否需要更多信息,请告诉我.

编辑

我遇到了这个问题,一起使用bearer令牌和cookie身份验证 它仍然没有回答我的问题,因为我已经设置好了所以mvc接受cookie auth而web api只接受bearer token.我觉得这应该是一个已经解决的问题,但也许我采取了错误的方法.

Hez*_*zye 1

我已经通过使用 cookie 和刷新令牌设法解决了这个问题。

这样做是这样的

  1. 加密并保存访问令牌和刷新令牌在 cookie 中。
  2. 在调用 Web api 之前验证令牌到期日期。
  3. 如果令牌过期,请使用刷新令牌/清除用户身份验证 cookie 获取新令牌并将其注销。

我没有在VS2013 SPA模板中尝试过。但正如我所见,您可以使用第二步来验证令牌,如果令牌已过期,请调用 mvc 控制器端点来获取新的访问令牌。