繁体   English   中英

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

[英]How to use JWT JSON Web Tokens in C# AspNetCore Websites?

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

我的想法是将我的整体架构分成:

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

这将允许我为许多项目使用一个IdentityServer,并可能将前端开发用于第三方,并允许我专注于应用程序API详细信息。

我已经构建了IdentityServer。 它可以使用用户名/密码,验证并发出访问令牌和刷新令牌。 超。 访问令牌是短暂的且不安全的,并且旨在定期刷新。 目的是将其存储在客户端,即应用程序或网页。 刷新令牌的寿命较长,并且旨在安全存储。 在网站上,这将存储在服务器端,并存储在应用程序中,存储在“会话”持续时间的安全存储中。

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

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

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

此外,我不明白网页如何自动附加每个请求的令牌(如果有的话),或者网页如何响应401挑战(如果没有)。

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

JWT是纯粹用于最初提供页面的SinglePageApps(SPA),然后所有后续数据都由Ajax处理(我可以设置头文件没有问题)?

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

我意识到我可能已经把自己想成了一个结,任何帮助都会受到赞赏。

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

我会在客户端上保持刷新令牌和访问令牌。

我的方法是。

客户端知道它没有访问令牌 - >显示登录按钮。 单击登录按钮 - >使用登录页面重定向到身份验证服务器。 它包括状态/代码和回调网址。 客户端从用户接收回调并将其视为登录的客户端。客户端将访问令牌和刷新令牌(如果提供)存储在localstorage中。 然后它将访问令牌传递给它想要访问的api的请求。 API检查访问令牌是否适合它并且是否有效,允许授权并完成请求。 API不具备刷新令牌的任何知识。

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM