Spring boot 3.0(后端)+ ionic(前端)Oauth2 google

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

我不太明白概念如何在线索 oauth2 中将前后链接起来。我在 spring witch oauht2-client 和 oauth2-resource-server 中看到很少的库。当客户端使用应用程序的 ionic 时,它从 google 获取令牌,然后将此 **id 令牌 ** 发送到我的后端 spring boot 应用程序,该应用程序使用 oauth2-resource-server,我验证此 beawer 令牌并从 api 资源返回数据。

但是我想创建一个本地用户(注册用户),但我不太明白必须在哪里以及主要如何创建这个本地用户。

现在它只是验证来自 google 的 id 令牌并从 api 资源返回信息。

哪种正确方式使用oauth2? 我想它会是这样的:

  1. 用户批准谷歌oauth2
  2. 前端发送带有id Token的请求
  3. 后端检查用户是否已存在(如果不从 id 令牌信息创建)
  4. 后端创建访问令牌并返回前端
  5. 前端使用访问令牌从资源服务器获取信息

你能解释一下我必须如何正确地做到这一点吗?

我在 Spring Boot 上的代码

安全.conf

SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests() .requestMatchers("/open").permitAll() .anyRequest().authenticated() .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .oauth2ResourceServer().jwt() .and().and() .cors().and().csrf().disable() .build(); }
应用程序.aml

spring: security: oauth2: resourceserver: jwt: issuer-uri: accounts.google.com jwk-set-uri: https://www.googleapis.com/oauth2/v3/certs

构建.gradle

   implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web'

spring-boot spring-security oauth-2.0 spring-oauth2 spring-resource-server
2个回答
0
投票

您应该在后端配置一个 OAuth2 授权服务器(最好是一个具有社交登录功能的 OpenID 提供商,用于您的“使用 Google 登录”功能)。此 OAuth2 授权服务器将处理用户注册和身份验证(使用授权代码流程)。

有很多这样的解决方案可以在您的服务器上运行(Keycloak 是一个著名的解决方案),也可以从云中使用(Auth0 和 Amazon Cognito 只是许多产品中的示例)。您甚至可以使用 Spring 构建自己的授权服务器(有一个 spring-authorization-server 项目,但请注意,它需要更多的努力才能开始)。

关于您的离子前端,可以:

  • 使其成为一个公共 OAuth2 客户端,并为您的框架提供一个库(例如
    angular-auth-oidc-client
    ,如果使用 Angular),但这不是趋势
  • 在服务器上的前端和 REST API 之间插入中间 OAuth2 客户端。这称为 Backend FFrontend 模式,旨在从浏览器或移动应用程序中隐藏 OAuth2 令牌。 Spring Cloud Gateway 可以配置为 BFF。

我的教程涵盖了大部分主题。


-1
投票

如果我理解正确的话,您想使用 Oauth2 与 Google 来确认用户的身份并在数据库中的某个位置创建本地用户。

如果是这种情况,我认为你写的步骤是正确的。让我在这里重写它们:

  1. 您的前端将获得 Google 授权码
  2. 然后,您的前端会将这段代码发送到您的后端
  3. 后端将使用此身份验证代码、client_id、client_secret 和其他几个参数向 Google 发送请求。
  4. Google会返回一个包含id_token和access_token的json(access_token可用于查询Google API)。
  5. 您将从 id_token 中提取用户的数据,例如电子邮件、姓名、姓氏。
  6. 您可以使用步骤 5 中的数据创建本地用户并将其存储在数据库中(如果用户不存在)。
  7. 创建您自己的 JWT 令牌并将其返回给用户。

你可以看看这个教程

它展示了如何在 Spring/React 中实现这一点。我认为你可以根据你的场景和框架进行调整。如果您有任何疑问,请随时询问。

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