我无法使用在 iOS 客户端上从后端服务获得的令牌继续 OAuth 会话。具体来说,它看起来是一个权限问题:
iOS客户端获取Access Token(ObjC/FB iOS SDK v3.24)
使用以下权限建立的会话:
[FBSession openActiveSessionWithReadPermissions:@[
@"email",
@"user_about_me",
@"user_friends",
@"user_birthday",
@"public_profile" . . .
在结束的时候 。. .
FBSession *session = [FBSession activeSession];
NSString *accessToken = [session.accessTokenData accessToken];
发送到后端的访问令牌(即 Spring Boot + Kotlin)
使用上面获得的令牌实例化一个 Spring FacebookTemplate
,如下所示:
@Test fun testFacebookTemplate()
{
val facebook = FacebookTemplate("$$TOKEN_FROM_FACEBOOK_IOS_SDK$$")
//Raises exception . .
val profile = facebook.userOperations().userProfile
println("Profile: " + profile)
}
iOS客户端建立的OAuth会话从后端继续成功,例如可以返回Facebook好友列表。但是,如上所示,尝试检索配置文件会引发错误:
Error from Facebook: {"error":{"message":"(#3) Application does not have the capability to make this API call." , "type":"OAuthException","code":3,"fbtrace_id":"B4C+eS3n2PW"}}
DEBUG o.s.s.f.a.impl.FacebookErrorHandler - Facebook error:
DEBUG o.s.s.f.a.impl.FacebookErrorHandler - CODE : 3
DEBUG o.s.s.f.a.impl.FacebookErrorHandler - TYPE : OAuthException
问题:
- 缺少返回用户对象的权限。这似乎没有记录在 Spring 的FacebookTemplate中
- 这是在 OAuth 身份验证/授权期间(在我的情况下使用 FB iOS SDK)还是通过开发者控制台请求的?这对我来说不清楚,因为 openActiveSessionWithPermissions 和 Facebook 的 Web 控制台中的应用程序定义都包含对这些权限的引用。