为什么 Oauth 技术对于基于 Web 浏览器(传统 Web 应用程序,而非 SPA)的应用程序和本机移动应用程序有所不同?

Why does the Oauth technique differ for a web browser (traditional web app, not SPA) based app and a native mobile app?

我正在阅读有关 Oauth 的文章,了解到对于基于浏览器的网络应用程序(传统网络应用程序,而非 SPA),当浏览器点击按钮登录时,网络服务器代码可以配置为与 Oauth 集成将用户重定向到 Oauth 提供程序登录页面等的提供程序。最终 Web 服务器从 Oauth 提供程序接收令牌。此令牌可以由 Web 服务器传递给资源服务器以进行授权访问。

如果最终用户正在使用本机移动应用程序,则必须直接从应用程序到 Oauth 提供程序进行集成,最好是通过 pkce。移动应用程序接收令牌,然后可以将令牌传递到资源服务器 api 以授权访问资源。

我只是想知道为什么基于网络浏览器的应用程序和本机移动应用程序的技术不同?

是否有一种方法可以将第 1 段中的技术用于本机移动应用程序,并将第 2 段中的技术用于基于浏览器的应用程序?

两者之间的主要区别在于网络应用程序可以有“秘密”而本机应用程序不能。

这意味着在 Web 应用程序的情况下,对于“主要”OAuth 流程必不可少的 client_secret 可以安全地存储在后端配置中的某处,而本机应用程序不能有:所有应用程序代码都在下载,因此必须包含上面提到的 client_secret,可以从 .apk 文件中提取。请注意,此问题在 SPA 风格的 Web 应用程序中很普遍。

PKCE 为客户端提供了在运行时生成 client_secrets 的可能性,这确保了它们的完整性。

至于能否在主(授权)流程中使用PKCE,绝对可以。