【问题标题】:Validating user actions after authentication with jwt使用 jwt 进行身份验证后验证用户操作
【发布时间】:2020-01-03 12:54:18
【问题描述】:

我有一个带有 firebase 身份验证的应用程序。现在我有一个问题,任何拥有有效 jwt 的用户都可以访问任何其他人的用户数据。

例如,我可以使用有效的 jwt 向我的一个端点(即“photos/user/{id}”)发出请求,并将任何 {id} 传递给端点,我将收到该用户的数据。在我的例子中,我们通过系统内的电子邮件识别用户。而且我可以成功地从令牌中检索用户的电子邮件。但主要问题是 - 我现在是否需要将从令牌收到的电子邮件传递给每个服务,所以我可以检查它实际上是令牌所有者试图访问他的数据,而不是其他拥有有效令牌的人。到目前为止,我已经尝试为授权属性创建自定义策略,但是需要处理的案例太多,我想它最终会变得非常脆弱

【问题讨论】:

  • 您应该将端点更改为不能接受用户 id 而是从令牌中获取用户 id,这样它将始终只返回链接到令牌的详细信息

标签: c# firebase asp.net-core jwt


【解决方案1】:

您应该将端点更改为 photos/user 并将令牌传递给标头中的操作。

然后您可以使用令牌从令牌中检索正确的用户并返回通过令牌认证的用户的详细信息,然后可以将相同的应用到任何其他端点,不要传入用户 ID但是使用令牌从身份验证令牌中获取用户ID

【讨论】:

  • 感谢您的回答!但是在我们的例子中,从 token 接收用户 id 需要使用 db context,因为接收 id 的唯一方法是通过来自 token 的电子邮件。我们不使用 Firebase 传入的 UserId 令牌
  • 访问数据库获取用户id有什么问题?还是将用户 ID 添加到 JWT 令牌?
  • 是的,你是对的,实际上没有问题。谢谢
  • 查看有关向 firebase jwt 令牌添加自定义声明的信息,该声明应允许您将用户 ID 添加到令牌以使生活更轻松firebase.google.com/docs/auth/admin/custom-claims
  • 我会的。再次感谢您
猜你喜欢
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2023-03-27
  • 2021-05-29
  • 2017-07-30
  • 2018-06-30
  • 2018-08-03
  • 2021-02-06
相关资源
最近更新 更多