标签: spring-social-facebook

Facebook Graph API拒绝新创建的访问令牌

今天早些时候,我们的Web应用程序的Facebook登录流程已停止为某些用户工作.当我们尝试获取当前配置文件时,会返回错误.它声称我们刚刚通过将用户重定向到OAuth登录流程而生成的访问令牌已被拒绝.

给出的理由是:

访问令牌无效,因为用户未在超过90天内使用该应用

对我来说,这没有任何意义,因为我们不会将访问令牌存储在除当前会话之外的任何位置,并且每次用户使用Facebook登录时都会重新创建它.

来自Spring Social的GET /me电话跟踪调用如下所示:

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)
Run Code Online (Sandbox Code Playgroud)

问题可能与Facebook API的变化有关,但我不知道这会如何影响我们在每次登录时创建的短期访问令牌.

facebook spring-social-facebook facebook-graph-api-v2.0

32
推荐指数
3
解决办法
6073
查看次数

对于版本v2.8及更高版本,不推荐使用错误消息(#12)生物字段

我使用了版本2.0.3.RELEASE的spring-social-facebook和Facebook app api v2.8.我打电话给Facebook登录但是返回了此消息."(#12)生物领域不适用于版本v2.8及更高版本"我该如何解决这个问题?

spring-social-facebook

31
推荐指数
5
解决办法
2万
查看次数

应用领域必须与Facebook网页游戏网址(https),移动网站网址,Unity二进制网址,网站网址或安全网页标签网址相匹配

我正在开发Spring Boot + Facebook集成示例.在这个例子中,我创建了一个应用程序https://developers.facebook.com/.下面显示了创建的应用程序的屏幕截图.

当我传递域名时,我收到以下错误:

App domains must match the domain of the Facebook Web Games URL (https), Mobile 
Site URL, Unity Binary URL, Site URL or Secure Page Tab URL. Please correct these
domains: localhost
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我使用了被阻止URL中提到的相同代码:此重定向失败,因为重定向URI未在应用程序的客户端OAuth设置中列入白名单.确保客户端和Web.

如果需要任何其他细节,请指导并告诉我.

java spring-social-facebook spring-boot spring-oauth2

22
推荐指数
3
解决办法
9231
查看次数

Spring Social Facebook:"OAuth2'状态'参数不匹配"

我在Spring MVC项目中使用Spring Social Facebook来支持Facebook登录.这在几乎所有情况下都运行良好,但偶尔我会在日志中看到以下异常.

ERROR org.springframework.social.connect.web.ProviderSignInController - Exception while completing OAuth 2 connection:
java.lang.IllegalStateException: The OAuth2 'state' parameter doesn't match.
at org.springframework.social.connect.web.ConnectSupport.verifyStateParameter(ConnectSupport.java:173)
at org.springframework.social.connect.web.ConnectSupport.completeConnection(ConnectSupport.java:155)
at org.springframework.social.connect.web.ProviderSignInController.oauth2Callback(ProviderSignInController.java:216)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
at …
Run Code Online (Sandbox Code Playgroud)

java spring spring-social spring-social-facebook

17
推荐指数
2
解决办法
2556
查看次数

Facebook使用现有用户访问令牌登录Spring Social

这是我现在拥有的:

  • Spring REST服务,其中许多API要求用户进行身份验证
  • '注册'API(/ api/v1/register)
  • 采用用户名/密码的"登录"API(/ api/v1/login)
  • 'Facebook Login'API依赖Spring Social和Spring Security创建用户连接并在(/ auth/facebook)中记录我的用户

我的问题是我希望这些API被多个客户端使用,但Facebook登录的方式现在,它在移动设备上运行不佳(在网站上运行良好).

这是移动方案:

  • 我使用Facebook的iOS SDK来请求用户的许可
  • Facebook返回用户访问令牌
  • 我想发送我的后端服务此令牌并让Spring Social接受它,创建用户连接等.

可以这样做吗?或者我是否必须编写自己的API来持久保存用户连接?

感谢任何帮助!

rest spring-security ios spring-social spring-social-facebook

15
推荐指数
1
解决办法
3337
查看次数

什么可能导致原始'OAuth2'状态参数在org.springframework.social.connect.web.ConnectSupport中为null?

我正在尝试在我的应用程序上使用Spring Social,并且在调试时注意到我的应用程序上原始的"OAuth2"状态参数始终为null.

请参阅org.springframework.social.connect.web.ConnectSupport下面的Spring Social源代码:

private void verifyStateParameter(NativeWebRequest request) {
    String state = request.getParameter("state");
    String originalState = extractCachedOAuth2State(request);//Always null...
    if (state == null || !state.equals(originalState)) {
        throw new IllegalStateException("The OAuth2 'state' parameter is missing or doesn't match.");
    }
}

private String extractCachedOAuth2State(WebRequest request) {
    String state = (String) sessionStrategy.getAttribute(request, OAUTH2_STATE_ATTRIBUTE);
    sessionStrategy.removeAttribute(request, OAUTH2_STATE_ATTRIBUTE);
    return state;       
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

编辑:我确实看到facebook传回的状态参数:

Request URL:https://www.facebook.com/v2.5/dialog/oauth?client_id=414113641982912&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fconnect%2Ffacebook&scope=public_profile&state=0b7a97b5-b8d1-4f97-9b60-e3242c9c7eb9
Request Method:GET
Status Code:302 
Remote Address:179.60.192.36:443
Run Code Online (Sandbox Code Playgroud)

编辑2:顺便说一下,我得到的例外情况如下:

Exception while handling OAuth2 callback (The OAuth2 'state' parameter is missing …
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 spring-social spring-social-facebook

9
推荐指数
1
解决办法
1373
查看次数

使用Google的Gson将Json转换为java对象

我正在使用Spring Social FqlQuery从facebook获取数据.这是我从facebook获得的JSON响应.我得到Json输出的控制器在这里,

fql = "SELECT work FROM user WHERE uid = me()";
facebook.fqlOperations().query(fql, new FqlResultMapper<Object>() {
    public Object mapObject(FqlResult result) {
        List list = (List) result.getObject("work");
        for (Object object : list) {
           JsonHelper jsonHelper = new JsonHelper();
           Gson gson = new GsonBuilder().setPrettyPrinting().create();
           String jsonOutput = gson.toJson(object);
           System.out.println(jsonOutput);
           gson.fromJson(jsonOutput, JsonHelper.class);
        }
Run Code Online (Sandbox Code Playgroud)

System.out.println for for循环输出多个json,如下所示:

{
  "employer": {
    "id": 129843057436,
    "name": "www.metroplots.com"
  },
  "location": {
    "id": 102186159822587,
    "name": "Chennai, Tamil Nadu"
  },
  "position": {
    "id": 108480125843293,
    "name": "Web Developer"
  },
  "start_date": …
Run Code Online (Sandbox Code Playgroud)

java spring json facebook spring-social-facebook

7
推荐指数
1
解决办法
1万
查看次数

Spring社交facebook登录错误 - 数字值超出int范围

我使用Spring Social时遇到问题,当我尝试登录Facebook时,出现以下错误:

org.springframework.social.facebook.api.User["video_upload_limits"]->org.springframework.social.facebook.api.VideoUploadLimits["size"])

com.fasterxml.jackson.databind.JsonMappingException: Numeric value (2505397589) out of range of int
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

maven依赖:

春季4.2.0.RELEASE

    <!-- Spring Social -->
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-core</artifactId>
        <version>1.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-web</artifactId>
        <version>1.1.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>

    <!-- jason -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.6.2</version>
    </dependency>

    ==> same error when version up to 2.7.0-rc1(jackson)
Run Code Online (Sandbox Code Playgroud)

代码:

String authorizationCode = request.getParameter("code");

FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(this.appId, this.appSecret);

OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();

AccessGrant accessGrant = oauthOperations.exchangeForAccess(authorizationCode, RequestUtil.getRedirectionURLForSNSSignUp(request, …
Run Code Online (Sandbox Code Playgroud)

spring facebook login jackson spring-social-facebook

7
推荐指数
1
解决办法
1649
查看次数

Spring Social:"无法获取ConnectionRepository:没有用户登录"

我正在尝试使用https://github.com/spring-guides/gs-accessing-facebook中描述的Facebook登录

当我尝试创建JdbcUsersConnectionRepository时,我需要在类路径中使用spring security.当我添加弹簧安全时,我收到了

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in"
Run Code Online (Sandbox Code Playgroud)

当试图接收连接时

Connection<Facebook> connection = connectionRepository.findPrimaryConnection(Facebook.class);
Run Code Online (Sandbox Code Playgroud)

或检查

if (!facebook.isAuthorized())
Run Code Online (Sandbox Code Playgroud)

所有这些只有在Spring安全性位于类路径中时才会发生

spring facebook spring-security spring-social spring-social-facebook

7
推荐指数
1
解决办法
1408
查看次数

位置没有填充在Spring Social Facebook上

我正试图在Spring Social Facebook中获得用户位置:

Facebook fb = ((Facebook) connection.getApi());
Page pg = fb.pageOperations().getPage(fb.userOperations().getUserProfile().getLocation().getId());
Run Code Online (Sandbox Code Playgroud)

问题是pg.getLocation()退货null.

我也尝试过

fb.fetchObject(fb.userOperations().getUserProfile().getLocation().getId(), org.springframework.social.facebook.api.Location.class)
Run Code Online (Sandbox Code Playgroud)

但它只填充名称,而不是国家或其他领域.

尝试使用Graph API Explorer /v2.6/112286918797929?fields=id,name,location按预期返回:

{
  "id": "112286918797929",
  "name": "Sacele",
  "location": {
    "city": "Sacele",
    "country": "Romania",
    "latitude": 45.6167,
    "longitude": 25.6833
  }
}
Run Code Online (Sandbox Code Playgroud)

这是Spring Social Facebook的问题吗?

我正在使用Spring Social 1.1.4和Spring Social Facebook 2.0.3.

我也试过Spring社交Facebook - 获取用户位置,但遗憾的是并非所有地方都遵循名称约定城市,国家,其中一些仅包括名称城市,而不是国家.另外你怎么能得到地理坐标?

java facebook-graph-api spring-social spring-social-facebook

7
推荐指数
1
解决办法
733
查看次数