当前位置: 首页 > 知识库问答 >
问题:

防止用户调用受保护的endpointOAuth2

李胤
2023-03-14

出于学习目的,我正在使用OAuth2开发一个REST API Angular 4应用程序。

有些受保护的endpoint只能由经过身份验证的用户调用。让我们以更新用户配置文件的endpoint为例:

/users/{user_id}

登录用户将能够通过转到更新配置文件屏幕来更新自己的配置文件,该屏幕在后台将调用 /users/{user_id}发送带有新信息和访问令牌的有效载荷。

我们如何防止恶意用户调用同一个endpoint来更新其他用户的配置文件?

ID为1的用户应该可以调用 /users/1但不能 /users/2?

这是可以用OAuth做的事情吗?还是我误解了什么?

谢谢

共有3个答案

齐建白
2023-03-14

请阅读有关Oauth2的Spring Security。因为您同时实现后端和前端,所以密码授予类型是合适的。Oauth 2.0规范在这里讨论了它:密码授权类型(又名资源所有者密码凭据)以及检查此链接。

为了回答您的问题,在密码授予类型-用户名和密码用于获取访问令牌。来自前端的每个请求都需要传递该访问令牌。安全终结点将检查访问令牌是否有效,是否针对同一用户发出。

姬正文
2023-03-14

有一种很酷的东西叫做棱角分明的守卫。这是文档的链接:https://angular.io/guide/router

谢涵煦
2023-03-14

如果您想坚持使用典型的REST风格API(即,要更新的用户配置文件的ID随请求一起发送),则必须在服务器端添加一些额外的检查。用于验证用户身份的访问令牌包含她/他的身份,这将导致请求范围中相应的主体对象。您必须检查此主体所代表的用户是否真的有权使用请求中的ID更新给定的用户配置文件。

例如,您可以首先从数据库加载具有给定ID的配置文件,然后检查用户名是否等于主体的用户名。这也可以通过Spring Security预授权注释和参数中的一点SpEL魔力来实现。

替代方法:远离REST风格的API,只需提供一个endpoint/update profile(或类似的命名),它不需要用户ID作为URL的一部分。然后,您只需获取访问令牌提供的用户身份,并更新数据库中相应的配置文件。因此,用户只能更新她/他可以获得访问令牌的配置文件。-缺点是,您将无法允许某些超级用户或管理员在此设置中更新任何任意配置文件。

 类似资料:
  • 问题内容: 我正在研究使用SQL LocalDB作为客户端数据库,它将替代.net 4中开发的内部应用程序中的当前SQL CE 3.5数据库。 我遇到了一个不确定的问题,那就是LocalDB实例的安全设置。 如果我在.net中设置了一个脚本来创建一个私有LocalDB实例,例如(localdb)\ T1,然后在该实例中创建了一个新数据库,并添加了一个SQL用户帐户+密码(非域帐户),如何停止本地使

  • 6xx受保护 600 Series,Repliesregardingconfidentialityandintegrity 631 Integrityprotectedreply. 632 Confidentialityandintegrityprotectedreply. 633 Confidentialityprotectedreply.

  • 问题内容: 我正在使用Spring Security在Grails应用程序中托管REST Web服务,即: 我是从Android应用程式呼叫它。(调用不安全的服务就可以了。) 为了调用该服务,我正在手动建立一个request()并使用来执行它。 我想知道最佳实践是什么,以及如何实施它们……具体来说,我应该: 执行一次登录,以检索JSESSION_ID,然后将包含它的标头添加到每个后续请求的Http

  • 我的应用程序由几个PHPendpoint组成,这些endpoint可以通过AJAX访问。问题是它们也可以通过向同一endpoint发出HTTP请求的任何人访问。我可以添加这个答案中指定的和的检查,但是这些检查可以被欺骗。我可以添加一个需要与请求一起发布的密钥,但是任何查看javascript和/或控制台的人都可以看到这个密钥。这里的解决方案是什么?

  • 如果扩展程序损害了他们的隐私或要求提供需要的更多权限,则用户将不会安装该扩展程序。权限请求应对用户有意义,并且限于实现扩展所需的关键信息。 收集或传输任何用户数据的扩展必须遵守用户数据隐私策略。 通过包括以下预防措施来保护和尊重用户,以确保其身份安全。切记:扩展可以访问的数据越少,意外泄漏的数据就越少。 减少所需的权限 扩展可以访问的 API 在 manifest 的权限字段中指定。赋予的权限越多

  • 我的API应用程序中有此路由: 在postman中,我执行如下api调用: URL用户?令牌=令牌 但这会带来: 如何在postman中使用令牌正确执行api调用?