我正在为我的公司开发一个具有以下参数和组件的应用程序:
- 第一方前端单页应用程序 (SPA)。 这是在 TypeScript(JavaScript 的一种方言)中实现的,我们正在内部开发代码。
- 第一方后端 REST API,它可以访问位于其他地方的 MongoDB。这是用 JavaScript 实现的,并使用在 Node.js 上运行的 Express。我们正在内部开发代码。现在这部分所做的就是通过 REST API 提供 CRUD 操作。
- 这些应用程序只能提供给我们的员工。所有员工都拥有已加入我们公司的 Azure AD 的 Windows 10 笔记本电脑。
- 我们没有本地 ADFS 服务器。 我们是 100% 的云。
- 该应用程序将在其业务逻辑中使用 Azure 资源,例如 Graph API。
- 该应用程序还将使用其他 3rd 方资源,例如我们公司的 Dropbox。
- 对“应用程序”进行身份验证还应尽可能无缝地针对所有其他第 3 方应用程序(如 Dropbox)进行身份验证。
- 今天我们有 10 名员工。在接下来的几年里,我们极不可能有超过 50 名员工,届时这个应用程序将升级到第 2 版,我将聘请某人来构建它。
是时候为我们的应用程序实现身份验证和授权了。应用程序应同时针对 Azure AD 进行身份验证和授权。理想的情况是登录到公司笔记本电脑的用户应该在应用程序上自动进行身份验证,而另一台机器上的用户(例如机场或酒店信息亭)将使用他们的 Azure AD 凭据登录。
我的问题是在这种情况下应该使用哪个 OAuth2 授权流。
我已经阅读了一些来自 Microsoft 和 OAuth 的文章,经历了许多 Udemy 课程等,并从这些来源获得了相互矛盾的建议。一些人建议 SPA 应该使用隐式授权,而另一些人则说,如果后端服务器上有业务逻辑(并且存在/将要),则应该使用客户端凭据授权。
我是一位经验丰富的开发人员,但我不是安全专家。在我的完美世界中,我会将这个应用程序的身份验证部分的设计和实现外包给安全专家,但预算是这里的主要限制。在这个阶段花数千美元让别人为我们建造这个根本不可行。
综上所述,鉴于上述设计和架构,应该如何实施身份验证?应该使用哪个授权流程?