asp.net-web-api - 更改密码后如何使OAuth token 无效?

标签 asp.net-web-api oauth asp.net-identity

我们在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/

相关文章:

iphone - 如何禁用 Twitter 登录页面中的文本更正和大写?

c# - ASP.NET CORE MVC IDENTITY 如何更改默认登录页面的url?

c# - 无法从特定角色中删除用户

c# - 如果 Hub 在不同的项目 SignalR 中,如何连接 Hub?

php - 从其他网站重定向时缺少 session 变量

c# - 如何在 C# Web Api 中流式传输文件上传以进行数据库存储

Cordova 插件 InAppBrowser 无法第二次打开

asp.net-core - 如何使用 Postman 调用 Identity Server 4 进行登录

c# - protobuf-net Stream 在返回数据之前被处理

c# - c# 和 Asp.net web api 中的 URL 编码