使用 .NET Core Identity 并需要刷新令牌
Using .NET Core Identity and need to refresh token
我刚开始在一家新公司工作,任务是在我们的 .NET/Angular 应用程序上修复我们当前的身份验证流程。目前,我们使用 .NEt Core Identity 进行登录验证,登录令牌在 24 小时后过期。
我的任务是通过以下方式更改授权:
1)每次用户发送请求时检查令牌(我想通过使用 JWT 刷新令牌)
2) 令牌应在 20 分钟不活动后过期并提示用户再次登录。
所有这些都可以通过 Identity Server 完成吗?
这取决于客户端的类型和使用的身份验证。先考虑cookie认证。
对于使用 cookie 的客户端,身份验证基于有效 cookie 的存在。为了注销用户,cookie 必须过期或删除。也许使用会话或以其他方式延长生命周期或在 activity.
上跟踪 cookie
困难的部分是 JWT 令牌的存在。现在,应用程序是否使用它们来访问其他资源 (API) 或后端 (SPA) 并不重要。
JWT 的性质是它不能被撤销并且在到期之前一直保持活动状态。好消息是您可以将生命周期设置为大约 20 分钟,将时钟偏差(默认 5 分钟)考虑在内。令牌将自动过期,无需进一步操作。
为了保持正常运行,您可能需要使用刷新令牌。 刷新令牌 用于代表用户请求新的访问令牌,而无需用户再次登录。 刷新令牌 被传递到 IdentityServer 的授权端点以获得新的访问令牌。
刷新令牌和访问令牌之间的一个重要区别是刷新令牌 可以是没有任何意义的任何字符串值,而 访问令牌 是自包含的 (JWT)。 刷新令牌 存储在 IdentityServer (PersistedGrants table) 中,并且必须与收到的令牌相匹配。这意味着如果在商店中找不到令牌,请求将被拒绝。换句话说,与 JWT 访问令牌.
不同,刷新令牌 可以撤销
JWT 访问令牌的替代方案是 reference access token. For more information about tokens, read my answer here。
reference 访问令牌也存储在 PersistedGrants table 中,可以撤销。
inactivity 的问题是客户端无法在服务器上触发操作。因此,必须在服务器端启动任何需要的操作。
客户端只能在用户再次激活后才能确定用户的inactivity。但这很容易,如果没有有效的 cookie,用户必须重新登录。
备注:使用单点登录 (SSO),IdentityServer 网站上的 cookie 将自动再次验证用户身份,跳过登录表单。为了绕过这个,确保客户端使用参数重定向到 IdentityServer:prompt=login.
将访问令牌的生命周期设置为 20 分钟后,一切就绪。
但是,刷新令牌仍然有效。幸运的是,您还可以为刷新令牌设置绝对过期时间。在这种情况下,您也可以考虑将其设置为 20 分钟(通常这会是更长的生命周期)。只需确保在到期前 5 分钟内刷新访问令牌即可。顺便说一句,这并没有真正刷新令牌,它替换了存储的令牌。当前令牌在过期之前一直有效(并且可用)。
注意一点:刷新令牌必须设置为一次性使用。当请求新的访问令牌时,也会返回一个新的刷新令牌,替换两者。确保始终及时刷新令牌,无论请求是否需要它。
另一种情况是用户注销。在这种情况下,您可以 signout the user from (它们是 IdentityServer 会话的一部分)和 IdentityServer 本身。确保注销也会从商店中删除刷新令牌。
我刚开始在一家新公司工作,任务是在我们的 .NET/Angular 应用程序上修复我们当前的身份验证流程。目前,我们使用 .NEt Core Identity 进行登录验证,登录令牌在 24 小时后过期。
我的任务是通过以下方式更改授权: 1)每次用户发送请求时检查令牌(我想通过使用 JWT 刷新令牌) 2) 令牌应在 20 分钟不活动后过期并提示用户再次登录。
所有这些都可以通过 Identity Server 完成吗?
这取决于客户端的类型和使用的身份验证。先考虑cookie认证。
对于使用 cookie 的客户端,身份验证基于有效 cookie 的存在。为了注销用户,cookie 必须过期或删除。也许使用会话或以其他方式延长生命周期或在 activity.
上跟踪 cookie困难的部分是 JWT 令牌的存在。现在,应用程序是否使用它们来访问其他资源 (API) 或后端 (SPA) 并不重要。
JWT 的性质是它不能被撤销并且在到期之前一直保持活动状态。好消息是您可以将生命周期设置为大约 20 分钟,将时钟偏差(默认 5 分钟)考虑在内。令牌将自动过期,无需进一步操作。
为了保持正常运行,您可能需要使用刷新令牌。 刷新令牌 用于代表用户请求新的访问令牌,而无需用户再次登录。 刷新令牌 被传递到 IdentityServer 的授权端点以获得新的访问令牌。
刷新令牌和访问令牌之间的一个重要区别是刷新令牌 可以是没有任何意义的任何字符串值,而 访问令牌 是自包含的 (JWT)。 刷新令牌 存储在 IdentityServer (PersistedGrants table) 中,并且必须与收到的令牌相匹配。这意味着如果在商店中找不到令牌,请求将被拒绝。换句话说,与 JWT 访问令牌.
不同,刷新令牌 可以撤销JWT 访问令牌的替代方案是 reference access token. For more information about tokens, read my answer here。
reference 访问令牌也存储在 PersistedGrants table 中,可以撤销。
inactivity 的问题是客户端无法在服务器上触发操作。因此,必须在服务器端启动任何需要的操作。
客户端只能在用户再次激活后才能确定用户的inactivity。但这很容易,如果没有有效的 cookie,用户必须重新登录。
备注:使用单点登录 (SSO),IdentityServer 网站上的 cookie 将自动再次验证用户身份,跳过登录表单。为了绕过这个,确保客户端使用参数重定向到 IdentityServer:prompt=login.
将访问令牌的生命周期设置为 20 分钟后,一切就绪。
但是,刷新令牌仍然有效。幸运的是,您还可以为刷新令牌设置绝对过期时间。在这种情况下,您也可以考虑将其设置为 20 分钟(通常这会是更长的生命周期)。只需确保在到期前 5 分钟内刷新访问令牌即可。顺便说一句,这并没有真正刷新令牌,它替换了存储的令牌。当前令牌在过期之前一直有效(并且可用)。
注意一点:刷新令牌必须设置为一次性使用。当请求新的访问令牌时,也会返回一个新的刷新令牌,替换两者。确保始终及时刷新令牌,无论请求是否需要它。
另一种情况是用户注销。在这种情况下,您可以 signout the user from