将 JWT Bearer Authentication Web API 与 Asp.Net Core 2.0 结合使用的问题

Posted

技术标签:

【中文标题】将 JWT Bearer Authentication Web API 与 Asp.Net Core 2.0 结合使用的问题【英文标题】:Problems combining JWT Bearer Authenticating Web API with Asp.Net Core 2.0 【发布时间】:2018-07-14 19:57:46 【问题描述】:

我有以下设置:

带有 JWT 不记名身份验证的 Web API

Asp.Net Core 2.0 MVC 处理身份并提供视图

AngularJS - 客户端

Angular 正在请求 JWT 令牌并将其传递给后续的 http 请求。 AJAX 调用工作正常。问题是,如果我通过浏览器使用 [Authorize] 请求 MVC 操作,该令牌显然没有经过验证,因为没有 cookie 也没有 auth 标头。

我将如何为非 ajax 请求实现登录功能?

我假设我需要实现某种 Cookie 身份验证,但我希望在迁移到 JWT 后避免它。

我知道这可能可以通过迁移到 SPA 来解决,但我想知道是否有办法保持今天的解决方案与 MVC 服务视图 - 旧习惯 :(

【问题讨论】:

【参考方案1】:

如果您想要服务器端 JWT 身份验证,则需要将 JWT 存储在 cookie 中,而不是本地存储。 Cookie 是为您网站的域发布的,因此当您请求您的 MVC 应用程序查看并假设您的 API 和您的 MVC 网站具有相同的来源(相同的架构 + 主机 + 端口)时,受保护的 MVC 控制器处理应该没有问题HTTP(S) 请求中的传入 cookie 并决定如何响应。 WebAPI 还应该能够处理带有 JWT 有效负载的 cookie。我在这里找到了关于 ASP.NET Core MVC 身份验证的示例项目的好文章:https://auth0.com/blog/asp-dot-net-core-authentication-tutorial/ 对于您的 AngularJS SPA,将 JWT 设置为 cookie 而不是将其放入本地存储应该不是问题。这实际上是存储 JWT 更安全的方式,但您需要确保您的 JWT 不会变得太长,因为 cookie 有效负载大小是有限的。更多信息在这里:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

【讨论】:

以上是关于将 JWT Bearer Authentication Web API 与 Asp.Net Core 2.0 结合使用的问题的主要内容,如果未能解决你的问题,请参考以下文章

将 JWT Bearer Authentication Web API 与 Asp.Net Core 2.0 结合使用的问题

Jwt Bearer Authentication 中间件始终将 User.Identity.IsAuthenticated 设置为 false

使用 JWT Bearer 令牌进行身份验证 Swagger

使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1

JWT 为啥我们需要 Bearer word?

使用NodeJS验证包含“Bearer:”的JWT标记字符串