我们在Web Api项目中使用SimpleAuthorizationServerProvider
使用ASP.NET Identity,并使用OAuth-tokens授权来自客户端的每个请求。 ( token 具有和到期时间跨度,我们不使用刷新 token 。)
当用户更改密码时,我想使他们可能在其他设备上拥有的 token 失效。有什么办法可以明确地做到这一点?我进行了实验,发现更改密码后,现有 token 可以正常工作,应该避免这种情况。
我考虑过将密码哈希或哈希的一部分放入OAuth token 中作为声明,并在派生的AuthorizeAttribute过滤器的OnAuthorization
方法中进行验证。
这是解决问题的正确方法吗?
最佳答案
我不建议将密码的哈希值作为声明,并且我相信在更改密码后,没有直接方法可以使 token 无效。
但是,如果可以从客户端应用程序发送到 protected API端点的每个请求都可以访问数据库,那么您需要为授予资源所有者请求的每个 token 存储 token 标识符(也许是Guid)。然后,您将 token 标识符分配为对此 token 的自定义声明,之后,您需要通过查找 token 标识符和资源所有者的用户名来检查每个请求的此表。
更改密码后,您将删除该资源所有者(用户)的 token 标识符记录,并且下次从客户端发送的 token 将被拒绝,因为该 token 标识符和资源所有者的记录已被删除。
关于asp.net-web-api - 更改密码后如何使OAuth token 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26776322/