在API调用中识别用户的正确方法是什么?
我正在使用Auth0
service来保护我的API并管理用户身份验证/注册过程。我“认为”我对两件事很清楚:
access_token
为客户端应用提供了对我的后端API的适当访问权限。换句话说,我需要通过API调用将access_token
发送到后端,以便可以访问API端点。id_token
的主要目的是提供有关用户的后端API信息,例如ID,名称,电子邮件等。假设我对这两点是正确的,我如何让后端API知道用户是谁?我认为我无法在同一通话中同时发送access_token
和id_token
。我要打两个电话吗?
我当然可以在API调用有效负载中包含用户信息,但这不会引起安全问题吗?潜在的恶意用户可能会在API调用之前更改用户信息,并以其他人的身份出现。
我不清楚让后端API知道用户是谁的方式。
P.S。如果需要,这里有更多信息:
Auth0
service处理。ASP.NET Core
中创建的,并配置为接受Auth0
令牌。这很好,也就是说,我通过API调用发送了从access_token
获得的Auth0
,并且可以访问我的端点。ReactNative
中开发一个移动应用,该应用可以通过Auth0
对用户进行身份验证,并为其提供的所有功能调用我的ASP.NET Core
后端API 答案 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_token
和id_token
?您可能具有请求标头变量access_token
,并且可以再添加一个名为id_token
的变量。那不是我要做的,但是有可能,并且比两个调用要简单得多。
我仅使用访问令牌,当我需要更多数据时,会为其添加新的声明。 Keycloak生成访问令牌,并允许配置令牌的内容。默认情况下,preferred_username
中有access_token
个声明,因此我可以解码jwt令牌并找出谁是用户。当我需要用户电子邮件或其他内容时,我可以为特定客户端配置映射器,并将其添加到访问令牌中。您可能不使用Keycloak,但是应该有一种添加声明以访问令牌的方法。
我当然可以在API调用有效负载中包含用户信息,但是 那不是安全问题吗?潜在的恶意用户 可以在API调用并显示之前更改用户信息 他自己/她自己。
使用数字签名令牌的原因是为了防止此类攻击。