调用后端API时通过access_token或id_token识别用户

时间:2019-11-27 21:09:35

标签: oauth oauth-2.0 auth0

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

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

  1. access_token为客户端应用提供了对我的后端API的适当访问权限。换句话说,我需要通过API调用将access_token发送到后端,以便可以访问API端点。
  2. id_token的主要目的是提供有关用户的后端API信息,例如ID,名称,电子邮件等。

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

我当然可以在API调用有效负载中包含用户信息,但这不会引起安全问题吗?潜在的恶意用户可能会在API调用之前更改用户信息,并以其他人的身份出现。

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

P.S。如果需要,这里有更多信息:

  • 所有用户身份验证,注册和令牌均由Auth0 service处理。
  • 我的后端API是在ASP.NET Core中创建的,并配置为接受Auth0 令牌。这很好,也就是说,我通过API调用发送了从access_token获得的Auth0,并且可以访问我的端点。
  • 我现在正在ReactNative中开发一个移动应用,该应用可以通过Auth0对用户进行身份验证,并为其提供的所有功能调用我的ASP.NET Core后端API

2 个答案:

答案 0 :(得分:1)

我同意Sam的担心,我更希望保持访问令牌的大小和机密性-仅包含API可以读取的用户ID。

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

如果有帮助,请执行一些.Net Core代码: https://github.com/gary-archer/authguidance.apisample.netcore/blob/master/src/framework/oauth/Authorizer.cs

答案 1 :(得分:0)

  

我认为我无法同时发送access_token和id_token   呼叫。我要打两个电话吗?

为什么您说不能在同一通话中同时发送access_tokenid_token?您可能具有请求标头变量access_token,并且可以再添加一个名为id_token的变量。那不是我要做的,但是有可能,并且比两个调用要简单得多。

我仅使用访问令牌,当我需要更多数据时,会为其添加新的声明。 Keycloak生成访问令牌,并允许配置令牌的内容。默认情况下,preferred_username中有access_token个声明,因此我可以解码jwt令牌并找出谁是用户。当我需要用户电子邮件或其他内容时,我可以为特定客户端配置映射器,并将其添加到访问令牌中。您可能不使用Keycloak,但是应该有一种添加声明以访问令牌的方法。

  

我当然可以在API调用有效负载中包含用户信息,但是   那不是安全问题吗?潜在的恶意用户   可以在API调用并显示之前更改用户信息   他自己/她自己。

使用数字签名令牌的原因是为了防止此类攻击。