我正在尝试将使用JWT进行登录的网站整合在一起。我的问题是我不明白网站应该如何使用JWT。
我的想法是将我的单片架构分成:
这将允许我为许多项目使用一个IdentityServer,并可能将前端开发用于第三方,并允许我专注于应用程序API详细信息。
我已经构建了IdentityServer。它可以使用用户名/密码,验证并发出访问令牌和刷新令牌。超。 访问令牌是短暂的且不安全的,并且旨在定期刷新。目的是将其存储在客户端,即应用程序或网页。 刷新令牌的寿命较长,并且旨在安全存储。在网站上,这将存储在服务器端,并存储在应用程序中,存储在“会话”持续时间的安全存储中。
我有一个前端网站shell设置了一些测试操作。必须对用户进行身份验证才能访问它们,其中经过身份验证意味着拥有有效的访问令牌。
关于如何将访问令牌返回到网页,我有点迷失。
此外,我不明白网页如何自动附加每个请求的令牌(如果有的话),或者网页如何响应401挑战(如果没有)。
Cookie是将数据附加到HTTP对话的唯一方法,并在导航期间将其保留在客户端吗?
JWT是纯粹用于最初提供页面的SinglePageApps(SPA),然后所有后续数据都由Ajax处理(我可以设置标题没问题)?
或者,是否可以编写网页,以便它们始终使用访问令牌填充Authorization标头(如果存在)?
我意识到我可能认为自己陷入困境,任何帮助都会受到赞赏。
答案 0 :(得分:0)
您应该阅读Auth0的资源所有者密码授权 https://auth0.com/docs/api-auth/grant/password
文档我会将刷新令牌和访问令牌放在客户端上。
我的方法是。
客户知道它没有访问令牌 - >显示登录按钮。 点击登录按钮 - >使用登录页面重定向到身份验证服务器。它包括状态/代码和回调网址。 客户端从用户接收回调并将其视为登录的客户端。 客户端将访问令牌和刷新令牌(如果提供)存储在localstorage中。 然后它将访问令牌传递给它想要访问的api的请求。 API检查访问令牌是否适合它并且是否有效,允许授权并完成请求。 API没有刷新令牌的任何知识。
希望有所帮助