据我所知,ASOS原生支持刷新令牌。为了获取刷新令牌,我需要在令牌请求中添加
offline_access
范围。但是它们存储在哪里?如何更改令牌的过期日期或删除令牌?如何确定刷新令牌是为哪个用户创建的?offline_access
范围。但是它们存储在哪里?如何更改令牌的过期日期或删除令牌?如何确定刷新令牌是为哪个用户创建的?但它们存储在哪里?
默认情况下,它们不存储在任何地方:它们是自包含的。只要用于保护刷新令牌的加密密钥仍然在ASP.NET数据保护密钥环中,它们就可以被ASOS解密并用于发出新的访问令牌。
如何更改令牌的过期日期?
可以使用选项全局设置默认的过期日期,使用RefreshTokenLifetime
属性。如果您没有提供自己的生命周期,则它们有效期为14天。
请注意,默认情况下启用滑动过期,这意味着每次进行新的grant_type=refresh_token
请求时,您都会获得一个新的刷新令牌(有效期为14天)。您可以通过将UseSlidingExpiration
设置为false
来禁用滑动到期。
...或者删除它?
由于刷新令牌是自包含的,因此您无法删除它们。当然,您可以考虑使用自定义令牌(例如对应于数据库条目的唯一字符串),方法是重写SerializeRefreshToken
和DeserializeRefreshToken
事件,但推荐的方法是在接收到刷新令牌请求时将它们视为无效。
为此,您可以重写HandleTokenRequest
事件,并在认为refresh_token
已被吊销且无法用于发出新令牌时调用context.Reject()
。
如何确定刷新令牌是为哪个用户创建的?
刷新令牌包含您创建原始身份验证票证时添加的所有声明,因此,如果您添加了与用户标识符对应的sub
声明,则可以使用它从数据库中检索用户配置文件。
GrantRefreshTokenGrant
方法将其作废?如果您能向我展示禁止用户的方法,我将非常高兴。manager.SupportsUserSecurityStamp
是什么?我该如何使用它?实际上,我需要为用户生成令牌,并立即使令牌失效(立即禁止用户)。 - StalsoGrantRefreshTokenGrant
来添加自己的逻辑来确定刷新令牌是否仍然有效。如果用户被禁止,你可以调用context.Rejected()
来拒绝刷新令牌请求。 - Kévin Chaletapp.UseJwtBearerAuthentication()
中实现它。你能告诉我在哪里做吗? - Stalso