gpt4 book ai didi

reactjs - 我应该如何在我的案例中使用 OAuth 2.0 授权授权(React 前端,Spring Boot 后端)

转载 作者:行者123 更新时间:2023-12-04 15:05:47 24 4
gpt4 key购买 nike

对于如何为我的网络应用程序使用 OAuth 2.0 授权,我有点困惑。

我了解 SPA 的隐式赠款现已停用,我应该使用授权赠款。

然而,我阅读的文章和文档,以及我观看的视频仍然存在一些歧义。

如果我有一个 React JS 前端和一个 Spring Boot 后端,我会看到三种可以进行 token 交换的方法。因此,当用户点击登录时,我可以:

1) 让我的 React 前端在没有客户端密码的情况下执行授权授予,并按照 SPA 的 OAuth 2.0 文档的建议获取 token

2) 让我的 React 前端执行一半的授权授予,即获取授权代码。然后将其传递到我的后端以与客户端 key 交换授权码以取回 token ,然后将此 token 传递到我的前端。

(这是此处推荐的方法:what's the alternative to password grant now that it is deprecated? OAUTH 2.0)。

老实说,我不明白这是如何工作的,因为前端和后端的客户端 ID 肯定会不同吗?

3) 让我的 React 前端将授权流程委托(delegate)给我的后端服务器,后者可以使用客户端密码执行授权授予。

我是不是误解了什么,或者所有这些方法都可行吗?这里推荐的方法是什么?

最佳答案

这些都是可行的,只是风险不同。可能最重要的区别是在身份验证期间哪个组件可以访问什么。考虑到这些组件中的每一个都可能受到损害,攻击者会获得什么。

让我们从上面的#3 开始。作为此应用程序的用户,我必须在 SPA 中输入我的凭据,然后 SPA 会将其传递给您的后端。凭证会同时向 SPA 和后端显示,如果其中任何一个遭到破坏,攻击者将直接获得对用户名和密码对的访问权限。如果没有必要,您可能不想承担这种风险。此外,如果身份提供者是公共(public)身份提供者(不特定于您的应用程序),这将不起作用,即。我不想在您的应用中输入我的 Facebook 密码。

从这个角度来看上面的#1 更好,因为您的后端永远无法访问实际的用户凭据(他们的密码)。根据实现情况,如果您将用户重定向到身份提供者以输入他们的密码,SPA 也不需要访问权限,但这是一种 UX 权衡。在这种情况下,SPA 和您的后端都有访问 token ,这很容易受到潜在的 XSS 攻击。如果其中任何一个遭到破坏,攻击者可能会获得对访问 token 的访问权并在其有效时使用它。

#2 通过 SPA 永远无法访问访问 token ,只能访问授权代码进一步改进了这一点。在这种情况下,SPA 可能会与您的后端进行常规 session ( session token 可能在 httponly cookie 中),这对 XSS 是安全的,并且后端可以使用交换的访问 token 查询它可以访问的任何资源。你可能会争辩说 SPA 有授权码,攻击者也可以用它来交换访问 token ,但一方面,授权码应该是一次性 token ,而且 SPA 不需要存储授权码,它只需要将其传递给后端一次。

之所以所有这些都存在并且可行,是因为有时您出于安全之外的原因无法做到其中之一。选择一种在您的应用程序中向最少的组件公开最少内容的方法,同时仍能满足功能、用户体验和其他要求,并始终了解您隐含接受的风险。

关于reactjs - 我应该如何在我的案例中使用 OAuth 2.0 授权授权(React 前端,Spring Boot 后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66145696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com