网络上有很多有关OAuth 2,其不同类型的流以及在何处/如何使用它们的信息。我发现这些资源中的大多数都讨论了对应用程序的用户进行身份验证,但是我在努力理解使用第三方API(即,当我们自己的API是用户与其用户之间的“中间人”时)最佳/正确的方法是什么。第三方API中的数据)。
在示例场景和一些图表的帮助下,我将非常感谢有关如何正确实现与第三方API集成以及每种方法的利弊的建议/意见。
首先,假设我们有一个Web应用程序,其结构如下:
现在假设我们希望添加与Google表格的集成。新功能将允许用户使用自己的Google表格(即存储在自己的Google帐户中)作为数据源,并且该应用程序具有对该表格的读写权限。将来可能还会有其他集成,所以我假设其他API需要类似的过程。
除了现有的OAuth流程(允许用户登录“ MyApp”前端并与“ MyApp API”进行通信)外,还需要其他OAuth流程,以便用户将MyApp连接到第三方Google Sheets API。
该文档有两个Quickstart示例,但似乎都不符合我的需求: 浏览器-https://developers.google.com/sheets/api/quickstart/js Node.js(控制台应用程序)-https://developers.google.com/sheets/api/quickstart/nodejs
来自第三方(Google)API的数据是潜在的几个集成点之一,因此从直观上看,与Google Sheets API的所有通信都应在MyApp API
中进行,这似乎更加合乎逻辑(并且更安全)。 ,而不是在前端/客户端。 MyApp API
将获取数据,以某种方式对其进行处理/操作/格式化,然后将其显示在前端或移动应用中。
我们需要访问每个用户自己的数据,因此Client Credentials
流不适合。我专注于Implicit
或Authorization Grant
工作流程。
重要说明:棘手的问题似乎来自MyApp API
是无状态的事实,因此没有存储令牌的长期会话。在此基础上,令牌似乎需要存储在前端(例如本地存储/ Cookie等)或后端数据库中。
以下是我对两种可能方法的解释。我将不胜感激。
优点:
access_token
无需进行code
步骤即可立即获得缺点:
优点:
缺点:
鉴于数据处理将在后端进行,因此选项2似乎更合适,因为可以从前端应用程序中隐藏敏感令牌,并且几个客户端(Web前端,移动应用程序)的参与义务更少除初始登录/用户同意外,该过程均不适用。但是,我不确定拥有一个充满用户身份验证令牌的数据库是否是一个好主意,或者我如何才能适当地保护该数据库。
答案 0 :(得分:0)
好消息是,这两个选项都完全有效且同样安全。担心浏览器中存在短暂的访问令牌不是问题。同样,如果仅将令牌保留在BE上,则需要实现自己的客户端身份验证/会话/ JWT等等,这会带来相同的攻击面。
我都做过,目前正从BE迁移到FE。就我而言,原因是我需要做的所有事情都可以在FE上完成,因此我最终根本没有BE。严格来说,这不是正确的,因为我使用BE进行了入职/付款,但仅此而已。
因此,最佳方法取决于您问题之外的因素,例如应用程序的性质,BE成本是多少以及它的重要性如何,您的devops技能集对于维护两个环境的表现如何,BE的程度无论如何都是必需的,而不是完全可选的。