我是否可以使用JWT保护MVC Core Web应用程序?

时间:2018-03-07 03:57:33

标签: asp.net-mvc asp.net-core asp.net-core-mvc jwt

我有一个受JWT保护的Core Web API,并且该服务由HttpClient由WPF应用程序使用。这一切都很好用,因为一旦我有一个令牌,我会在每个请求的标题中传递它。

现在我需要构建一个使用API​​的一些功能的MVC Core Web应用程序。为了避免CORS问题,我想将API控制器导入Web应用程序。但是,我不想混合cookie和JWT auth。

通常在WPF应用程序中,为了登录,我向我的API Token控制器发出请求,获取令牌并使用它来授权后续请求。现在我可以在主MVC应用程序中构建一个登录页面,该页面使用Token调用我的HttpClient控制器并获取JWT,但是如何使用该令牌来授权主MVC中的所有其他操作应用程序。使用HttpClient传递内部调用的JWT标头似乎也非常笨拙。

有没有办法可以从一开始就使用JWT保护我的MVC应用程序,而不必使用HttpClient。也就是说,一旦我拥有了令牌,并且所有操作都被令牌保护,我如何将所有其他请求的令牌存储并传递给主MVC应用程序?

1 个答案:

答案 0 :(得分:0)

这取决于您是否正在建立SPA。 JWT令牌不会自动由浏览器提供,只有cookie才能提供。因此,如果您没有构建SPA,您可以使用添加的令牌显式发送每个请求,那么您需要使用cookie或将JWT存储在会话中,然后将其附加到api的传出请求。

为了解决CORS问题,我会使用像refit这样的工具,它允许你创建一个接口到样板webrequests。它们具有可扩展性点,允许您在发出请求之前附加标头。

可选地,我之前使用的方法是创建一个代理控制器来处理对set url结构的所有请求(比如'api / ...'),然后通过复制所有正文将它们转发到API服务器将标头转换为新请求,然后将响应复制到控制器中的响应对象中,以便通过浏览器返回。这也将允许您将JWT注入标头。