如何防止经过身份验证的用户欺骗 RESTful API 调用

     2023-03-31     86

关键词:

【中文标题】如何防止经过身份验证的用户欺骗 RESTful API 调用【英文标题】:How to prevent authenticated user from spoofing restful api calls 【发布时间】:2019-03-05 22:11:48 【问题描述】:

所以我构建了一个 RESTful API。它有一个/account/id 端点来返回用户数据。 API 通过身份服务器进行保护,该身份服务器向请求者颁发一个 JSON Web 令牌 (JWT),可以访问 /account/id 端点。用户发送带有用户名和密码的请求,并在成功验证后收到 JWT。现在,用户向/account/id 发送获取其帐户信息的请求。该请求在标头中使用令牌发送,并返回 200 响应,其中包含有效负载中的用户数据。

如何授权端点中的 id?换句话说,经过身份验证的用户可以在端点中添加任何 id 并可能接收另一个用户的数据。使用 JWT 如何防止这种情况发生?

【问题讨论】:

【参考方案1】:

您可以将数据存储在网络令牌中。如果您存储用户的 ID,那么您可以为他们提出的每个请求识别他们。这是安全的,因为令牌的内容是用服务器的私钥签名的。因此它们的内容不能改变。

之后你可以限制API让每个用户只能查询自己的记录,或者你也可以实现一个复杂的角色系统,每个用户都有一组角色(例如read-onlyguestmaintaineradminclient 等)定义了哪些端点以及它们可以使用的方式。

【讨论】:

所以要限制API让每个用户只能查询自己的记录,我是不是只检查登录的用户id等于uri中的id? 是的。但是您可以在数据库中存储有关用户权限的附加信息。例如,用户记录中的 is_admin 字段。如果他们将其设置为 true,那么他们可以读取任何记录。关于存储 ID:创建令牌时应该知道用户 ID,因为这发生在成功验证之后。 或者你可以走另一条路,例如/我

RESTful Web 参数篡改

】RESTfulWeb参数篡改【英文标题】:restfulWebParameterTampering【发布时间】:2016-06-2218:17:01【问题描述】:我正在尝试了解如何使用restful客户端为经过身份验证的用户实现安全性。我遇到麻烦的场景是如何阻止用户更新不属于他自己... 查看详情

如何获取经过身份验证的用户列表?

】如何获取经过身份验证的用户列表?【英文标题】:Howtogetthelistoftheauthenticatedusers?【发布时间】:2011-02-1223:06:13【问题描述】:我想显示经过身份验证的用户列表。关于文档:http://docs.djangoproject.com/en/dev/topics/auth/类models.Useris_... 查看详情

如何验证用户当前密码?

】如何验证用户当前密码?【英文标题】:Howtoverifyuserscurrentpassword?【发布时间】:2017-04-2718:02:06【问题描述】:所以,也许我在文档的某个地方错过了这个,但我找不到任何类似的东西。我不希望我的用户必须输入他们当前的... 查看详情

RESTful 身份验证 - 导致高负载时性能不佳?

】RESTful身份验证-导致高负载时性能不佳?【英文标题】:RESTfulauthentication-resultingpoorperformanceonhighload?【发布时间】:2011-07-0903:28:53【问题描述】:对于RESTfulWeb服务,我们说服务器不应存储任何状态。现在,对于每个请求,“用... 查看详情

Vue.js:如何保护登录组件免受经过身份验证的用户的影响

】Vue.js:如何保护登录组件免受经过身份验证的用户的影响【英文标题】:Vue.js:Howtoprotectlogincomponentfromauthenticateduser【发布时间】:2020-05-2216:24:01【问题描述】:我正在设计一个使用firebase-auth实现身份验证的应用程序。我已经... 查看详情

Symfony:如何从数据库中刷新经过身份验证的用户?

】Symfony:如何从数据库中刷新经过身份验证的用户?【英文标题】:Symfony:HowdoIrefreshtheauthenticateduserfromthedatabase?【发布时间】:2013-11-1121:19:58【问题描述】:例如,我将一个新角色授予控制器中当前经过身份验证的用户,如下... 查看详情

如何防止 Ajax 调用使会话保持活动状态?

