如何在C# AspNetCore网站中使用JWT JSON Web令牌?



我正在尝试整合一个使用 JWT 登录的网站。 我的问题是我不明白网站应该如何使用 JWT。

这个想法是将我的单体架构拆分为:

  • 用于身份验证和颁发 JWT 的身份服务器。
  • 具有受基于 JWT 的角色保护的端点的应用程序服务器 API。
  • 从身份服务器请求 JWT 并使用它们访问应用程序服务器上的数据的前端应用程序和网站。

这将允许我将一个 IdentityServer 用于许多项目,并可能将前端开发农场提供给第三方,并允许我专注于应用程序 API 细节。

我构建了身份服务器。 它可以采用用户名/密码、验证和颁发访问令牌和刷新令牌。 超。 访问令牌的生存期较短且不安全,旨在定期刷新。 目的是将其存储在客户端,无论是应用程序还是网页。 刷新令牌的生存期更长,旨在安全存储。 在网站上,这将存储在服务器端,而在应用程序中,这将存储在"会话"持续时间的安全存储中。

我有一个前端网站外壳设置了一些测试操作。 用户必须经过身份验证才能访问它们,其中经过身份验证意味着拥有有效的访问令牌。

  • 当用户最初访问操作时,他们没有令牌。
  • 前端 Web 服务器应将它们重定向到登录页面,并请求凭据(用户名和密码(。
  • Web 服务器
  • 将凭据转发到 IdentityServer,如果凭据有效,则 IdentityServer 应将访问令牌和刷新令牌返回到 Web 服务器。
  • Web 服务器将缓存刷新令牌并将访问令牌发送回网页。
  • 然后,客户端网页将缓存访问令牌,并在每次进一步的页面请求中发送该令牌。
  • Web 服务器将解码访问令牌,必要时可能刷新它,并使用更新的访问令牌发回页面。
  • 当请求带有过时的访问令牌并且经过足够的时间使刷新令牌过期并且用户被重定向到登录页面时,对话(会话(结束。

我对如何将访问令牌返回到网页有点迷茫。

另外,我不明白网页如何自动为每个请求附加一个令牌(如果有(,或者如果没有,网页如何响应 401 质询。

Cookie 是否是将数据附加到 HTTP 会话并在导航期间将其保留在客户端的唯一方法?

JWT 是否纯粹用于最初提供页面的单页应用程序 (SPA(,然后所有后续数据都由 Ajax 处理(我可以在其中设置标题没有问题(?

或者,是否可以编写网页,以便它们始终使用访问令牌(如果存在(填充授权标头?

我意识到我可能认为自己陷入了困境,任何帮助将不胜感激。

您应该阅读 Auth0 的资源所有者密码授予https://auth0.com/docs/api-auth/grant/password 文档

我会将刷新令牌和访问令牌一起保存在客户端上。

我的方法是。

客户端知道它没有访问令牌 ->显示登录按钮。 单击登录按钮 ->重定向到带有登录页面的身份验证服务器。 它包括状态/代码和回调 URL。 客户端接收来自用户的回调,并将其视为客户端登录。 客户端将访问令牌和刷新令牌(如果提供(存储在本地存储中。 然后,它将访问令牌传递给它要访问的 API 的请求。 API 检查访问令牌是否适用于它且有效,允许授权并完成请求。 API 不了解刷新令牌。

希望对你有帮助

最新更新