Facebook OAuth2身份验证不适用于Sping Boot 应用程序

6uxekuva  于 2023-08-02  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在构建一个使用google/facebook oauth2认证的spring-boot应用程序。应用程序配置集如下所示:

#Google
    spring.security.oauth2.client.registration.google.clientId=<googleClientId>
    spring.security.oauth2.client.registration.google.clientSecret=<googleClientSecret>
    spring.security.oauth2.client.registration.google.redirectUri={baseUrl}/oauth2/callback/{registrationId}
    spring.security.oauth2.client.registration.google.scope=email,profile
    
    #Facebook
    spring.security.oauth2.client.registration.facebook.clientId=<fbClientId>
    spring.security.oauth2.client.registration.facebook.clientSecret=<fbClientSecret>
    spring.security.oauth2.client.registration.facebook.redirectUri={baseUrl}/oauth2/callback/{registrationId}
    spring.security.oauth2.client.registration.facebook.scope=email,public_profile
    
    spring.security.oauth2.client.provider.facebook.authorizationUri=https://www.facebook.com/v13.0/dialog/oauth
    spring.security.oauth2.client.provider.facebook.tokenUri=https://graph.facebook.com/v13.0/oauth/access_token
    spring.security.oauth2.client.provider.facebook.userInfoUri=https://graph.facebook.com/v13.0/me?fields=id,first_name,middle_name,last_name,name,email,verified,is_verified,picture.width(250).height(250)

字符串
对于google来说,这很好用--应用程序有一个重定向到google auth端点的authorization rest控制器。登录后,我可以看到一个代码被返回并发送到一个重定向URI {baseUrl}/ouath 2/callback/google,它被交换为一个令牌,该令牌反过来被解析并用于构造一个通用的应用程序级Oauth2承载令牌(用于我的共享API等)。
对于Facebook,我正在尝试类似的设置。初始重定向工作,用户被定向到Facebook登录页面,并设置了等效的client_id / redirect uri参数:

https://www.facebook.com/v3.0/dialog/oauth
    ?response_type=code
    &client_id=<fbClientId>
    &scope=email+public_profile
    &state=<state>
    &redirect_uri=https%3A%2F%2F192.168.50.150.nip.io%3A8300%2Foauth2%2Fcallback%2Ffacebook
    &ret=login
    &fbapp_pres=0
    &logger_id=e1036c5a-ac6e-448c-ab8g-655727eae993
    &tp=unspecified
    &cbt=1643459835928
    &ext=1645463198
    &hash=AeJog6HeUz9jlsDRQQo


然而,当登录后获得代码并发送到重定向uri {baseUrl}/ouath 2/callback/facebook时,当我的应用程序尝试访问FB用户信息资源服务器时返回错误:
x1c 0d1x的数据



我没有从我的后端到FB用户信息URI的任何流量捕获,所以我不能确切地看到正在发送的内容,但我得到的响应是服务器错误:
[invalid_user_info_response]尝试检索UserInfo资源时出错:错误详细信息:[用户信息URI:https://graph.facebook.com/v3.0/me?fields=id,first_name,middle_name,last_name,name,email,verified,is_verified,picture.width(250).height(250),错误代码:服务器错误]
graph.facebook.com端点是否存在任何已知问题?

wn9m85ua

wn9m85ua1#

将v13更改为v17,并删除字段is_verified
旧的

spring.security.oauth2.client.provider.facebook.userInfoUri=https://graph.facebook.com/v13.0/me?fields=id,first_name,middle_name,last_name,name,email,verified,is_verified,picture.width(250).height(250)

字符串
新的

spring.security.oauth2.client.provider.facebook.userInfoUri=https://graph.facebook.com/v17.0/me?fields=id,first_name,middle_name,last_name,name,email,verified,picture.width(250).height(250)


你可以在这样的链接上测试https://developers.facebook.com/tools/explorer?method=GET&path=me%3Ffields%3Did%2Cfirst_name%2Cmiddle_name%2Clast_name%2Cname%2Cemail%2Cverified%2Cpicture.width(250).height(250)&version=v17.0


的数据
相关的有用配置可以在https://github.com/spring-projects/spring-security/blame/main/config/src/main/java/org/springframework/security/config/oauth2/client/CommonOAuth2Provider.java上看到

相关问题