authentication - 在 JWT 中更新/更改角色声明(或任何其他声明)

标签 authentication oauth asp.net-core jwt asp.net-core-webapi

我将用户角色存储在 JWT 中(以限制 API 端点)。管理员可以更改角色。

如果角色发生变化。我应该如何在所有 token 中反射(reflect)这一点?我想了几个解决方案:

  • 如果我使用刷新 token ,用户将不得不等到访问 token 的到期日期到期。
  • 我可以保留更改的用户 ID 的记录并检查每个请求,如果用户已更改,则返回一个新 token 。

  • 有没有标准的方法来做到这一点?

    最佳答案

    如果您关心所做的更改是即时的,刷新 token 似乎不是解决方案,如果您撤销用户的权限,您可能不希望用户在一段时间内访问审核工具。

    你可以做的是在 jwt token 中保留一个相对于用户的版本号,就像 Mongoose 如何使用它的 versionKey .通过这样做,您将能够根据数据库中给定用户的版本检查此版本。每次更改此用户的角色时,都会增加此版本,如果 jwt 的版本不匹配,只需使用正确的角色和版本重新创建一个新的并将其发送回用户。

    我不相信有一个合适的标准,因为 jwt 在设计上是不可变的,如果你需要“更新”它,你必须完全改变它。

    关于authentication - 在 JWT 中更新/更改角色声明(或任何其他声明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978021/

    相关文章:

    ASP.Net MVC 5 与另一个 MVC 5 Identity 网站的身份验证

    Facebook 好友请求 - 错误 - 'All users in param ids must have accepted TOS'

    java - Servlet 编码重定向URL

    ASP.NET 5 MVC 6 中的本地化

    c# - 仅当不记名 header 存在时才验证 JWT

    javascript - 如何将 JWT 设置为存储在本地存储中,以便我的域的所有部分都可以访问它?

    c# - 使用 Spring .NET 将用户名和密码发送到 .net Web 服务

    java - HttpClient错误: Please try enabling cookies or turning off Private Mode

    c# - 如何使用 .NET 4.5 Owin 对 LinkedIn 进行身份验证

    c# - 如何在 EF 核心中实现每个租户的模式?