我如何才能获得有关使用Spring Security 6和Sping Boot 3作为oauth2 auth提供商与google和facebook授权的用户的信息[2023] [已关闭]

fnatzsnv  于 2023-10-15  发布在  Spring
关注(0)|答案(1)|浏览(89)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

上个月关门了。
Improve this question
我想听听更多的理论。我有一个在Sping Boot 3和Spring Security 6版本中编写的后端。我也有一个授权系统oauth2和谷歌作为提供商。我想做什么?我希望当用户通过Google或Facebook登录时,我可以访问他的Google帐户数据并将数据库保存到表中。我的问题

  1. oauth2令牌和oauth2授权之间有什么联系吗?1.1)如果是,是哪一个?1.1.1)客户端是否可以将jwt令牌沿着发送给我?1.1.1.1)如果是这样,怎么做?要实现什么接口?什么方法?
    1.在我看来,我不能对访问令牌做任何事情,因为它只是一组字符。
    我想看看例子和提示。
    我连接了授权系统却被卡在了死胡同里。只是大脑不知道它是怎么回事,它是什么。请帮帮
fivyi3re

fivyi3re1#

一些理论

Google和Facebook的访问令牌受众是他们自己的API。您不能轻松/安全/有效地使用它来授权对自己的资源服务器的请求。
“登录”是OAuth2客户端的责任,而不是资源服务器的责任。当您在Spring SecurityFilterChain中使用oauth2Login时,它使其成为客户端过滤器链,并且请求通过会话授权(而不是像查询OAuth2资源服务器时那样的Bearer访问令牌)。
大多数OpenID Providers都有身份联合特性,可以配置为“使用...登录”。
访问令牌可以是“opaque”(任何格式)或JSON Web令牌格式。资源服务器可以使用JWT解码器来验证令牌,并仅在该令牌是JWT的情况下获取相关声明。然而,它必须在发出它的授权服务器上内省这个令牌(这会引入延迟,但无论令牌格式如何都可以完成,包括JWT)
OAuth2中的“Authorization”是按照具有相同名称的HTML请求头来理解的:它给出了一些关于身份的指示,而不是权限。当考虑UAA(用户身份验证和授权)时,它实际上更接近于“身份验证”。但如果这是问题所在,如上所述,Authoriztion头部中的**Bearer访问令牌仅用于授权对OAuth2资源服务器的请求**。对Oauth2客户端的登录请求通过会话进行授权(对Oauth2授权服务器的大多数请求也是如此,至少是那些涉及authorization_code流的请求)。
移动的应用程序和基于JavaScript的Web应用程序(Angular、React、Vue等)会产生不安全的OAuth2客户端(需要使用“公共”客户端并将令牌暴露给互联网和应用程序代码)。此类应用程序应查询配置为OAuth2客户端的后端(具有oauth2 Login和CSRF保护)

  • 使用会话授权请求
  • 在将请求转发到下游资源服务器之前,在会话中用访问令牌替换会话cookie

如何从您所在的位置开始

选择一个自己的授权服务器(安装在自己的机器上,如Keycloak,或从云中提供,如Auth 0,Okta,Amazon Cognito等)。您还可以选择在spring-authorization-server的帮助下实现自己的授权服务器。
配置您的授权服务器以交付JWT访问令牌,并将您自己的资源服务器作为受众。
将客户端和资源服务器配置为仅使用授权服务器。
您可以考虑使用spring-cloud-gateway(带有spring-boot-starter-oauth2-clientTokenRelay=过滤器)作为移动的和基于JavaScript的Web应用程序的BFF。
Spring安全配置涉及面太广,无法用一个答案来回答。您应该从official doc开始(对于真实的,您应该阅读OAuth2部分的servlet或响应式应用程序,具体取决于您自己的应用程序)。你可能会发现我的教程也很有用。

相关问题