如何在C#AspNetCore网站中使用JWT JSON Web令牌?
我正在尝试整合一个使用JWTs登录的网站。我的问题是,我不明白一个网站应该如何使用JWTs 我们的想法是将我的整体架构分为:如何在C#AspNetCore网站中使用JWT JSON Web令牌?,c#,authentication,asp.net-core,jwt,C#,Authentication,Asp.net Core,Jwt,我正在尝试整合一个使用JWTs登录的网站。我的问题是,我不明白一个网站应该如何使用JWTs 我们的想法是将我的整体架构分为: 用于身份验证和颁发JWT的标识服务器 具有受基于JWT的角色保护的端点的ApplicationServer API 前端应用程序和网站从IdentityServer请求JWT,并使用它们访问ApplicationServer上的数据 这将允许我在许多项目中使用一个IdentityServer,并可能将前端开发外包给第三方,并允许我专注于应用程序API的细节 我已生成I
- 用于身份验证和颁发JWT的标识服务器
- 具有受基于JWT的角色保护的端点的ApplicationServer API
- 前端应用程序和网站从IdentityServer请求JWT,并使用它们访问ApplicationServer上的数据
- 当用户最初访问某个操作时,他们没有令牌
- 前端Web服务器应该将它们重定向到登录页面,并请求凭据(用户名和密码)
- Web服务器将凭据转发给IdentityServer,如果凭据有效,IdentityServer将向Web服务器返回访问和刷新令牌
- Web服务器将缓存刷新令牌并将访问令牌发送回网页
- 然后,客户端网页将缓存访问令牌,并在每次进一步的页面请求中发送该令牌
- Web服务器将解码访问令牌,必要时可能会刷新它,并使用更新的访问令牌发回页面
- 当请求带有过时的访问令牌,并且刷新令牌已过足够的时间过期,并且用户被重新定向到登录页面时,会话(会话)结束
我意识到,我可能认为自己陷入了困境,如果有任何帮助,我将不胜感激。您应该阅读Auth0关于资源所有者密码授予的文档。 我会将刷新令牌和访问令牌一起保存在客户端上 我的方法是 客户端知道它没有访问令牌->显示登录按钮。 单击登录按钮->重定向到具有登录页面的身份验证服务器。它包括一个状态/代码和一个回调url。 客户端接收来自用户的回调,并将其视为客户端登录。 客户端将访问令牌和刷新令牌(如果提供)存储在localstorage中。 然后,它将访问令牌传递给它想要访问的api的请求。API将检查访问令牌是否用于它并且有效,是否允许授权并完成请求。 API不了解刷新令牌
希望有帮助我相信您的令牌应该存储在web请求头中。每一个请求都有它,它允许挑战。在每次通话中,验证访问权限。而不是cookie,虽然这是一个选项。是的,我不明白的是如何从客户端获取每个请求,以包括授权标头。为什么不能手动添加标头,并在每个请求上添加授权、承载和提供的令牌值
request.Headers.Add(“authorization”,$“bearer={token}”)代码>。类似的东西?这是JavaScript在客户端吗?客户端如何知道填充此标头?如果我很愚蠢,我会道歉。如果一个应用程序正在配置一个Http请求,或者如果请求是Ajax,我完全明白这是如何工作的,但是如果用户键入URL或通过链接导航到另一个页面,那么请求如何包含标题?我猜只有Cookie才能做到这一点,但我认为JWTs将取代Cookie。这是一种C#风格的方法,但从Ajax或Axios中,您可以操纵头:$.Ajax({headers:{'authorization','bearer='+token})代码>。我现在已经实现了这一点,并且学到了更多。我将刷新令牌保存在服务器上的RAM查找缓存中。我将客户端上的访问令牌保存在cookie中。在cookie中检查所有请求的访问令牌,如果失效,则使用刷新令牌获取新的访问令牌(如果刷新令牌失效,则再次登录)。然后,客户端可以访问其他操作或页面并拥有cookie,但不公开刷新令牌。访问令牌绑定到IP地址和用户代理。Cookie是HTTPOnly,HTTPS是所有东西。