我想从面向 Android、iOS 和 Web 的 Flutter 客户端使用受 OpenID 保护的 REST 服务。
我找到了 flutter_appauth 包,但它似乎与网络应用程序不兼容。
是否有适用于所有平台的 Flutter OpenID 包? 我对完整的网络解决方案(使用系统浏览器和深层链接的东西)感到满意。
由于 Spring Security 团队(以及许多其他安全专家)的最新建议,我放弃使用公共 OAuth2 客户端,转而使用 OAuth2 BFF 模式(我不尝试从 Flutter 应用程序运行 OAuth2 流)。
我在 这篇 Baeldung 文章中描述了使用 Spring Cloud Gateway 来配置此类 OAuth2 BFF。
在此配置中,Flutter 和后端之间的请求通过会话 cookie(和 CSRF 令牌)进行授权。令牌仅在 BFF 和资源服务器之间使用。
对于 Web,与我在文章中所揭露的 Angular、React 和 Vue 没有什么区别。但对于 Android 和 iOS,我们必须处理用户代理:在应用程序内部使用 Dio 或其他任何东西,以及在授权服务器上进行用户身份验证期间使用平台浏览器。
这意味着在浏览器之外工作时使用深层链接并特别注意 cookie。
所以,对于手机,我想到的解决方案包括:
dio
使用请求拦截器来处理会话 cookie 和 CSRF 令牌url_launcher
当从 BFF 重定向到授权服务器时打开浏览器go_router
和深层链接拦截从授权服务器返回的重定向,并使用 Dio 将包含授权代码的 URI 转发到 BFF(遵循此 URI,添加会话 cookie)我在这个其他答案中更多地考虑了授权从移动应用程序到基于会话的后端的请求。