【问题标题】:Identifying user through access_token or id_token when calling backend API调用后端API时通过access_token或id_token识别用户
【发布时间】:2020-03-23 11:56:24
【问题描述】:

在 API 调用中识别用户的正确方法是什么?

我正在使用Auth0 service 来保护我的 API 并管理用户身份验证/注册过程。我“认为”我很清楚两件事:

  1. access_token 使客户端应用程序可以正确访问我的后端 API。换句话说,我需要将access_token 与我的 API 调用一起发送到我的后端,以便我可以访问我的 API 端点。
  2. id_token 的主要目的是提供有关用户的后端 API 信息,例如id、姓名、电子邮件等。

假设我对这两点是正确的,我如何让后端 API 知道用户是谁?我认为我不能在同一个电话中同时发送access_tokenid_token。那我要打两个电话吗?

我当然可以在我的 API 调用负载中包含用户信息,但这不是安全问题吗?恶意用户可能会在 API 调用之前更改用户信息,并将自己伪装成其他人。

我不清楚让后端 API 知道用户是谁的方式。

附:以下是更多信息,以备不时之需:

  • 所有用户身份验证、注册和令牌均由Auth0 service 处理。
  • 我的后端 API 在 ASP.NET Core 中创建并配置为接受 Auth0 令牌。这工作正常,即我在 API 调用中发送从Auth0 获得的access_token,并且我能够访问我的端点。
  • 我现在正在ReactNative 中开发一个移动应用程序,它通过Auth0 对用户进行身份验证,并调用我的ASP.NET Core 后端API 来获取它提供的所有功能

【问题讨论】:

    标签: oauth oauth-2.0 auth0


    【解决方案1】:

    我同意 Sam 的担忧,并且我的偏好是保持访问令牌的大小和机密性 - 只包含 API 可以读取的用户 ID。

    关于更多信息,我使用这种模式在 API 中使用声明,这也是 API 网关常用的 - 例如 AWS: https://authguidance.com/2017/10/03/api-tokens-claims/

    如果有帮助,请使用 .Net Core class 来实现它。

    【讨论】:

    • 我是否正确理解您,您仅在访问令牌中收到用户 ID,并且您在自己的数据库中查找用户,然后缓存用户数据以供后续 API 调用?如果是这样,这似乎是一种不错且干净的方法,但绝对昂贵。就我而言,我使用 Azure Redis 缓存数据,从 Azure 服务中提取缓存的用户数据比从令牌中获取数据要昂贵得多。我还尝试将其他用户数据放入访问令牌中,但在使用 Auth0 服务时遇到了一些问题。只想遵循标准方法。
    • 你是对的,这是有成本的——但你只在第一次收到访问令牌时支付成本——每个用户每 60 分钟一次。当然,您可能更喜欢实现您目标的其他解决方案。出于兴趣,这里有一个我的单页应用程序在线示例,您可以快速运行它以了解最终用户的性能 - 当您单击过期令牌然后刷新时,API 会进行查找:authguidance.com/home/code-samples-quickstart
    • 感谢您的回复。看起来你描述的方式是推荐的方式。 Auth0 上的这部分文档几乎证实了您的方法是正确的:auth0.com/docs/api-auth/… 不幸的是,在我的情况下,缓存并不便宜,因为我的应用程序是使用 Azure 的云应用程序,因此成本有点高而不是在服务器内存中缓存数据。尽管如此,安全性是最重要的,所以我认为它是“做生意的成本”。再次感谢您的帮助。
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2017-09-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多