Oauth 调用后端API时通过access\u令牌或id\u令牌标识用户

Oauth 调用后端API时通过access\u令牌或id\u令牌标识用户,oauth,oauth-2.0,auth0,Oauth,Oauth 2.0,Auth0,在API调用中识别用户的正确方法是什么 我正在使用来保护我的API并管理用户身份验证/注册过程。我“认为”我清楚两件事: access\u token允许客户端应用程序正确访问我的后端API。换句话说,我需要将带有API调用的access\u令牌发送到后端,以便访问API端点 id\u token的主要目的是提供有关用户的后端API信息,例如id、姓名、电子邮件等 假设我在这两点上是正确的,我如何让后端API知道用户是谁?我认为我不能在同一个呼叫中同时发送access\u token和id\u

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

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

  • access\u token
    允许客户端应用程序正确访问我的后端API。换句话说,我需要将带有API调用的
    access\u令牌
    发送到后端,以便访问API端点
  • id\u token
    的主要目的是提供有关用户的后端API信息,例如id、姓名、电子邮件等
  • 假设我在这两点上是正确的,我如何让后端API知道用户是谁?我认为我不能在同一个呼叫中同时发送
    access\u token
    id\u token
    。那么我要打两个电话吗

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

    我不清楚如何让后端API知道用户是谁

    附:这里有更多信息,以备不时之需:

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

    我同意Sam的担忧,我的偏好是保持访问令牌的小型化和机密性——只包含API可以读取的用户id

    为了获得更多信息,我在API中使用了使用此模式的声明,API网关也通常使用此模式,例如AWS:


    如果它在这里有帮助的话,是一个实现它的方法。

    我是否正确地理解了您的理解,您只在访问令牌中接收用户Id,并在您自己的数据库中查找用户,然后缓存用户数据以供后续API调用?如果是这样的话,这似乎是一个好的、干净的方法,但肯定代价高昂。在我的例子中,我使用Azure Redis来缓存数据,从Azure服务中提取缓存的用户数据比从令牌中获取数据要昂贵得多。我还尝试将其他用户数据放入访问令牌中,但在Auth0服务中遇到了一些问题。只是想遵循标准的方法。你是对的,这是有成本的——但你只在第一次收到访问令牌时支付成本——每60分钟为每个用户支付一次。当然,您可能更喜欢其他能够实现您目标的解决方案。出于兴趣,这里有一个我的单页应用程序在线示例,您可以快速运行,以了解最终用户的性能-当您单击Expire Token然后刷新时,API会进行查找:感谢您的回复。看起来你描述的方式是推荐的方式。关于
    Auth0
    的这一部分文档基本上证实了您的方法是正确的:不幸的是,在我的情况下,缓存并不便宜,因为我的应用程序是使用Azure的云应用程序,所以成本比在服务器内存中缓存数据要高一些。然而,安全是首要的,所以我会把它看作是“做生意的成本”。再次感谢你的帮助。