通过 Spring Social 进行移动注册

问题描述 投票:0回答:2

我正在尝试将 Spring Social 用于我的 REST 服务和移动应用程序。

我想知道最好的方法是什么。

我计划在我的移动应用程序中使用linkedin、谷歌登录和密码身份验证。此社交登录应该连接到我的数据库中的用户

我的 spring 应用程序将充当 API,应使用 JWT 令牌进行保护。随后,移动应用程序将使用此 JWT 令牌来使用 API。

在我的手机上,我希望能够使用 linkedin、facebook 或密码注册/登录。

据我了解,移动设备需要与https://spring.io/guides/tutorials/spring-boot-oauth2/

中描述的不同的oauth流程

似乎需要“代码交换的证明密钥”流程,如下所示: https://auth0.com/docs/api-auth/grant/authorization-code-pkce

这是正确的吗?我没有找到任何信息如何最好地使用 Spring Social 来做到这一点以及 Spring Social 是否支持此用例。

有人能指出我正确的方向吗?我刚刚找到了如何使用单页应用程序而不是移动应用程序执行此操作的信息。提前非常感谢!

spring spring-mvc spring-boot spring-security spring-social
2个回答
8
投票

一种可能的方法是

  1. 移动应用程序使用 LinkedIn 或 Google 的 SDK 进行 SSO 来检索 authN 令牌。
  2. 移动应用程序将其传递给后端服务,后端服务使用它从 oauth 服务检索用户详细信息(例如电子邮件)。
  3. 后端服务可以对用户详细信息进行额外的工作(例如,与现有用户链接)。
  4. 后端服务将 JWT 令牌返回到移动应用程序,从而结束 SSO。

SSO 应该能够返回电子邮件地址,供您链接用户。有时您需要明确申请许可(Facebook 需要)。

此方法的关键点在于,它完全避免在后端服务中使用 OAuth2 库,因为它现在是通过使用 SSO 提供商的 SDK 在移动应用程序中处理的。

流程总结如下图所示:

======== 编辑:

我们使用这种方法通过一个移动应用程序进行 Facebook SSO,效果非常好。移动应用程序在 iOS 中,后端服务是 Spring Boot。

欢迎讨论。


0
投票

在这种情况下,我使用具有身份联合功能的独立授权服务器(最好是 OpenID 提供商,既可以是 Keycloak 等本地提供商,也可以是 Auth0、Amazon Cognito、Okta 等云提供商)。

此 OP 集中了用户定义(并提供“通过...登录”功能)。它也是我所有 OAuth2 客户端和资源服务器的唯一参考。

在我写的应用程序中:

  • 应用程序中用于用户身份和访问控制所需的所有数据均由 OP 添加到令牌声明中
  • REST API 配置为资源服务器(请求通过访问令牌进行授权)
  • 客户是
    • 一个(或多个)
      spring-cloud-gateway
      配置为Backend FFrontend:带有
      spring-boot-starter-oauth2-client
      TokenRelay=
      过滤器
    • 移动应用程序,使用lib来处理authorization_code流程,令牌存储和请求授权(该lib取决于用于编写应用程序的框架)。

基于 Javascript 的 Web 应用程序和 BFF 之间的请求通过会话进行授权,因此该应用程序只是前端,而不是 OAuth2 客户端。这对于安全来说更好,因为:

  • 服务器上的 OAuth2 客户端可以是“机密”客户端(移动应用程序和 Web 应用程序都无法保守客户端机密,因此将其配置为“公共”客户端
  • 令牌不会暴露给Javascript(它甚至不会离开数据中心)

理想情况下,BFF 模式也适用于移动应用程序,但我还没有找到一种方法,可以在授权代码流期间使用与应用程序 REST 请求到网关的相同会话:/

© www.soinside.com 2019 - 2024. All rights reserved.