今天早些时候,我们的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的变化有关,但我不知道这会如何影响我们在每次登录时创建的短期访问令牌.
我使用了版本2.0.3.RELEASE的spring-social-facebook和Facebook app api v2.8.我打电话给Facebook登录但是返回了此消息."(#12)生物领域不适用于版本v2.8及更高版本"我该如何解决这个问题?
我正在开发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.
如果需要任何其他细节,请指导并告诉我.
我在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) 这是我现在拥有的:
我的问题是我希望这些API被多个客户端使用,但Facebook登录的方式现在,它在移动设备上运行不佳(在网站上运行良好).
这是移动方案:
可以这样做吗?或者我是否必须编写自己的API来持久保存用户连接?
感谢任何帮助!
rest spring-security ios spring-social spring-social-facebook
我正在尝试在我的应用程序上使用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) 我正在使用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) 我使用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) 我正在尝试使用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
我正试图在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