】如何防止Ajax调用使会话保持活动状态?【英文标题】:HowdoIpreventAjaxcallsfromkeepingasessionalive?【发布时间】:2014-06-2023:21:11【问题描述】:我在MVC5中使用cookie身份验证。我的网页严重依赖每1-5秒经过身份验证和未经身份验证的Aj... 查看详情

在keycloak中如何更改经过身份验证的用户的密码

】在keycloak中如何更改经过身份验证的用户的密码【英文标题】:inkeycloakhowtochangethepasswordofanauthenticateduser【发布时间】:2021-07-0806:59:49【问题描述】:在keycloak管理中,如果我将用户的“必需的用户操作”设置为“更新密码”。... 查看详情

如何从 FormRequest 类方法中访问当前经过身份验证的用户

】如何从FormRequest类方法中访问当前经过身份验证的用户【英文标题】:HowtoaccesscurrentauthenticateduserfromwithinFormRequestclassmethod【发布时间】:2015-07-1007:41:56【问题描述】:我有一个用户模型,它有两个功能来检查用户的性别。对于... 查看详情

仅针对经过身份验证的用户的 Django 缓存

...布时间】:2012-07-2413:54:33【问题描述】:问题在Django中,如何创建仅对经过身份验证的用户可见的页面的单个缓存版本(所有用户都相同)?设置我希望缓存的页面仅对经过身份验证的用户可用(他们在视图上使用@login_required)... 查看详情

如何让 asp.net 登录控件自动验证以前经过身份验证的用户?

】如何让asp.net登录控件自动验证以前经过身份验证的用户?【英文标题】:Howtogettheasp.netlogincontroltoautoauthenticateapreviouslyauthenticateduser?【发布时间】:2010-09-1423:39:56【问题描述】:我正在尝试设置登录控件以记住之前已成功输入... 查看详情

如何通过经过身份验证的 cognito 用户(用户池)快速访问 DynamoDB

】如何通过经过身份验证的cognito用户(用户池)快速访问DynamoDB【英文标题】:HowtoaccessDynamoDBbyauthenticatedcognitouser(userpool)inswift【发布时间】:2016-10-2510:59:41【问题描述】:我正在尝试将AWSCognito(用户池)和AWSDynamoDB用于我的移... 查看详情

如何从 Firebase 数据库中获取经过身份验证的用户?

】如何从Firebase数据库中获取经过身份验证的用户?【英文标题】:Howtogetauthenticatedusersfromfirebasedatabase?【发布时间】:2016-11-1713:43:08【问题描述】:我正在创建应用程序,我将在其中使用Firebase消息服务。消息传递工作正常,但... 查看详情

OpenFire:在 IQHandler 中,如何获取发送它的经过身份验证的用户?

】OpenFire:在IQHandler中,如何获取发送它的经过身份验证的用户?【英文标题】:OpenFire:InanIQHandler,howtogettheauthenticateduserthatsentit?【发布时间】:2014-03-3104:53:36【问题描述】:我想实现一个IQHandler,但我想确保只有经过身份验证... 查看详情

如何防止用户更改密码后阅读?

】如何防止用户更改密码后阅读?【英文标题】:Howtopreventuserfromreadingafterpasswordchange?【发布时间】:2021-08-2814:09:45【问题描述】:在我的firebaserealtimedatabase中,只有经过身份验证的用户才能读取数据。假设用户(假设xyz)在应... 查看详情

Spring Security:如何向经过身份验证的用户添加额外的角色

】SpringSecurity:如何向经过身份验证的用户添加额外的角色【英文标题】:SpringSecurity:HowToaddextraroletoauthenticateduser【发布时间】:2012-01-1303:02:52【问题描述】:我有一个与REST服务和SpringSecurity配合使用的应用程序。我有基本身份... 查看详情

作为经过身份验证的用户,我如何使用 Flutter 覆盖 Firebase 中的数据?

】作为经过身份验证的用户,我如何使用Flutter覆盖Firebase中的数据?【英文标题】:HowcanioverwritedatainFirebaseasaauthenticatedUserwithFlutter?【发布时间】:2021-06-1121:41:20【问题描述】:我正在使用Flutter和Firebase开发移动应用程序。我的... 查看详情

存储/分配经过身份验证的用户的角色

...ctiveDirectory登录:验证用户名和密码,然后设置Authcookie。如何在登录时存储用户的角色信息,以便我的控制器在用户浏览网站时看到这些角色?[Auth 查看详情