【问题标题】:How to authenticate users of ASP.Net Core website with JWT?如何使用 JWT 对 ASP.Net Core 网站的用户进行身份验证?
【发布时间】:2018-05-23 21:52:01
【问题描述】:

我想知道,如果 JWT 应该手动附加到我的请求的标头,我如何使用 JWT 对我的 ASP.Net Core 网站的用户进行身份验证?

换句话说,当向我的服务器发送请求时,如何告诉我的浏览器在标头中附加令牌?假设我网站的用户从我网站的一个 API 获得了这个令牌。

还是 JWT 仅可用于 WebAPI(我可以在其中手动构建请求)?

【问题讨论】:

  • 没有什么能阻止你只使用 cookie 是吗?最简单的是:避免使用 JWT。
  • @pvg,我只是想知道 JWT 是否可用于网站。
  • JWT 是基于令牌的身份验证。当您需要限制 API 的某些部分时使用它们,因为它们也提供了一种传递权限的方法,因此您无需每次都调用数据库来检查用户 X 是否有权查看页面 Y...在登录时生成该令牌,并且对于您需要使用它的每个呼叫......该令牌具有滑动到期时间。所以不能重复使用。如果只是一个网页,可以使用会话等更简单的机制。
  • @balexandre,很清楚,但这仍然不能回答主要问题,我没有发现任何场景或想法它们如何被网站使用。它们可以被网站使用吗?或仅通过 WebAPI(我可以手动设置请求标头)。
  • 取决于网站数据的来源...如果所有数据都来自 API,那么推荐。您将调用(例如/api/login)并获取要在任何后续请求中使用的令牌。如果数据来自它自己的网站,那么使用它没有意义,尽管如果你愿意,你当然会使用它。 here's a nice post什么时候用,怎么用

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


【解决方案1】:

有多种使用 JWT 令牌的方法。由于 JWT 只是一种令牌格式,它确实暗示了用于身份验证的方法。

但是,JWT 主要用于 Bearer 身份验证方案,需要为每个请求添加自定义标头。在客户端用 JavaScript 创建请求以访问 API 端点的单页应用程序 (SPA) 可以做到这一点,这就是为什么在 SPA 中大量使用 Bearer+JWT 的原因。 SPA 还受益于嵌入的 JSON 格式,因为它们可以读取到期日期和其他信息(嵌入在令牌中的声明、通过 OpenID Connect 获得的 ID 令牌内容等)。

对于“传统”服务器呈现的视图和链接,使用 JWT 很困难,因为它们必须设置为 cookie 或成为 URL 的一部分(由于 URL 长度限制,实际上是不可能的)。 ASP.NET Core 2.0 不包含任何基于 JWT 的 cookie 逻辑,但可以使用 JWT 作为 cookie 创建自定义实现。有关示例实现,请参阅 this GitHub project 和相关的 blog post。请注意,在 cookie 身份验证中使用 JWT 的唯一好处是服务器不必保留 cookie 信息并在多个实例之间共享 cookie。

总结当前状态:

  • 在使用服务器端呈现和链接时首选默认 cookie 身份验证,以避免创建自定义 cookie 实现。
  • 如果您有单页应用程序 (SPA) 应用程序在客户端上以 javascript/typescript 构建请求,则首选 JWT 不记名身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 2020-09-19
    • 2019-10-30
    • 2016-05-16
    • 1970-01-01
    • 2012-06-28
    • 2022-01-23
    • 2019-09-06
    相关资源
    最近更新 更多