使用 Spring Boot 和 Angular 实现 Google OAuth 2.0

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

如何仅使用 Google OAuth 实现登录。我不想在我的应用程序数据库 (PostgreSQL) 中存储密码和敏感信息(我只会存储电子邮件、姓名和个人资料照片)。

只有特定的人才能访问应用程序,我希望他们使用谷歌登录,并检查用户是否有权访问。

我使用 Spring Boot 作为后端 REST API,使用 Angular 作为前端,使用 AWS 作为文件存储和数据库,使用 Gradle 作为构建工具。

我在 YouTube 上观看了一些视频,并阅读了一些有关身份验证的文章,但它们没有帮助,因为它们不适合我的用例,并且使用了其他技术堆栈。

angular spring-boot google-oauth
1个回答
2
投票

电子邮件、姓名和个人资料照片都是 OpenID 数据。您很可能不必将其存储在自己的数据库中(并在用户更新其 Google 个人资料时节省数据同步的负担)。保存用户“主题”(

sub
声明是不可变的)应该足够了。

Angular 应用程序应从 ID 令牌(而不是从您的 API)访问当前经过身份验证的用户的 OpenID 数据。使用授权代码流程进行身份验证时,ID 令牌是响应的一部分(前提是请求了

openid
范围,以及您的情况下的
email
profile
)。

Spring REST API 应该能够使用客户端凭据流从 Google API 查询用户数据。

在 Angular 应用程序中使用 angular-auth-oidc-client 进行用户身份验证、访问和 ID 令牌获取和刷新。该库还将向发送到配置路由的所有请求添加访问令牌:您的资源服务器将需要它。

将 Spring REST API 配置为资源服务器那里有教程,并使用准备好客户端凭据流的 REST 客户端来查询 Google API(如果需要)(

@FeignClient
RestTemplate
WebClient
是 Spring 广泛使用的选项)

2023 更新

Spring Security 团队现在不鼓励使用公共 OAuth2 客户端。由于通过使用 angular-auth-oidc-client 我们使单页应用程序成为公共 OAuth2 客户端,因此不应再应用上述解决方案。

另一种方法是使用后端前端(您信任的服务器上的中间件),配置为具有登录功能的“机密”客户端。从浏览器到此类 BFF 的请求均通过sessions 进行授权。只有从 BFF 到资源服务器的请求才使用令牌进行授权(存储在会话中)。

spring-cloud-gateway

非常适合带有

spring-boot-starter-oauth2-client
TokenRelay
滤镜的好友。我为此写了一个
教程

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