【发布时间】:2015-05-07 12:47:52
【问题描述】:
我有一个同时使用 mvc 和 web api 控制器以及 aspnet 身份的站点。我使用带有 mvc 和 web api 控制器的 VS2013 SPA 模板作为起点。
这是我的场景:
用户使用 mvc 控制器登录并取回一个 auth cookie。
使用经过身份验证的 mvc 控制器提供下一页。该页面使用敲除并对 Web api 控制器进行 ajax 发布调用,该控制器通过按钮单击(保存)进行身份验证。 Web api 控制器需要带有 Bearer --token-- 的 Authentication 标头。
我的问题是其他人如何处理这种“两种”身份验证方法。我在 mvc 控制器上创建了一个端点,该端点经过身份验证并根据当前主体返回一个不记名令牌。我可以使用该令牌成功发布到 Web api 端点。
我正在创建的 JavaScript 逻辑有点……令人困惑。它检查访问令牌是否在会话存储中,如果是,则进行 ajax 调用。如果没有,请调用 get token 端点,然后调用 web api 端点(使用一堆回调来处理 Ajax 承诺完成、失败等)。
其他人如何处理您需要身份验证 cookie 和承载令牌的场景,以便每个“mvc”页面都经过身份验证,并且页面调用的 Web api 端点也经过身份验证。如果不记名令牌在 cookie 过期之前就过期了怎么办。
如果我不清楚或者您需要更多信息,请告诉我。
编辑
我遇到了这个,Using bearer tokens and cookie authentication together 它仍然没有回答我的问题,因为我已经设置了它,所以 mvc 接受 cookie auth 并且 web api 只接受不记名令牌。我觉得这应该是一个已经解决的问题,但也许我采取了错误的方法。
【问题讨论】:
-
您是如何解决这个问题的?我完全按照您对过去项目的描述做了,但我刚刚开始一个新项目,我很想知道这次我是否可以实施任何“最佳实践”
-
我通过对 mvc 控制器进行所有 ajax 调用来解决这个问题。试图同时兼顾基于 cookie 的令牌和不记名令牌太复杂了。我们的网站只使用 mvc 控制器,我们的外部世界使用 web api。我将大部分“可重用逻辑”保留在一个通用业务层中。我仍然很想看看其他人采取了什么方法。
标签: asp.net-mvc asp.net-identity asp.net-web-api