语境
我正在开发一个解决方案
- 两个客户端,一个移动客户端和一个 SPA。
- 我控制的授权服务器。
- 资源服务器/身份提供者,通过 API 提供用户数据和功能。
我使用 OAuth2.0 是因为它可以提供优势,例如允许第三方应用程序轻松与我的身份验证服务器/IdP 集成,无论是访问用户数据还是 API 功能。它还将允许客户与其他 IdP 集成,并最终将他们的数据迁移到我的。
OAuth 流程
验证
在 OAuth 流程中,会进行重定向以在授权服务器上对用户进行身份验证。此时,用户输入凭据并同意客户想要访问的范围/声明。对于第三方客户端应用程序,我了解:
- 移动:最新的RFC推荐移动应用的浏览器自定义选项卡。
- SPA:基于浏览器,这里是一个简单的重定向。
但这是一个第三方客户端应用程序将身份验证和帐户管理委托给我的 IdP 系统的用例。这确保了移动应用程序无法窥探用户的凭据(并最终利用 IdP 的 sso 解决方案,因此无需输入凭据)。
就我而言,我拥有客户和其他人。
我的第一个问题是:由于我拥有应用程序,无论它是移动应用程序还是 Web 应用程序,我是否一定需要实现对 IdP 上托管的 UI 的重定向?或者我可以将表单直接作为移动/Web 应用程序的一部分并通过 REST 对用户进行身份验证(然后按照 OAuth 流程的其余部分为 OIDC 提供 AccessToken + IdToken)?
范围
当它是第三方客户端应用程序时,我知道我们必须向最终用户显示客户端想要访问的数据(范围/声明)。用户必须明确同意并知道应用程序将使用哪些数据。
但在我的情况下,由于我拥有该应用程序,我不能只拥有用户批准使用该应用程序的条款和条件页面并跳过 OAuth 流程中的范围/声明批准吗?
简而言之,最佳实践是什么?为什么不涉及第三方?