【发布时间】:2016-06-14 22:54:40
【问题描述】:
据我所知,ASOS 支持开箱即用的刷新令牌。要获取刷新令牌,我需要将 offline_access 范围添加到我的令牌请求中。但是它们存储在哪里?如何更改令牌的到期日期或将其删除?如何确定为哪个用户创建刷新令牌?
【问题讨论】:
标签: c# oauth-2.0 asp.net-core owin aspnet-contrib
据我所知,ASOS 支持开箱即用的刷新令牌。要获取刷新令牌,我需要将 offline_access 范围添加到我的令牌请求中。但是它们存储在哪里?如何更改令牌的到期日期或将其删除?如何确定为哪个用户创建刷新令牌?
【问题讨论】:
标签: c# oauth-2.0 asp.net-core owin aspnet-contrib
但是它们存储在哪里?
默认情况下,它们不存储在任何地方:它们是独立的。只要用于保护刷新令牌的加密密钥仍在 ASP.NET 数据保护密钥环中,它们就可以被 ASOS 解密并用于颁发新的访问令牌。
如何更改令牌的到期日期?
可以使用RefreshTokenLifetime 属性从选项中全局设置默认到期日期。如果您不提供自己的寿命,则有效期为 14 天。
请注意,默认情况下也启用了滑动过期,这意味着您每次发出新的grant_type=refresh_token 请求时都会获得一个新的刷新令牌(有效期为 14 天)。您可以通过将UseSlidingExpiration 设置为false 来禁用滑动过期。
...还是删除它?
由于刷新令牌是独立的,因此您无法删除它们。您当然可以考虑通过覆盖SerializeRefreshToken 和DeserializeRefreshToken 事件来使用自定义令牌(例如与数据库中的条目相对应的唯一字符串),但推荐的方法是在接收刷新令牌请求时简单地将它们视为无效。
为此,如果您认为 refresh_token 已被撤销且不能用于发行新令牌,您可以覆盖 HandleTokenRequest 事件并调用 context.Reject()。
如何确定为哪个用户创建刷新令牌?
刷新令牌包含您在创建原始身份验证票证时添加的所有声明,因此如果您添加与用户标识符对应的 sub 声明,您可以使用它从数据库。
【讨论】:
GrantRefreshTokenGrant 方法使其无效&如果你告诉我方法我会很高兴,我怎么能禁止用户。 manager.SupportsUserSecurityStamp 是什么?我该如何使用它?实际上我需要给用户令牌并立即使令牌无效(立即禁止用户)。
GrantRefreshTokenGrant 添加您自己的逻辑确定刷新令牌是否仍然有效。如果用户被禁止,您可以致电context.Rejected() 拒绝刷新令牌请求。
Banned并在GrantRefreshTokenGrant 中检查它然后拒绝令牌?如果我使用这种方法,我将无法立即禁止用户或添加新的声明。有没有办法检查每个请求的访问令牌?也许我应该在AuthorizationEndpoint 做?
app.UseJwtBearerAuthentication()) 执行此操作,因为这是堆栈验证访问令牌的地方。
app.UseJwtBearerAuthentication() 中进行操作。你能给我建议吗,在哪里做?