我有一个受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应用程序?
答案 0 :(得分:0)
这取决于您是否正在建立SPA。 JWT令牌不会自动由浏览器提供,只有cookie才能提供。因此,如果您没有构建SPA,您可以使用添加的令牌显式发送每个请求,那么您需要使用cookie或将JWT存储在会话中,然后将其附加到api的传出请求。
为了解决CORS问题,我会使用像refit这样的工具,它允许你创建一个接口到样板webrequests。它们具有可扩展性点,允许您在发出请求之前附加标头。
可选地,我之前使用的方法是创建一个代理控制器来处理对set url结构的所有请求(比如'api / ...'),然后通过复制所有正文将它们转发到API服务器将标头转换为新请求,然后将响应复制到控制器中的响应对象中,以便通过浏览器返回。这也将允许您将JWT注入标头。