c++ - 使用 Objective-C 和 C++ 实现 X-FACEBOOK-PLATFORM 身份验证失败

标签 c++ objective-c facebook authentication xmpp

我在 Objective C 中实现 X-FACEBOOK-PLATFORM XMPP 身份验证(但主要使用 C++ 代码),但我总是失败: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

我已经注册了应用,Id和Secret如下:

FacebookId @"136973476410894" FacebookSecret @"f6e269fe158b4a04d00ce8b311453ccd"

我使用 FBConnect 检索 session token 以请求权限: @"publish_stream",@"xmpp_login", @"offline_access"

Session token 在代码中称为token(见下文)

然后程序请求身份验证机制: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM"/>

接受挑战:<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9OTAzMTM5MjY2ODk3N0Q0ODMyNDQ2MDY1REMzMTE5RTc=</challenge>

然后是从挑战中提取的 Facebook Auth 正文: version=1&method=auth.xmpp_login&nonce=9031392668977D4832446065DC3119E7。 键:版本,值:1。 键:方法,值:auth.xmpp_login。 key :随机数,值:9031392668977D4832446065DC3119E7。 token :“BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC” API key :“136973476410894” API secret :“f6e269fe158b4a04d00ce8b311453ccd”

使用下面的代码构建响应:

token = 来自 FB 连接的 session token :(BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC)

APIkey = FacebookId (136973476410894);

APISecret = FacebookSecret (f6e269fe158b4a04d00ce8b311453ccd);

string call_id=[[NSString stringWithFormat:@"%0.0f", [[NSDate date] timeIntervalSince1970]] UTF8String];
string signature1 = "api_key=" + APIkey
+ "call_id=" + call_id
+ "method=auth.xmpp_login"
+ "nonce=" + nonce
+ "session_key=" + token
+ "v=1.0"
+ APISecret;

string md = MD5(signature1);

//std::transform(md.begin(), md.end(),md.begin(), ::tolower);
string response2 = "method=auth.xmpp_login&api_key=" + APIkey + "&session_key=" +token + "&call_id=" + call_id + "&sig=" + md + "&v=1.0&" + "nonce=" + nonce;

printf("++base64EncodedResponse response2: %s.\n", response2.c_str());

string response2Base64 = Base64::Encode(response2);

内置响应:method=auth.xmpp_login&api_key=136973476410894&session_key=BAAB8k59ntg4BANNuTHAkjTZBk3pW8pZBD7jWIpZBt8cf65oAT4eDm9euloGCX9NzfF9HwKQxUdEQ15YfeFtkdZAHVpkjL0j4CF0lZCQeuNTBXrvkbtUXC&call_id=1321457495&sig=5f376192b2dd1f5f928f651a996ce757&v=1.0&nonce=9031392668977D4832446065DC3119E7

节已发送(响应):<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bWV0aG9kPWF1dGgueG1wcF9sb2dpbiZhcGlfa2V5PTEzNjk3MzQ3NjQxMDg5NCZzZXNzaW9uX2tleT1CQUFCOGs1OW50ZzRCQU5OdVRIQWtqVFpCazNwVzhwWkJEN2pXSXBaQnQ4Y2Y2NW9BVDRlRG05ZXVsb0dDWDlOemZGOUh3S1F4VWRFUTE1WWZlRnRrZFpBSFZwa2pMMGo0Q0YwbFpDUWV1TlRCWHJ2a2J0VVhDJmNhbGxfaWQ9MTMyMTQ1NzQ5NSZzaWc9NWYzNzYxOTJiMmRkMWY1ZjkyOGY2NTFhOTk2Y2U3NTcmdj0xLjAmbm9uY2U9OTAzMTM5MjY2ODk3N0Q0ODMyNDQ2MDY1REMzMTE5RTc=</response>

服务器返回: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

不知道是哪里的问题,我觉得是对的,就是没办法认证。有谁知道是否有任何方法可以用服务器调试失败的原因?可能是该应用程序尚未在应用程序商店中?

如果有人可以提供帮助,我们将非常欢迎!

最佳答案

由于此代码出现在有关 Facebook 身份验证的一些示例中,因此没有人响应并且其他人可能会被同样的错误所欺骗 - 我将自己发布响应。

几乎一切正常,只需要在 signature1 字符串和 response2 字符串中为 access_token 更改标记 session_key

关于c++ - 使用 Objective-C 和 C++ 实现 X-FACEBOOK-PLATFORM 身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160454/

相关文章:

c++ - LinkedList 的复制构造函数上的段错误

ios - 从单独的 View 中重新加载 UIWebView

android - 从 facebook 和 twitter 应用程序重定向到移动应用程序

facebook - 缓存http ://graph. facebook.com/[UID]/图片调用?

ios - 如何在 iOS 上以编程方式将 Facebook 帖子可见性更改为 "public"

c++ - 将 UTC tm* 转换为本地化 tm* 的跨平台方式?

c++ - C++ 是否允许优化编译器忽略对 for 条件的副作用?

c++ - 带颜色的双边过滤

ios - block /方法可以互换吗?

iphone - iOS : formatting decimal numbers