我正在尝试将使用JWT登录的网站放在一起。我的问题是,我不明白网站应该如何使用智威汤逊。如何在C#AspNetCore网站中使用JWT JSON Web令牌?
的想法是我的整体架构分成:
- 的IdentityServer认证和签发JWTs。
- 具有受基于JWT角色保护的端点的ApplicationServer API。
- 从IdentityServer请求JWT并将其用于访问ApplicationServer上的数据的前端应用程序和网站。
这将允许我为许多项目使用一个IdentityServer,并可能将服务器场开发给第三方,并允许我专注于应用程序API的详细信息。
我已经构建了IdentityServer。它可以接受用户名/密码,验证并发出访问令牌和刷新令牌。超。 访问令牌是短暂且不安全的,并且打算定期刷新。目的是将其存储在客户端,无论是应用程序还是网页。 刷新令牌寿命更长,并且旨在安全地存储。在一个网站上,这将存储在服务器端,并在一个应用程序中存储在'会话'期间的安全存储。
我有一个前端网站外壳设置了一些测试操作。用户必须经过身份验证才能访问它们,其中经过身份验证意味着拥有有效的访问令牌。
- 当用户最初访问某个动作时,他们没有令牌。
- 前端Web服务器应将其重定向到登录页面,并请求凭据(用户名和密码)。
- 网络服务器将凭证转发给IdentityServer,如果证书有效,则IdentityServer应该将访问和刷新令牌返回给网络服务器。
- 网络服务器会缓存刷新令牌并将访问令牌发送回网页。
- 然后,客户端网页会缓存访问令牌并将其与每个其他页面请求一起发送。
- 网络服务器会解码访问令牌,如有必要可能会刷新它,然后用更新后的访问令牌发回页面。
- 对话(会话)在请求进入时带有陈旧访问令牌并且刷新令牌过期并且用户被重定向到登录页面所需的时间已到。
对于如何将访问令牌返回到网页,我有点遗憾。
此外,我不明白如何网页可以自动附加一个令牌与每个请求,如果它有一个,或者如何网页可以响应401挑战,如果没有。
Cookie是将数据附加到HTTP会话并在导航过程中将其保存在客户端的唯一方法?
JWT纯粹是为SinglePageApps(SPA)开始提供页面,然后所有后续数据都由Ajax处理(我可以设置标题没有问题)?
另外,是否可以编写网页,使他们总是使用访问令牌填充授权标头(如果存在)?
我意识到我可能以为自己陷入了一个结,任何帮助将不胜感激。
我相信你的令牌应该存储在web请求头中。随着它的每一个请求,它允许挑战。在每次通话中,验证访问权限。而不是cookie,尽管它是一个选项。 – Greg
是的,我不明白的是如何从客户端获取每个请求以包含授权标头。 –
为什么不能在每个请求中手动添加包含授权,持票人和提供的标记值的标头? 'request.Headers.Add(“authorization”,$“bearer = {token}”);'。沿着这些线路的东西? – Greg