我正在努力使用 Flutter + Java Spring Boot + OAuth2 设置一个新项目。 (我对所有这 3 个技术都很陌生,但我这样做是为了学习,所以我想专门使用这些技术,并且我不想使用像 FireBase 这样的第 3 方身份验证提供商(不想最终被锁定))。
我有很多问题,因为我找不到明确的文档,但如果有人可以指出此场景的示例/教程,那将会有所帮助。
这就是我现在的位置:
SpringBoot:
spring-boot-starter-oauth2-client
和 web 等@EnableWebSecurity
设置 securityFilterChain
- '/login' 不需要身份验证LoginController
映射'/login'application.property
文件中这似乎有效 - 我可以看到它似乎登录正常(尽管我不知道发生了什么或接下来的步骤)。
这就是问题所在。 我不确定 Flutter 应该如何连接到我的服务器进行身份验证,也不知道如何获取令牌并将其传递到我的服务器。
我不明白的是:
http.get
?FlutterSecureStorage
,然后将其设置在标头中以便对服务器进行任何调用?一个额外的问题是,对于 flutter 应用程序(Android/iOS/Web)访问我的服务器,大概我必须在 Java 端关闭 CORS(@CrossOrigin)? 不过我担心安全问题。
非常感谢任何指示!
对带有
oauth2Login
的 Spring 客户端的请求是使用会话 cookie 进行授权的,而不是使用 Bearer
令牌进行授权。所以你必须:
redirect-uri
并在您的应用程序中以编程方式跟踪它POST
、PUT
、PATCH
和 DELETE
)
)。出于安全原因,我仅将这些 cookie 存储在内存中。编写处理这些 cookie 的代码并不需要太多工作。当您担心安全问题时:
oauth2Login
在 Spring OAuth2 客户端上启用针对 CSRF 的保护。同样,它基于会话,会话是 CSRF 攻击的载体。对于移动和单页应用程序,您需要基于 cookie 的保护。您应该考虑使用自己的授权服务器。当像您一样直接使用“社交”身份时,您无法管理令牌中的用户数据(大多数应用程序都需要“角色”之类的内容),并且无法管理令牌格式。此外,这将使添加更多身份源变得更加容易(更多 OpenID 提供商,如 Facebook、LDAP 等)。我写了一个教程来开始使用 Keycloak。您还可以查看 Auth0 或 Amazon Cognito 等云产品。 Spring 授权服务器是另一种选择,但可能需要比您更多的工作和对 OAuth2 和 OIDC 标准的更好了解。
如果您的后端不断增长,并且您希望将其拆分为多个(微型或非微型)相互通信的服务,您可能希望将这些服务配置为资源服务器,并在它们前面设置一个网关。在这种情况下,请查看我为其编写的 OAuth2 BFF 模式 另一个 Baeldung 教程。